d33*_*ika 21 ffmpeg multi-processor multi-core
我厌倦了并行运行 8 个命令以充分利用 CPU 并加速视频转换,如下所示:
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/b.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/c.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/d.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/e.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/f.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/g.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/h.mp4 > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
其中 2 到 3 个被阻止。为什么会发生这种情况?这是 FFmpeg 的限制吗?我已经在 16 核和 4 核机器上尝试过这个,EC2 c1.xlarge 和 cc2.8xlarge。同样的行为。我尝试过复杂的命令和简单的命令,仍然相同,2 或 3 停止。
小智 24
在回答原始问题时,至于为什么某些作业停止,命令行上的 ffmpeg 是交互式的。它不断读取命令行上的输入。为了让您在后台运行所有这些,您应该更改以下内容:
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
对此:
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 </dev/null > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
添加</dev/null
告诉 ffmpeg 不要寻找输入,并且您的所有作业都应该在后台运行。
只是对您的命令的一个想法:使用单个命令锤击机器的更简单的方法是将所有内容连接到一行中:
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 \
-f mp4 /mnt/b.mp4 \
-f mp4 /mnt/c.mp4 \
-f mp4 /mnt/d.mp4 \
-f mp4 /mnt/e.mp4 \
-f mp4 /mnt/f.mp4 \
-f mp4 /mnt/g.mp4 \
-f mp4 /mnt/h.mp4 > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
您可能想要添加(取决于您的 ffmpeg 版本)一个标志来告诉服务器使用所有可用的处理器
-threads 0
Run Code Online (Sandbox Code Playgroud)
供参考:http : //ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs
归档时间: |
|
查看次数: |
39374 次 |
最近记录: |