借助 FFmpeg 的drawtext滤镜给视频添加标题。

2025-07-03 05:12:24 17 分享链接 开发笔记 ffmpeg

Windows示例1

ffmpeg -i input.mp4 -vf "scale=1080:1920,subtitles=test.srt:original_size=1080x1920:force_style='FontSize=12,Alignment=2,MarginV=200',drawtext=text='测试标题':fontfile=C\\:/Windows/Fonts/msyh.ttc:fontsize=48:fontcolor=yellow:x=(w-text_w)/2:y=h*0.05:box=1:boxcolor=black@0.7:boxborderw=4" -c:v h264_nvenc -y output.mp4

Windows示例2

ffmpeg -i input.mp4 -vf "scale=1080:1920,subtitles=test.srt:original_size=1080x1920:force_style='FontSize=12,Alignment=2,MarginV=200',drawtext=text='测试标题':fontfile=C\\:/Windows/Fonts/msyh.ttc:fontsize=48:fontcolor=yellow:x=(w-text_w)/2:y=h*0.2" -c:v h264_nvenc -y output.mp4

Windows示例3直接定位

ffmpeg -i input.mp4 -vf "scale=1080:1920,subtitles=test.srt:original_size=1080x1920:force_style='FontSize=12,Alignment=2,MarginV=200',drawtext=text='测试标题':fontfile=C\\:/Windows/Fonts/msyh.ttc:fontsize=48:fontcolor=yellow:x=570:y=200" -c:v h264_nvenc -y output.mp4

Windows示例包含添加BGM音乐

ffmpeg -i input.mp4 -i test.mp3 -i bgm.mp3 -filter_complex "[1:a]volume=1.2[a1];[2:a]volume=0.3[a2];[a1][a2]amix=inputs=2:duration=longest[aout]" -map 0:v -map "[aout]" -vf "scale=1080:1920,subtitles=test.srt:original_size=1080x1920:force_style='FontSize=12,Alignment=2,MarginV=200',drawtext=text='测试标题':fontfile=C\\:/Windows/Fonts/msyh.ttc:fontsize=48:fontcolor=yellow:x=570:y=200" -c:v h264_nvenc -c:a aac -y output.mp4
若要给视频添加标题,你可以借助FFmpeg的drawtext滤镜。下面是添加了标题功能的命令:
ffmpeg -i input.mp4 -vf "scale=1080:1920,subtitles=test.srt:original_size=1080x1920:force_style='FontSize=12,Alignment=2,MarginV=200',drawtext=text='你的标题':fontsize=36:fontcolor=white:x=(w-text_w)/2:y=h*0.1:box=1:boxcolor=black@0.5:boxborderw=5" -c:v h264_nvenc output.mp4

参数说明:

  • text='你的标题':你要添加的标题文本,可自行替换。
  • fontsize=36:标题字体的大小。
  • fontcolor=white:标题字体的颜色。
  • x=(w-text_w)/2:标题在水平方向上居中显示。
  • y=h*0.1:标题在垂直方向上位于视频高度的10%处。
  • box=1:为标题添加背景框。
  • boxcolor=black@0.5:背景框的颜色为半透明的黑色。
  • boxborderw=5:背景框的边框宽度为5像素。

你可以按照自身需求对这些参数进行调整。

在 FFmpeg 中,drawtext 滤镜功能强大,可用于在视频上叠加文本。以下是其常用参数的完整列表(基于 FFmpeg 6.0 版本),包含字间距设置及其他高级选项:

字间距设置

字间距(字符间距)可通过 letter_spacing 参数调整:

drawtext=text='你的文本':letter_spacing=2  # 正值增大间距,负值减小间距

完整参数列表

以下是 drawtext 滤镜的主要参数分类说明:

1. 基础文本设置

参数名作用示例值
text显示的文本内容'Hello World!'
textfile从文件读取文本'/path/to/text.txt'
reload实时重载文本文件(需配合 textfile1
fontfile指定字体文件路径'/usr/share/fonts/.../font.ttf'
fontsize字体大小24
fontcolor字体颜色'white''0xFFFFFF'
fontcolor_expr动态字体颜色(支持表达式)'if(lt(t,5),white,black)'

2. 文本位置与对齐

参数名作用示例值
x, y文本位置坐标(支持表达式)'(w-text_w)/2'(水平居中)
box是否显示文本背景框1(显示)
boxcolor背景框颜色'black@0.5'(半透明白色)
boxborderw背景框边框宽度2
borderw文字描边宽度1
bordercolor文字描边颜色'black'
alpha文本透明度0.8

3. 高级排版

参数名作用示例值
letter_spacing字间距(字符间距)2(正值增大间距)
line_spacing行间距5
text_shaping是否启用文本整形(如阿拉伯语连写)1(默认启用)
tabsize制表符宽度(空格数)4

4. 动态效果

参数名作用示例值
timecode显示时间码'00:00:00:00'
timecode_rate时间码帧率25
rate帧率(影响动态表达式更新频率)25
expansion表达式解析方式'normal''none'

5. 时钟与动态变量

参数名作用示例值
clock显示实时时钟1
rtctime显示系统时间(格式需配合 strftime1
rtctime_mode系统时间更新模式'local''utc'

6. 特殊字符与编码

参数名作用示例值
text_source文本编码方式'utf8'
escape_text是否转义特殊字符1

7. 表达式变量参考

x, y, fontcolor_expr 等参数中可使用以下变量:

  • t:当前时间(秒)
  • n:当前帧号
  • w, h:视频宽度、高度
  • text_w, text_h:文本宽度、高度
  • line_h:行高
  • main_h, main_w:主视频高度、宽度

示例命令

以下是一个综合示例,展示如何使用多个参数:

ffmpeg -i input.mp4 -vf "drawtext= \
  text='视频标题': \
  fontfile='/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc': \
  fontsize=48: \
  fontcolor='white': \
  x='(w-text_w)/2': \
  y='h*0.05': \
  box=1: \
  boxcolor='black@0.7': \
  boxborderw=4: \
  letter_spacing=2: \
  borderw=1: \
  bordercolor='gray' \
" -c:v libx264 -y output.mp4

注意事项

  1. 字体路径转义:Windows 路径中的反斜杠需双写(如 C\\:/Windows/Fonts/...)。
  2. 表达式语法:复杂表达式需用单引号包裹,内部使用双引号。
  3. 性能影响:动态表达式(如 fontcolor_expr)会增加处理开销。

如需查看最新文档,可运行:

ffmpeg -h filter=drawtext

借助 FFmpeg 的drawtext滤镜给视频添加标题。