我正在从java Runtime.getRuntime()。exec运行一个ffmpeg命令。 ffmpeg命令基本上从实时流中剪切图像。 实际上,当我没有&运行此命令时然后它可以正常工作五分钟后,它会停止切割图像。
但是当我使用“&”时在ffmpeg命令中,它根本不起作用。
直播中没有问题,因为我从linux运行这个ffmpeg命令时工作正常。
我的主要问题是如何在java的后台运行ffmpeg命令。
答案 0 :(得分:3)
'&'是一个 shell 指令,用于将任务放入后台。从Process.exec()
运行不涉及shell。
如果您的进程停止(即运行但只是不工作),那么我怀疑它被阻止等待您使用stdout / stderr。您必须使用线程来防止进程阻塞等待您使用其输出。有关详细信息,请参阅this SO answer。
要在后台运行它(例如,当您的Java进程执行其他操作时),您需要:
Process.exec
调用该流程答案 1 :(得分:1)
我知道您在Java中您的命令行问题寻求帮助,但您可能对其他解决方案感兴趣。
也许你可以尝试一下这个库: http://code.google.com/p/jjmpeg/
这是ffmpeg的包装器。 也许你可以尝试创建一个java线程并运行你的命令。
答案 2 :(得分:0)
你写的它在分钟后停止工作。您是否检查了退出代码(Process.exitValue()
)。另外,您是否检查了外部进程的输出流和错误流?
答案 3 :(得分:0)
您是否在数组中传递参数?如果它有效一段时间你是否给出了所有预期的参数? (打印出来并检查)。这是我为你挖出的ffmpeg的一个例子。
String[] ffmpeg = new String[] {"ffmpeg", "-ss", Integer.toString(seconds),"-i", in, "-f", "image2", "-vframes", "1", out};
Process p = Runtime.getRuntime().exec(ffmpeg);
答案 4 :(得分:0)
String livestream = "/Users/videos/video_10/video_1.mp4";
String folderpth = "/Users/videos/video_10/photos";
String cmd="/opt/local/bin/ffmpeg -i "+ livestream +" -r 10 "+folderpth+"/image%d.jpeg";
Process p = Runtime.getRuntime().exec(cmd);
视频是10秒。很长,它在照片文件夹中创建了100个jpeg。您必须提供文件夹的绝对路径。
还要在终端中找到ffmpeg二进制使用which ffmpeg
的路径。我是/opt/local/bin/ffmpeg
。