Java Android FFMPEG-未创建任何输出文件

Java Android FFMPEG-未创建任何输出文件,java,android,shell,terminal,ffmpeg,Java,Android,Shell,Terminal,Ffmpeg,每当我发出以下命令时,都不会创建intermediate.ts输出文件: getRuntime.exec("ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts") 即使在使用如下字符串[]时: String[] cmd = { "sh", "-c", "./ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts int

每当我发出以下命令时,都不会创建intermediate.ts输出文件:

getRuntime.exec("ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts")
即使在使用如下字符串[]时:

String[] cmd = {
"sh",
"-c",
"./ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts"
}
但当我打开终端模拟器并编写相同的东西时,我得到了我想要的正确输出。通过Java,我可以从以下方面获得输出:

ffmpeg -help 

但无法使用FFMpeg和Java的getRuntime.exec创建文件。我做错了什么?

当您在Android应用程序的上下文中运行ffmpeg时,其工作目录是文件系统的根目录,并且以只读方式装载。可以指定输出文件的完整路径,也可以使用。输出文件必须转到应用程序具有写入权限的目录,例如myActivity.GetFileDir或myPackageInfo.applicationInfo.dataDir


您不需要通过sh运行ffmpeg,但必须提供可执行文件的完整路径,或通过Runtime.exec的第二个参数指定路径。我一直在使用Runtime.execstring为ffmpeg和输出文件提供完整路径。我使用的输出目录是getFilesDir。我尝试使用Runtime.execcmd、null、wrkdir,其中cmd是ffmpeg的完整路径,wrkdir是getFilesDir,但只得到一个io异常。我不太确定我做错了什么。有什么建议吗?让我们试试其他命令行而不是ffmpeg,例如/system/sh-c echo abc>def/system/bin/echo abc>def工作正常。我还可以使用/system/bin/touch.././storage/emulated/0/android/data/com.my_package/files/sampleJava.txt创建一个空文件,没有任何问题。但是,调用ffmpeg时使用上述路径失败,除非在我的手机上使用shell终端模拟器。我的ffmpeg二进制文件位于data/data/com.My_包中,如果这有什么区别的话。您写道您确实收到了来自ffmpeg-help的输出。但也许你没有在应用程序的上下文中测试这一点。我不知道您是如何在/data/data/com.my_包中获得ffmpeg二进制文件的,但请确保权限正确:您需要由Android系统分配给您的应用程序的用户读取和执行。使其正常运行并实现自动化的最简单方法是。