
別のビデオ overlay.mp4 を小さな四角形内に背景ビデオの上にオーバーレイしながら、ビデオ background.mp4 を再生しようとしています。オーバーレイ ビデオは遅延される必要があります。
ffmpeg を調べて、次のコマンドを作成しました:
ffmpeg -i background.mp4
-i overlay.mp4
-filter_complex "[1]setpts=PTS-STARTPTS+162/TB, scale=512:288 [over];
[0][over] overlay=748:412 [outv];
[1:a]adelay=162000|162000 [audio];
[0:a][audio] amix [outa]"
-map "[outv]"
-map "[outa]"
-codec:v libx264
-crf 21
-bf 2
-flags +cgop
-pix_fmt yuv420p
output.mp4
これで、希望通りにビデオを結合できました。ただし、重ね合わせたビデオは途切れ途切れです。たくさん(最大 30 秒間のフリーズなど)、バックグラウンド ビデオは正常に再生されます。
コンソールには、「バッファー キューがオーバーフローしました。ドロップしています。」というメッセージが多数表示されます。
これをオンラインで検索したところ、FIFO バッファを追加する必要があることがわかりました。そこで、次のことを試しました。
ffmpeg -i background.mp4
-i overlay.mp4
-filter_complex "[1]fifo, setpts=PTS-STARTPTS+162/TB, scale=512:288 [over];
[0][over] overlay=748:412 [outv];
[1:a]adelay=162000|162000 [audio];
[0:a][audio] amix [outa]"
-map "[outv]"
-map "[outa]"
-codec:v libx264
-crf 21
-bf 2
-flags +cgop
-pix_fmt yuv420p
output.mp4
しかし、このコマンドは正常に終了しません。ビデオ時間の約 60 秒を経過すると、「Killed」というメッセージのみが表示されて中止されます。
確信はありませんが、メモリ不足が原因だと思います。どうすればいいでしょうか? オーバーレイされたビデオのフレームレートが背景ビデオと (少なくともほぼ) 同じになるように、ビデオをうまくオーバーレイする方法はありますか?