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 秒間ループする画像 (音声なし) がすべて連結された長いビデオになるはずです。しかし、実際には、最初の 2 つのビデオは含まれますが、ループする画像は含まれない、連結された 1 つのビデオしか作成されません。

答え1

スクリプトは最初の 3 つのコマンドをバックグラウンドで実行しているため、スクリプトは実質的に同時にコマンドを実行します。コマンド 1 ~ 3 が、4 番目のコマンドが出力を連結する前に完了する保証はありません。末尾のアンパサンドとバックスラッシュを削除すると、スクリプトは各コマンドが完了するまで待機してから次のコマンドを開始します。各コマンドが I/O 帯域幅のほとんどを使用する場合、この変更によってスクリプトがそれほど遅くなることはありません。それ以外の場合は、最初の 3 つのコマンドをバックグラウンドで実行し、それらが完了するまで待ってから 4 番目のコマンドを実行する方法があります (未テスト)。

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

関連情報