原文:http://www.yaosansi.com/post/ffmpeg-burn-subtitles-into-video

向视频文件里添加字幕是件很常见的事,本文使用FFmpeg将字幕文件集成到视频文件里。
在CentOS上编译安装FFmpeg

字幕文件转换

字幕文件有很多种,常见的有 .srt , .ass 文件等,下面使用FFmpeg进行相互转换。
将.srt文件转换成.ass文件

| 1

| ffmpeg -i subtitle.srt subtitle.ass

| | —- | —- |

将.ass文件转换成.srt文件

| 1

| ffmpeg -i subtitle.ass subtitle.srt

| | —- | —- |

集成字幕,选择播放

这种字幕集成比较简单,播放时需要在播放器中选择相应的字幕文件。

| 1

| ffmpeg -i input.mp4 -i subtitles.srt -c:s mov_text -c:v copy -c:a copy output.mp4

| | —- | —- |

嵌入SRT字幕到视频文件

单独SRT字幕

字幕文件为subtitle.srt

| 1

| ffmpeg -i video.avi -vf subtitles=subtitle.srt out.avi

| | —- | —- |

嵌入在MKV等容器的字幕

将video.mkv中的字幕(默认)嵌入到out.avi文件

| 1

| ffmpeg -i video.mkv -vf subtitles=video.mkv out.avi

| | —- | —- |

将video.mkv中的字幕(第二个)嵌入到out.avi文件

| 1

| ffmpeg -i video.mkv -vf subtitles=video.mkv:si=1 out.avi

| | —- | —- |

嵌入ASS字幕到视频文件

| 1

| ffmpeg -i video.avi -vf “ass=subtitle.ass” out.avi

| | —- | —- |

不能加载fontconfig文件

| 1
2
3
4

| Fontconfig error: Cannot load default config file
[Parsed_ass_0 @ 0000000002bfa3e0] No usable fontconfig configuration file found,
using fallback.
Fontconfig error: Cannot load default config file

| | —- | —- |

出现类似错误的原因是无法加载字体配置文件。

环境变量

FFmpeg使用的默认字体文件是使用系统环境变量中对应的文件位置。
默认文件名:fonts.conf
环境变量 FONTCONFIG_FILE 可以覆盖默认配置文件
环境变量 FONTCONFIG_PATH 可以覆盖默认配置文件目录
Linux 默认配置文件:fonts.conf
使用步骤:

  1. 以root权限登录
  2. 建立/etc/fonts目录
  3. 下载fonts.conf文件到/etc/fonts目录
  4. 设置fonts.conf文件权限为可读

    Linux/Mac 系统

    在~/.bashrc 最后添加:

| 1

| export FONTCONFIG_PATH=/opt/X11/lib/X11/fontconfig

| | —- | —- |

使之有效:

| 1

| source ~/.bashrc

| | —- | —- |

编辑 /opt/X11/lib/X11/fontconfig/fonts.conf 在字体目录添加 /Library/Fonts

| 1
2
3
4
5
6

|

/opt/X11/share/fonts
/usr/X11R6/lib/X11/fonts
~/.fonts
/Library/Fonts

| | —- | —- |

Windows系统

在系统环境变量中添加:
name: FONTCONFIG_PATH
value: J:/ffmpeg (我本机ffmpeg目录,与fonts.conf同目录即可)
将fonts.conf文件放至上述指定目录。
以下为yaosansi使用的fonts.conf文件:

| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194195196197198199200201202203204205206207208209210211212213214 | <?xml version=”1.0”?>
<!DOCTYPE fontconfig SYSTEM “fonts.dtd”>

  1. <dir>C:/Windows/Fonts</dir><br /><!--<br /> Accept deprecated 'mono' alias, replacing it with 'monospace'<br />--><br /> <match target="pattern"><br /> <test qual="any" name="family"><br /> <string>mono</string><br /> </test><br /> <edit name="family" mode="assign"><br /> <string>monospace</string><br /> </edit><br /> </match>



sans serif


sans-serif




sans


sans-serif



Times New Roman
serif
sans-serif serif monospace sans-serif Times New Roman Thorndale AMT Arial Albany AMT Courier New Cumberland AMT GulimChe false DotumChe false BatangChe false GungsuhChe false 0x0020 0x00A0 0x00AD 0x034F 0x0600 0x0601 0x0602 0x0603 0x06DD 0x070F 0x115F 0x1160 0x1680 0x17B4 0x17B5 0x180E 0x2000 0x2001 0x2002 0x2003 0x2004 0x2005 0x2006 0x2007 0x2008 0x2009 0x200A 0x200B 0x200C 0x200D 0x200E 0x200F 0x2028 0x2029 0x202A 0x202B 0x202C 0x202D 0x202E 0x202F 0x205F 0x2060 0x2061 0x2062 0x2063 0x206A 0x206B 0x206C 0x206D 0x206E 0x206F 0x3000 0x3164 0xFEFF 0xFFA0 0xFFF9 0xFFFA 0xFFFB 30  | | —- | —- |

参考