我正在为 YouTube 制作视频,我已经在完整的视频编辑程序中编辑和润色了它。我最不想做的事情就是添加一个覆盖横幅订阅和播放列表按钮,我将把它们变成注释。我希望它出现在视频的前 5 秒。不幸的是,我的完整视频编辑程序无法做到这一点,所以我想使用 FFMPEG 来实现这个效果。
我看过一些关于这个的教程(这个其中一些看起来非常棒,但是都没有提到如何指定覆盖的持续时间。
有人知道我该如何实现这个吗?提前谢谢!:)
答案1
淡入淡出和叠加
你可以将淡入淡出和叠加滤镜链接在一起,如下所示:
ffmpeg -i input.mp4 -f image2 -loop 1 -r 24 -i banner.png -filter_complex \
'[1:v]fade=out:96:24:alpha=1[wm];[0:v][wm]overlay=10:10[outv]' \
-map [outv] -map 0:a -c:a copy -c:v libx264 -preset veryfast output.mp4
-f image2 -loop 1 -r 24 -i banner.png
将 banner.png 变成 24fps 的视频,无限循环。
[1:v]fade=out:96:24:alpha=1[wm]
使水印从第 96 帧(4 秒 @ 24fps)开始淡出,并在 24 帧(1 秒 @ 24fps)内淡出;并且它将淡出阿尔法通道,这意味着水印将变为透明,而不是淡化为黑色块。这将创建一个标记为 [wm] 的输出。请注意,淡化长度的最小值为 1 帧。
[0:v][wm]overlay=0:0[outv]
覆盖input.mp4 上的横幅,创建标有 [outv] 的输出。
-map [outv] -map 0:a
告诉 ffmpeg 在输出中使用 [outv] 和来自 input.mp4 的音频。其余选项是编码选项。
您可以让横幅淡入和通过链接两个淡入淡出过滤器来实现淡出。以下将使横幅从第 96 帧开始淡入,持续时间为 24 帧;然后从第 216 帧(9 秒 @ 24fps)开始淡出,持续时间为 24 帧:
ffmpeg -i input.mp4 -f image2 -loop 1 -r 24 -i banner.png -filter_complex \
'[1:v]fade=in:96:24:alpha=1,fade=out:216:24:alpha=1[wm];[0:v][wm]overlay=10:10[outv]' \
-map [outv] -map 0:a -c:a copy -c:v libx264 -preset veryfast output.mp4
-ss
使用和寻找流-t
这实现了类似的最终结果,但需要创建更大的中间文件。然而,它只对前五秒部分进行转码,因此可以节省处理能力并且可能更快。
-t
这涉及使用和将视频切成两部分-ss
,将水印放在第一个五秒的视频上,然后连接把两个视频放在一起。
ffmpeg -i input.mp4 -i watermark.png \
-filter_complex '[0:v][1:v]overlay[outv]' -map [outv] -map 0:a \
-t 5 -c:a copy -c:v libx264 -crf 22 -preset veryfast start.mp4
ffmpeg -i input.mp4 -ss 5 -c copy end.mp4
然后使用 concat 解复用器连接两个视频:首先创建一个名为inputs.txt的文件,其中包含以下行:
file 'start.mp4'
file 'end.mp4'
然后,
ffmpeg -f concat -i inputs.txt -c copy output.mp4