【问题标题】:Basic FFmpeg Conversion Error?基本的FFmpeg转换错误?
【发布时间】:2018-09-04 21:06:21
【问题描述】:

我正在尝试使用 ffmpeg 将 .mp4 转换为 .opus 文件。我的桌面上有一个名为Indexing 的目录,其中有一个名为40.mp4 的测试文件。我试过使用命令ffmpeg -i 40.mp4 -b:a 320k 40.opus,它总是在索引目录中设置的终端上工作,但使用Java尝试同样的事情总是失败:

注意:我在 Kubuntu 17.10 上运行

private static final Path INDEXING_PATH = Paths.get("/home/sarah/Desktop/Indexing");

Process proc = new ProcessBuilder("ffmpeg -i 40.mp4 -b:a 320k 40.opus") .directory(INDEXING_PATH.toFile()).inheritIO().start();

产量:

Exception in thread "main" java.io.IOException: Cannot run program "ffmpeg -i 40.mp4 -b:a 320k 40.opus" (in directory "/home/sarah/Desktop/Indexing"): error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)

这是文件夹的快照:

【问题讨论】:

  • 你的路径中有 ffmpeg 吗? (你可以通过直接运行应该可以工作的“ffmpeg”来检查......)可能你的 ProcessBuilder 构造函数需要像new ProcessBuilder("myCommand", "myArg1", "myArg2");那样拆分

标签: java file ubuntu video ffmpeg


【解决方案1】:

Java 正在寻找一个名为 ffmpeg -i 40.mp4 -b:a 320k 40.opus 的程序,而实际上它应该以 -i 40.mp4 -b:a 320k 40.opus 作为参数调用 ffmpeg

要解决此问题,请更改 Process proc = new ProcessBuilder("ffmpeg -i 40.mp4 -b:a 320k 40.opus") .directory(INDEXING_PATH.toFile()).inheritIO().start();

Process proc = new ProcessBuilder("ffmpeg", "-i", "40.mp4", "-b:a", "320k", "40.opus") .directory(INDEXING_PATH.toFile()).inheritIO().start();

查看This了解更多信息

另外,请尝试在命令的 ffmpeg 部分中添加 ffmpeg 的完整路径

【讨论】:

  • 我试试看。我不认为 Runtime.exec 和 ProcessBuilder 有什么不同。
  • 它们确实有细微的差别。我链接的答案非常详细
  • 在这种情况下,当它符合条件时,您可以接受答案吗? :)
  • 我应该删除问题吗?这不一定是您链接的帖子的副本,它可能会帮助遇到相同问题的其他人。虽然这是一个误解。
  • 这取决于你。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多