如何使用 FFMPEG 指定我希望视频上的叠加持续多长时间?

Mig*_*uel 4 ffmpeg

我正在为 YouTube 制作视频,并且已经在完整的视频编辑程序中对其进行了编辑和润色。我想做的最后一件事是添加一个带有订阅播放列表按钮的覆盖横幅,我将把它们变成注释。我希望它出现在视频的前 5 秒。不幸的是,我的完整视频编辑程序无法做到这一点,所以我想使用 FFMPEG 来实现这种效果。

我看过一些关于此的教程(尤其是这个教程看起来很不错),但没有一个提到如何指定叠加的持续时间。

有没有人对我如何实现这一目标有任何想法?提前致谢!:)

evi*_*oup 5

淡入淡出和叠加

您可以将淡入淡出和叠加过滤器链接在一起,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

-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)后淡出;并且它会淡出alpha 通道,这意味着水印会变成透明而不是淡出黑色块。这将创建一个标记为 [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
Run Code Online (Sandbox Code Playgroud)

流寻找-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
Run Code Online (Sandbox Code Playgroud)

然后使用 concat demuxer 连接两个视频:首先创建一个名为 input.txt 的文件,其中包含以下几行:

file 'start.mp4'
file 'end.mp4'
Run Code Online (Sandbox Code Playgroud)

然后,

ffmpeg -f concat -i inputs.txt -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)