![FFMPEG concat 不包含循环图像(使用命名管道)](https://linux22.com/image/1475861/FFMPEG%20concat%20%E4%B8%8D%E5%8C%85%E5%90%AB%E5%BE%AA%E7%8E%AF%E5%9B%BE%E5%83%8F%EF%BC%88%E4%BD%BF%E7%94%A8%E5%91%BD%E5%90%8D%E7%AE%A1%E9%81%93%EF%BC%89.png)
经过大量研究和测试,我编写了一个命令,可以将其调整为使用 FFMPEG 连接多个源。但是,我在将循环图像(作为视频)添加到连接中时遇到了问题。
命令如下:
ffmpeg -y -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null & \
ffmpeg -y -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null & \
ffmpeg -y -f lavfi -i anullsrc -loop 1 -f image2 -i input3.jpg -r 30 -t 3 -pix_fmt yuvj420p -map 0:a -map 1:v -f mpegts temp3 2> /dev/null & \
ffmpeg -y -f mpegts -i "concat:temp1|temp2|temp3" -bsf:a aac_adtstoasc out.mp4
最终结果应该是 2 个视频,然后是 3 秒循环播放的图像(无音频),全部连接成一个长视频。但实际上,我得到的只是一个包含前两个视频的连接视频,但没有循环播放的图像。
答案1
看来您的脚本将前 3 个命令置于后台,因此您的脚本几乎同时运行这些命令。无法保证命令 1-3 会在第 4 个命令连接它们的输出之前完成。删除尾随的 & 符号和反斜杠将导致脚本等待每个命令完成后再开始下一个命令。如果每个命令都使用了大部分 I/O 带宽,那么此更改不会使您的脚本变慢太多。否则,这里有一种方法可以在后台运行前 3 个命令,但要等到它们完成后才能运行第 4 个命令(未经测试)。
{ ./prog1 ; ./prog2 ; ./prog3 ; } && ./prog4