FFMPEG 覆盖过滤器部分转换

FFMPEG 覆盖过滤器部分转换

我正在尝试在视频上应用叠加滤镜,将单个图像混合几秒钟。由于我的视频时长约为 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>到覆盖命令中。

相关内容