java - Android java 应用程序上的 FFMPEG

标签 java android cordova video ffmpeg

我正在使用 Cordova 制作混合应用程序原型(prototype):https://cordova.apache.org 。还使用这个插件:https://github.com/jbavari/cordova-plugin-video-editor

该插件使用 FFMPEG 将视频渲染为新格式。执行此操作的具体代码如下:

https://github.com/jbavari/cordova-plugin-video-editor/blob/master/src/android/VideoEditor.java

al.add("ffmpeg");
al.add("-i");
al.add(videoSrcPath);
String[] ffmpegCommand = al.toArray(new String[al.size()]);
vk.run(ffmpegCommand, workFolder, appContext);
Log.d(TAG, Arrays.toString(ffmpegCommand));

当使用变量在 Android Studio 中注销时,它是:

[ffmpeg, -y, -i, /storage/emulated/0/DCIM/Camera/20150709_172753.mp4, -strict, experimental, -s, 320x320, -r, 24, -vcodec, libx264, -preset, ultrafast, -b, 2097152, -ac, 1, -ar, 22050, -t, 2.0, /storage/emulated/0/Movies/HelloWorld/VID_render-1436477283566.mp4]

这工作得很好。

我想修改此命令以允许多个视频和其他选项。这是我在我的机器上测试过的 FFMPEG 终端命令:

./ffmpeg -i a.mp4 -i b.mp4 -filter_complex "[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" -loglevel debug -strict -2 output.mp4

我尝试修改 java 代码,但失败了:

al.add("ffmpeg");
al.add("-i");
al.add(videoSrcPath); 
al.add("-i");
al.add(videoSrcPath2);
al.add("-filter_complex");
al.add("[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]");
al.add("-map");
al.add("[v]");
al.add("-map");
al.add("[a]");
al.add("-strict");
al.add("-2");

使用变量注销时,这是失败的命令:

[ffmpeg, -y, -i, /storage/emulated/0/DCIM/Camera/20150709_175137.mp4, -i, /storage/emulated/0/Movies/HelloWorld/20150709_234321.mp4, -filter_complex, [0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a], -map, [v], -map, [a], -strict, -2, experimental, -s, 320x320, -r, 24, -vcodec, libx264, -preset, ultrafast, -b, 2097152, -ac, 1, -ar, 22050, -t, 2.0, /storage/emulated/0/Movies/HelloWorld/VID_render-1436478706526.mp4]

我尝试使用 FFMPEG 的日志记录功能,但无法让它返回到 Java 日志,这确实限制了我可以调试的内容:(

al.add("-loglevel");
al.add("debug");

任何帮助将不胜感激!

最佳答案

原始命令行有以下选项:

-strict, experimental

你的新的有这个:

-strict, -2, experimental

看起来这就是它崩溃的原因。如果没有,请记录 stdout/stderr,以便您可以看到它提示的内容。

关于java - Android java 应用程序上的 FFMPEG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31328996/

相关文章:

java - 用 boolean 运算符实现三值逻辑运算?

java - Maven pom.xml 参数将根据值安装不同的依赖项

android - 如何在 Android 中找到第一个 Activity ?

android - 将图像保存和检索到数据库的最佳方法

android - Fragment 到 Activity 通信的替代方式

javascript - 调用phonegap摄像头功能后出现空白

java - 在这种情况下加密可以解决吗

java - 什么是 firebase 以及如何在 Android 中使用它?

cordova - 使用 ionic 2 CLI 创建 ionic 1.x 应用程序

ios - 无法使用 phonegap 打开 sqlite 数据库,但它在 objective-c 上运行良好