我想合并两个视频(例如来自https://peach.blender.org/trailer-page/的iphone视频)。视频将使用覆盖滤镜放置在背景图像上,第二个视频将在3秒后开始播放。
我需要音频混合。
这是我的代码:
ffmpeg \
-loop 1 -i background.png \
-itsoffset 0 -i trailer_iphone.m4v \
-itsoffset 3 -i trailer_iphone.m4v \
\
-y \
-t 36 \
-filter_complex "
[2:a] adelay=3000 [2delayed];
[1:a][2delayed] amerge=inputs=2 [audio];
[0][1:v] overlay=10:10:enable='between(t,0,33)' [lv1];
[lv1][2:v] overlay=10:300:enable='between(t,0,36)' [video]
" \
\
-threads 0 \
-map "[video]" -map "[audio]" \
-vcodec libx264 -acodec aac \
merged-video.mp4
我收到错误消息:
[Parsed_overlay_3 @ 0x7fe892502ac0] [framesync @ 0x7fe892502b88] Buffer queue overflow, dropping.
合并的视频有很多丢帧。
我知道这是其他一些发布此错误消息的帖子。但建议的解决方案对我不起作用。
我该如何解决问题?
答案 0 :(得分:5)
FFmpeg正在从[2:v]
丢弃帧,因为[0][1:v]overlay
的处理时间超过帧丢弃阈值。
将fifo过滤器插入2:v以避免这种情况。
ffmpeg -loop 1 -i background.png
-itsoffset 0 -i trailer_iphone.m4v
-itsoffset 3 -i trailer_iphone.m4v
-t 36 -filter_complex
"[2:a]adelay=3000[2delayed];[1:a][2delayed]amerge=inputs=2[audio];
[0][1:v]overlay=10:10:enable='between(t,0,33)'[lv1];
[2:v]fifo[2f];[lv1][2f]overlay=10:300:enable='between(t,0,36)'[video]"
-threads 0 -map "[video]" -map "[audio]" -vcodec libx264 -acodec aac merged-video.mp4
(对于立体声音频,它应该是adelay=3000|3000
)