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 會在第四個命令連接其輸出之前完成。刪除尾隨的 & 符號和反斜線將導致腳本等待每個命令完成後再開始下一個命令。如果每個命令都使用大部分 I/O 頻寬,那麼此變更不會使腳本速度減慢太多。否則,這裡有一種方法可以在後台運行前 3 個命令,但要等到它們完成後再運行第 4 個命令(未經測試)。

{ ./prog1 ; ./prog2 ; ./prog3 ; } && ./prog4

相關內容