java - Android 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[]:

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 时,其工作目录是文件系统的根目录,并且以只读方式挂载。您可以指定输出文件的完整路径,或使用 exec(cmd, null, dir) 。输出文件必须转到您的应用程序具有写入权限的目录,例如myActivity.getFilesDir()myPackageInfo.applicationInfo.dataDir

你不需要通过sh运行ffmpeg,但你必须给出可执行文件的完整路径,或者通过Runtime的第二个参数指定PATH .exec()

关于java - Android FFMPEG - 未创建输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42878815/

相关文章:

java - 删除字符串中的某些字符,Java

shell - 为什么 sed 在 shell 脚本中表现不同?

shell - 关于 KornShell 中的 'for' 循环

java - java中的NotifyPropertyChanged - Android

main 中的 java.lang.ExceptionInInitializerError

linux - 如何通过shell脚本调用COBOL程序

java - 如何识别字符串是否包含无法使用 utf8-mb4 字符集存储的特殊字符

Java 多线程 - Eratosthenes 筛法的基本并行示例

接受 GET 和 POST 请求的 Java 服务器

android - 在 tablayout 中删除高亮显示