0

我正在尝试从 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>

看起来像是权限问题,但正如您所见,我在清单中有它们。

有人知道我该如何解决吗?

谢谢你。

4

0 回答 0