FFMPEG concat 不包含循环图像(使用命名管道)

FFMPEG concat 不包含循环图像(使用命名管道)

经过大量研究和测试,我编写了一个命令,可以将其调整为使用 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

相关内容