首页 > 解决方案 > ffmpeg 动画 gif 叠加,动画在指定的“之间”之前开始

问题描述

我正在使用这样的命令将动画 gif 作为覆盖添加到视频中:

ffmpeg -y -i video.mp4 -i overlay.gif -filter_complex "[0:v][1:v] overlay=38:11:enable='between(t,1.35,15.042000)'" -pix_fmt yuv420p -c:a copy -safe 0 output.mp4

在该命令中,我要求它显示从 1.35 到 15 的 gif,并且只要覆盖仅在这些时间之间显示,就可以工作,但就好像动画在达到 1.35 之前开始,因为之前的动画位那一点永远不会出现在屏幕上。最终视频中缺少动画的开头。

在 ffmpeg-20180925-a7429d8 和 ffmpeg-N-100581-ga454a0c14f 中尝试过

标签: ffmpeg

解决方案


通常,我在发布后找到答案:

https://dev.to/oskarahl/ffmpeg-overlay-a-video-on-a-video-after-x-seconds-4fc9

Solution:
Use the setpts filter to delay the overlay video (gif.mp4) start with x seconds.
ffmpeg -i main_video.mp4 -i gif.mp4 -filter_complex
    “[1:v]setpts=PTS-STARTPTS+1/TB[delayedGif];
     [0:v][delayedGif]overlay=enable='between(t,1,3)'[out]”
-map [out] complete.mp4
The setpts filter evaluates its expression and assigns the value as the timestamp for the current frame it is processing.

推荐阅读