我正在尝试从 mp4 文件中提取音频,但我找到了 JAVE 库。
代码是:
public class MainActivity extends AppCompatActivity {
private File folder;
private File fileArtist;
private File destinationFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
folder=new File(Environment.getExternalStorageDirectory().toString() + "/.FDVIDEOS/");
fileArtist=new File(folder,".video.mp4");
destinationFile=new File(Environment.getExternalStorageDirectory().toString()+"/.FDVIDEOS/","audio.mp3");
if(!destinationFile.exists()){
try {
destinationFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
AudioAttributes audioAttributes = new AudioAttributes();
audioAttributes.setCodec("libmp3lame");
audioAttributes.setBitRate(128000);
audioAttributes.setChannels(new Integer(2));
audioAttributes.setSamplingRate(new Integer(44100));
EncodingAttributes encodingAttributes = new EncodingAttributes();
encodingAttributes.setFormat("mp3");
encodingAttributes.setAudioAttributes(audioAttributes);
Encoder encoder = new Encoder();//line 46
try {
encoder.encode(fileArtist, destinationFile, encodingAttributes);//line 49
} catch (EncoderException e) {
e.printStackTrace();
}
}
}
我得到了这个例外:
17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: java.io.IOException: Error running exec(). Command: [/bin/chmod, 755, /data/user/0/com.keekorok.prueba2.pruebamezclaaudio/cache/jave-1/ffmpeg] Working Directory: null Environment: null
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.ProcessManager.exec(ProcessManager.java:211)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.Runtime.exec(Runtime.java:174)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.Runtime.exec(Runtime.java:129)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at it.sauronsoftware.jave.DefaultFFMPEGLocator.<init>(DefaultFFMPEGLocator.java:85)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at it.sauronsoftware.jave.Encoder.<init>(Encoder.java:111)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at com.keekorok.prueba2.pruebamezclaaudio.MainActivity.onCreate(MainActivity.java:46)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.Activity.performCreate(Activity.java:6876)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread.access$1100(ActivityThread.java:222)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.os.Looper.loop(Looper.java:158)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7229)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: Caused by: java.io.IOException: No such file or directory
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.ProcessManager.exec(Native Method)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.ProcessManager.exec(ProcessManager.java:209)
03-16 17:23:22.211 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: ... 17 more
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: it.sauronsoftware.jave.EncoderException: java.io.IOException: Error running exec(). Command: [/data/user/0/com.keekorok.prueba2.pruebamezclaaudio/cache/jave-1/ffmpeg, -i, /storage/emulated/0/.FDVIDEOS/.videopruebaartista.mp4, -vn, -acodec, libmp3lame, -ab, 128000, -ac, 2, -ar, 44100, -f, mp3, -y, /storage/emulated/0/.FDVIDEOS/audio.mp3] Working Directory: null Environment: null
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at it.sauronsoftware.jave.Encoder.encode(Encoder.java:831)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at it.sauronsoftware.jave.Encoder.encode(Encoder.java:713)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at com.keekorok.prueba2.pruebamezclaaudio.MainActivity.onCreate(MainActivity.java:49)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.Activity.performCreate(Activity.java:6876)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread.access$1100(ActivityThread.java:222)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.os.Looper.loop(Looper.java:158)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7229)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: Caused by: java.io.IOException: Error running exec(). Command: [/data/user/0/com.keekorok.prueba2.pruebamezclaaudio/cache/jave-1/ffmpeg, -i, /storage/emulated/0/.FDVIDEOS/.videopruebaartista.mp4, -vn, -acodec, libmp3lame, -ab, 128000, -ac, 2, -ar, 44100, -f, mp3, -y, /storage/emulated/0/.FDVIDEOS/audio.mp3] Working Directory: null Environment: null
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.ProcessManager.exec(ProcessManager.java:211)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.Runtime.exec(Runtime.java:174)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.Runtime.exec(Runtime.java:129)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at it.sauronsoftware.jave.FFMPEGExecutor.execute(FFMPEGExecutor.java:103)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at it.sauronsoftware.jave.Encoder.encode(Encoder.java:829)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: ... 14 more
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: Caused by: java.io.IOException: Permission denied
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.ProcessManager.exec(Native Method)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: at java.lang.ProcessManager.exec(ProcessManager.java:209)
03-16 17:23:22.221 23404-23404/com.keekorok.prueba2.pruebamezclaaudio W/System.err: ... 18 more
我的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.keekorok.prueba2.pruebamezclaaudio">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
看起来像是权限问题,但正如您所见,我在清单中有它们。
有人知道我该如何解决吗?
谢谢你。