gpt4 book ai didi

ruby-on-rails - 防止ffmpeg接管stdout

转载 作者:行者123 更新时间:2023-12-04 23:06:39 25 4
gpt4 key购买 nike

当我做 system "ffmpeg -i just-do-it.mp4 -ab 96k -ar 22050 -qscale 6 output.flv" ffmpeg 接管 ruby​​ 进程,直到工作完成,这有时需要很长时间。我尝试在 Ruby 中使用线程 amd fork 无济于事,还有 system等价的命令,如 exec %x[]我还尝试了 ruby​​ 1.9.2 中的最新 Fibers,但我认为我没有正确使用它。

我的问题是如何同时从 ruby​​ 运行两个 ffmpeg 进程?

编辑:

fork do
fork do
system "ffmpeg -i you-know.mp4 -ab 96k -ar 22050 -qscale 6 #{Time.now.sec}.flv"
end

fork do
system "ffmpeg -i bangbang.mp4 -ab 96k -ar 22050 -qscale 6 #{Time.now.sec}.flv"
end
end

最佳答案

fork/exec是正确的解决方案。由于 fork 进程继承父进程 fopen 文件句柄/等,因此您必须关闭(或重定向)您不希望子进程使用的文件句柄。

例如:

# this will print nothing, but yes is running as a forked process
# you'll want to `killall yes` after running this script.
fork do
[$stdout, $stderr].each { |fh| fh.reopen File.open("/dev/null", "w") }
exec "yes"
end

好的,对您发布的代码的一些评论。外 fork是没有意义的。只需从主进程中 fork 两个 ffmpeg 进程即可。也许写一个辅助函数,如:
def ffmpeg(mp4)
fork do
[$stdout, $stderr].each { ... }
exec "ffmpeg -i #{mp4} ..."
end
end

ffmpeg("you-know.mp4")
ffmpeg("bangbang.mp4")

关于ruby-on-rails - 防止ffmpeg接管stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5009829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com