FFmpeg-在两个时间点之间向视频中添加文字

7

你好,我有一个20秒长的视频,我想在00:00:10秒到00:00:15秒之间添加一些文字,只需要写上“夏日视频”,并使用FFMPEG淡入淡出。

我知道我必须使用drawtext过滤器,但有人有例子吗?

谢谢。

1个回答

9

有两种方法可以实现这个:

drawtext

使用 enable 选项。因为您需要淡出效果,所以需要添加 fadeoverlay 过滤器。

ffmpeg -i input -filter_complex "drawtext=text='Summer Video':enable='between(t,15,20)',fade=t=in:start_time=15:d=0.5:alpha=1,fade=t=out:start_time=19.5:d=0.5:alpha=1[fg];[0][fg]overlay=format=auto,format=yuv420p" -c:a copy output.mp4

字幕

或者,使用所需时间和淡入淡出效果制作字幕,并使用字幕过滤器替代:

ffmpeg -i input -vf subtitles=fade.ass -c:a copy output

这个示例文件 fade.ass 是在 Aegisub 中创建的。使用了\fad标签来设置淡入淡出的持续时间(以毫秒为单位):{\fad(500,500)}夏日视频 的淡入和淡出都是0.5秒。

fade.ass 示例文件内容如下:

[Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: None

[Aegisub Project Garbage]

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:15.00,0:00:20.00,Default,,0,0,0,,{\fad(500,500)}Summer Video

我建议使用字幕过滤器,因为字幕比 drawtext 更易于使用,并且具有更多的样式选项和效果。


现在我只需要将两个视频合并在一起,但是concat对.mp4格式的视频不太好用。 - D Mawer
@DMawer concat协议不适用于MP4文件,但是concat demuxer或concat filter适用。请参见https://trac.ffmpeg.org/wiki/Concatenate和https://dev59.com/AGs05IYBdhLWcg3wR_-3。 - llogan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接