ffmpeg-Error“缓冲区队列溢出,丢弃”。何时延迟合并两个视频

时间:2016-09-19 13:08:59

标签: audio video ffmpeg

我想合并两个视频(例如来自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.

合并的视频有很多丢帧。

我知道这是其他一些发布此错误消息的帖子。但建议的解决方案对我不起作用。

我该如何解决问题?

1 个答案:

答案 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