我正在尝试在录制的视频中建立正确的旋转,因为在某些设备中 setOrientationHint 方法不起作用,因为在某些视频播放器中可能会选择在播放期间忽略视频中的合成矩阵,Android 文档。
所以,我决定使用 ffmpeg 库。我正在为该应用程序开发测试。在 Ubuntu 中,我下载这个库并执行 configure 和 make 以获得 ffmpeg 可执行文件,我将此可执行文件复制到 sdcard 中的 DCIM 文件夹,对于我为摄像机应用程序录制的视频也是如此。所以,在 DCIM 文件夹中,我有 ffmpeg 可执行文件和一个视频。
我创建了一个测试项目,在 onCreate 方法中,我包括:
try {
Process p= Runtime.getRuntime().exec("chmod 777 /mnt/sdcard/beni/ffmpeg");
p.waitFor();
p = Runtime.getRuntime().exec("/mnt/sdcard/beni/ffmpeg -i /mnt/sdcard/beni/f.mp4 -vf \"transpose=1\" -r 24 -sameq /mnt/sdcard/beni/f2.mp4");
p.waitFor();
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
但我有以下警告:
09-13 13:14:03.547: W/System.err(7782): java.io.IOException: Error running exec(). Command: [/mnt/sdcard/beni/ffmpeg, -i, /mnt/sdcard/beni/f.mp4, -vf, "transpose=1", -r, 24, -sameq, /mnt/sdcard/beni/f2.mp4] Working Directory: null Environment: null
09-13 13:14:03.547: W/System.err(7782): at java.lang.ProcessManager.exec(ProcessManager.java:224)
09-13 13:14:03.547: W/System.err(7782): at java.lang.Runtime.exec(Runtime.java:189)
09-13 13:14:03.547: W/System.err(7782): at java.lang.Runtime.exec(Runtime.java:275)
09-13 13:14:03.547: W/System.err(7782): at java.lang.Runtime.exec(Runtime.java:210)
09-13 13:14:03.547: W/System.err(7782): at com.example.prueba.MainActivity.onCreate(MainActivity.java:22)
09-13 13:14:03.547: W/System.err(7782): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-13 13:14:03.547: W/System.err(7782): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
09-13 13:14:03.547: W/System.err(7782): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
09-13 13:14:03.547: W/System.err(7782): at android.app.ActivityThread.access$1500(ActivityThread.java:121)
09-13 13:14:03.547: W/System.err(7782): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
09-13 13:14:03.547: W/System.err(7782): at android.os.Handler.dispatchMessage(Handler.java:99)
09-13 13:14:03.547: W/System.err(7782): at android.os.Looper.loop(Looper.java:138)
09-13 13:14:03.547: W/System.err(7782): at android.app.ActivityThread.main(ActivityThread.java:3701)
09-13 13:14:03.547: W/System.err(7782): at java.lang.reflect.Method.invokeNative(Native Method)
09-13 13:14:03.547: W/System.err(7782): at java.lang.reflect.Method.invoke(Method.java:507)
09-13 13:14:03.547: W/System.err(7782): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
09-13 13:14:03.547: W/System.err(7782): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
09-13 13:14:03.547: W/System.err(7782): at dalvik.system.NativeStart.main(Native Method)
09-13 13:14:03.547: W/System.err(7782): Caused by: java.io.IOException: Permission denied
09-13 13:14:03.547: W/System.err(7782): at java.lang.ProcessManager.exec(Native Method)
09-13 13:14:03.547: W/System.err(7782): at java.lang.ProcessManager.exec(ProcessManager.java:222)
09-13 13:14:03.547: W/System.err(7782): ... 17 more
这段代码对吗?或者我做错了什么。