【问题标题】:Runtime.getRuntime().exec() is not running the ffmpeg command on centosRuntime.getRuntime().exec() 没有在 centos 上运行 ffmpeg 命令
【发布时间】:2014-01-11 17:55:24
【问题描述】:

我在centos机器上做如下操作

String fileName = "ffmpeg -i file:///home/xyz %d.png";
Runtime.getRuntime().exec(fileName);

xyz 是 mp4 文件,我希望它创建多个不同的图像帧

当我通过上面的 java 应用程序运行时,它不工作,但是如果我尝试直接在终端上运行它,它正在工作,请提出可能有什么问题?

【问题讨论】:

  • %d 是如何设置的?这似乎是一个无效的文件。您是否收到任何类型的错误消息?
  • ffmpeg -i file:///home/xyz %d.png 在本地终端上运行时运行良好。这里 %d 正在为图像创建不同的数字..
  • 我也尝试删除 %d .. 不工作
  • 1) 阅读(并实施)所有 When Runtime.exec() won't 的建议。那可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用exec 并使用ProcessBuilder 构建Process。还将String arg 分解为String[] args 以说明本身包含空格的参数。 2) 为了尽快获得更好的帮助,请发帖SSCCE

标签: java linux ffmpeg


【解决方案1】:

问题可能是程序向标准输出输出了很多内容或错误。如果您不使用此输出,Java 程序可能会挂起。以这样的方式使用Process#getErrorStream()getOutputStream()

is = new BufferedReader(new InputStreamReader(proc.getInputStream()));

while ((line = is.readLine()) != null)
  System.out.println(line);

这也将帮助您分析您运行的命令的任何错误输出。您可能需要对两个流都执行此操作。

此外,您可能需要等待子进程终止,使用Process#waitFor,否则即使生成的子进程仍在后台运行,您的 Java 程序也可能正在完成执行(除非这是您想要的)。

【讨论】:

    【解决方案2】:

    抱歉,如果来晚了,希望它对某人有用。 正如@rodion 所预见的那样,这肯定与 ffmpeg 特定的输出有关。

    我使用-nostats -loglevel 0 选项运行,然后Runtime.getRuntime().exec(""); 正确执行了ffmpeg

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多