我正在尝试在视频上应用叠加滤镜,将单个图像混合几秒钟。由于我的视频时长约为 1 分钟,因此当 FFMPEG 尝试重新编码整个视频而不是重新编码需要更改的视频部分时,这似乎很浪费。
我的混合视频命令是:
ffmpeg -i beach.mp4 -i logo.png
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'"
-pix_fmt yuv420p -c:a copy output.mp4
有人知道我该如何避免这种情况吗?(我本来想分割视频,但似乎无法通过指定开始帧和结束帧来准确分割视频)
答案1
由于您可以接受一些不准确性,我建议采用以下方法:
分割视频输入
ffmpeg -i beach.mp4 -c copy -segment_time 20 -f segment beach_seg%02d.mp4
在第一段上叠加徽标
ffmpeg -i beach_seg00.mp4 -loop 1 -i logo.png
-filter_complex "[0:v][1:v] overlay=25:25:shortest=1"
-pix_fmt yuv420p -c:a copy overlay.mp4
连接段
首先,准备一个文本文件segments.txt
file 'overlay.mp4'
file 'beach_seg01.mp4'
file 'beach_seg02.mp4'
file 'beach_seg03.mp4'
...
然后,连接
ffmpeg -f concat -i segments.txt -c copy beach_with_logo.mp4
需要注意的是,overlay.mp4 的时间基准可能与海滩片段的时间基准不匹配。在这种情况下,请检查其中一个海滩片段(tbn
)的时间基准,并将其添加-video_track_timescale <tbn>
到覆盖命令中。