原文: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
| 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
|
| | —- | —- |
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”>
<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>
参考
- http://www.ffmpeg.org/
- https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo
- http://ffmpeg.org/ffmpeg-all.html#toc-subtitles-1
- http://en.wikipedia.org/wiki/SubStation_Alpha#Advanced_SubStation_Alpha
- http://ffmpeg.org/ffmpeg-filters.html#ass
- http://www.stata.com/support/faqs/unix/fontconfig-error/
- http://freedesktop.org/software/fontconfig/fontconfig-user.html
- http://www.freedesktop.org/wiki/Software/fontconfig/
- http://www.stata.com/support/faqs/unix/fonts.conf/lux64/fonts.conf
http://blog.neten.de/posts/2013/10/06/use-ffmpeg-to-burn-subtitles-into-the-video/
分类: Linux