我正在尝试播放视频 background.mp4,同时将另一个视频 overlay.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 秒的视频后,它会中止,只显示“已终止”消息。
我推测这是由于内存不足造成的,尽管我对此并不确定。我现在该怎么办?有没有办法成功地叠加视频,使叠加的视频具有(至少大致)与背景视频相同的帧速率?