如何在Android上使用已编译的FFMPEG jar执行FFMPEG

时间:2016-02-19 14:05:13

标签: java android ffmpeg

我添加了org.bytedeco.javacpp的ffmpeg-2.3-0-9.jar(https://www.versioneye.com/java/org.bytedeco.javacpp-presets:ffmpeg/2.3-0.9),我需要能够在我的Android应用程序中执行命令,例如:

    ffmpeg -ss 00:00:00 -t 00:00:15 -i in.mp4 -codec copy out.mp4

但是,“ffmpeg”不是此jar公开的类或方法。有些帖子建议我在处理ffmpeg本机代码时应该使用exec方法,但是你如何做到这一点(如果这对这个库来说甚至是正确的事情)? 我正在尝试以下命令但没有成功。

    Process p=Runtime.getRuntime().exec("/libs/ffmpeg-2.3-0.9 -i -i in.mp4 -codec copy out.mp4");

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我决定使用FFmpeg4Android。它比使用JNI的任何东西都更加用户友好,并且它能够接受AsyncTask中的ffmpeg命令。进口是:

    import com.netcompss.ffmpeg4android.GeneralUtils;
    import com.netcompss.loader.LoadJNI;

doInBackground代码是:

    PowerManager powerManager = (PowerManager) Main.this.getSystemService(Activity.POWER_SERVICE);
    PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "VK_LOCK");
    wakeLock.acquire();
    String commandStr = "ffmpeg -ss 00:00:00 -t 00:00:15 -i "+fullInVideoPath+" -codec copy " + fullOutVideoPath;
    LoadJNI vk = new LoadJNI();
    try {
    vk.run(GeneralUtils.utilConvertToComplex(commandStr), scishotfolder, getApplicationContext());
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    finally
    {
    if (wakeLock.isHeld()) wakeLock.release();
    }

我希望这可以帮助那些人。唯一的问题是它会产生无法在VideoView内播放的损坏视频!不幸的是,另一个名为mp4parser的流行替代品也会产生类似损坏的mp4文件。