android - FFmpeg 在处理命令时抛出异常

标签 android process ffmpeg ioexception

我正在通过进程执行命令,但它总是抛出这个错误有人帮助我吗?

FFMPEG命令:

    String[] ffmpegCommand = {"/data/data/com.example.app/ffmpeg", "-r", ""+VIDEO_FRAME_RATE, "-b", "1000", "-vcodec", "mjpeg", "-i", Environment.getExternalStorageDirectory().getPath() + "/com.example.app/frame_%05d.jpg", Environment.getExternalStorageDirectory().getPath() + "/video.mov"};

    ffmpegProcess = new ProcessBuilder(ffmpegCommand).redirectErrorStream(true).start();            

W/System.err(29844): java.io.IOException: Error running exec(). Command: [/data/data/com.example.app/ffmpeg, -r, 18, -b, 1000, -vcodec, mjpeg, -i, /storage/emulated/0/com.example.app/frame_%05d.jpg, /storage/emulated/0/video.mov] Working Directory: null Environment: [ANDROID_ROOT=/system, EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, LOOP_MOUNTPOINT=/mnt/obb, EMULATED_STORAGE_TARGET=/storage/emulated, ANDROID_BOOTLOGO=1, LD_LIBRARY_PATH=/vendor/lib:/system/lib, EXTERNAL_STORAGE=/storage/emulated/legacy, ANDROID_SOCKET_zygote=11, ANDROID_DATA=/data, PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin, ANDROID_ASSETS=/system/app, ASEC_MOUNTPOINT=/mnt/asec, BOOTCLASSPATH=/system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar:/system/framework/oem-services.jar:/system/framework/qcmediaplayer.jar, ANDROID_PROPERTY_WORKSPACE=9,0, ANDROID_STORAGE=/storage]
06-02 12:21:36.660: W/System.err(29844):    at java.lang.ProcessManager.exec(ProcessManager.java:211)
06-02 12:21:36.660: W/System.err(29844):    at java.lang.ProcessBuilder.start(ProcessBuilder.java:195)
06-02 12:21:36.662: W/System.err(29844):    at com.example.app.FFMPEGRecorderActivity$ProcessVideo.doInBackground(FFMPEGRecorderActivity.java:1448)
06-02 12:21:36.662: W/System.err(29844):    at com.example.app.FFMPEGRecorderActivity$ProcessVideo.doInBackground(FFMPEGRecorderActivity.java:1)
06-02 12:21:36.662: W/System.err(29844):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
06-02 12:21:36.663: W/System.err(29844):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-02 12:21:36.663: W/System.err(29844):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-02 12:21:36.663: W/System.err(29844):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-02 12:21:36.663: W/System.err(29844):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-02 12:21:36.663: W/System.err(29844):    at java.lang.Thread.run(Thread.java:841)
06-02 12:21:36.664: W/System.err(29844): Caused by: java.io.IOException: No such file or directory
06-02 12:21:36.665: W/System.err(29844):    at java.lang.ProcessManager.exec(Native Method)
06-02 12:21:36.666: W/System.err(29844):    at java.lang.ProcessManager.exec(ProcessManager.java:209)
06-02 12:21:36.667: W/System.err(29844):    ... 9 more

最佳答案

从快速查看您的错误来看,ffmpeg 的输入文件有 null 而不是完整路径。

所以,更换

 Environment.getExternalStorageDirectory().getPath() + "/com.example.app/frame_%05d.jpg"

跟随伪代码。

在输入 jpg 上获取 File 实例。
  myInputJpg.getAbsolutePath()

可以为输入提供非空 ffmpeg 文件句柄...

关于android - FFmpeg 在处理命令时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23989378/

相关文章:

c# - Windows 对您可以创建和启动的进程对象的数量有限制吗?

java - 当我通过网络调用 exec 并持续一段时间后,它失败了

android - 如何为 Android 构建 ffmpeg 可执行二进制文件?

ffmpeg - 使用 FFMPEG 录制 IP 摄像机流

android - 按下后退按钮时停止媒体播放器 MP3

android - 我可以在 Android 中使用自修改吗?

android - 如何将 ExifInterface 与流或 URI 一起使用

java - 按对象中的值对对象进行排序

linux - 在 linux 中递归地杀死带有子进程的 R 进程

ffmpeg - 使用 FFmpeg 将图像转换为具有可变 fps 的视频