【FFMPEG命令行操作】为视频添加双语字幕(附图)(不借助其他工具,只通过命令的组合实现)
- 核心思想:重复使用ffmpeg字幕添加命令,利用字幕的上下位置,划分中英文字幕显示位置
- 准备素材,如下图所示
- hack.mp4为视频文件
- hack_zh.srt为该视频的中文srt字幕文件
- hackz_en.srt为该视频的英文srt字幕文件
- 使用终端命令ffmpeg
- 此演示将中文字幕设为第一字幕,英文设为第二字幕
- 关于ffmpeg的命令使用不在此赘述,想了解的小伙伴可以浏览ffmpeg官方文档
- 首先添加中文字幕,使用如下命令
ffmpeg -i hack.mp4 -strict -2 -vf subtitles=hack_zh.srt:force_style='Fontsize=20\,Fontname=FZYBKSJW--GB1-0\,MarginV=30\,Bold=-1\,BorderStyle=1' -qscale:v 3 hack_with_zh.m
p4
关于上述命令行代码参数的部分解释:
- 最重要的就是MarginV,设置字幕到视频底部的垂直方位,由于中文为第一字幕,需要添加到视频的稍上位置,在我大量的字幕位置测试中发现将MarginV参数值设为30属于最佳方案
- 对于其他的命令设置只是相关的必要设置而已,读者可查阅资料了解其余参数的详细使用
到此为止中文字幕设置完毕,先打开视频看一下效果,图示如下:
- 可以看到中文字幕处于视频的稍偏上位置
- 在这里字幕看起来较大,但没有关系,可以通过ffmpeg中选项参数中的Fontsize调整字幕大小,大家无需担心
2.接着添加英文字幕
- 对于英文字幕,由于我们在此将其作为第二字幕,那么该英文字幕必在视频的靠下方位置,可以直接使用ffmpeg默认字幕安放配置,无需添加MarginV参数设置
- 注意注意:由于我们是对同一段视频添加两行字幕,所有,添加英文字幕时,需要使用已添加中文字幕的那一段视频,就是生成的hack_with_zh.mp4视频
- 开始添加,相关命令行代码如下:
ffmpeg -i hack_with_zh.mp4 -strict -2 -vf subtitles=hack_en.srt:force_style
='Fontsize=15\,Fontname=FZYBKSJW--GB1-0\,Bold=-1\,BorderStyle=1' -qscale:v 3 hack_with_double_subtitles.mp4
- 可以看到上述代码并没有使用到MarginV参数,即使用了ffmpeg默认的字幕放置位置
到此为止中英文字幕全部添加完毕,打开视频看一下效果,图示如下:
- 可以看到中英文字幕显示在了两个区域
至此,双语字幕添加完毕
- !!!最最核心的就是设置MarginV参数,小伙伴们可以自己尝试调试字幕位置,寻找不同视频长宽比例,不同视频分辨率下的最佳视频字幕适配方案
- 我们看到上面视频的字幕样式单一,白花花的一片不好看,可以通过如下参数设置字幕的一些好看的样式
- 选项简介:————————————————————————————————————————————————
01.Name 风格(Style)的名称. 区分大小写. 不能包含逗号.
02.Fontname 使用的字体名称, 区分大小写.
03.Fontsize 字体的字号
04.PrimaryColour 设置主要颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR. 为字幕填充颜色
05.SecondaryColour 设置次要颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR. 在卡拉OK效果中由次要颜色变为主要颜色.
06.OutlineColour 设置轮廓颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR.
07.BackColour 设置阴影颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR. ASS的这些字段还包含了alpha通道信息. (AABBGGRR), 注ASS的颜色代码要在前面加上&H
08.Bold -1为粗体, 0为常规
09.Italic -1为斜体, 0为常规
10.Underline [-1 或者 0] 下划线
11.Strikeout [-1 或者 0] 中划线/删除线
12.ScaleX 修改文字的宽度. 为百分数
13.ScaleY 修改文字的高度. 为百分数
14.Spacing 文字间的额外间隙. 为像素数
15.Angle 按Z轴进行旋转的度数, 原点由alignment进行了定义. 可以为小数
16.BorderStyle 1=边框+阴影, 3=纯色背景. 当值为3时, 文字下方为轮廓颜色的背景, 最下方为阴影颜色背景.
17.Outline 当BorderStyle为1时, 该值定义文字轮廓宽度, 为像素数, 常见有0, 1, 2, 3, 4.
18.Shadow 当BorderStyle为1时, 该值定义阴影的深度, 为像素数, 常见有0, 1, 2, 3, 4.
19.Alignment 定义字幕的位置. 字幕在下方时, 1=左对齐, 2=居中, 3=右对齐. 1, 2, 3加上4后字幕出现在屏幕上方. 1, 2, 3加上8后字幕出现在屏幕中间. 例: 11=屏幕中间右对齐. Alignment对于ASS字幕而言, 字幕的位置与小键盘数字对应的位置相同.
20.MarginL 字幕可出现区域与左边缘的距离, 为像素数
21.MarginR 字幕可出现区域与右边缘的距离, 为像素数
22.MarginV 垂直距离
- 来演示一下,代码如下所示
#在此,改变字幕的颜色,粗细等部分参数设置
ffmpeg -i hack_with_zh.mp4 -strict -2 -vf subtitles=hack_en.srt:force_style='Fontsize=15\,Fontname=FZYBKSJW--GB1-0\,PrimaryColour=&HCCFF66&\,Bold=-1\,BorderStyle=1' -qscale:v 3 hack_with_double_subtitles.mp4
- 上述代码,我们可以看到设置了字体大小,字体名称,字体的颜色,粗细等
- 来看一下最终效果吧,图示如下:
- 我们看到我们上述代码只对英文字幕设置了字幕的颜色样式等,若想对中文样式进行设置也是可以的,只需在添加中文字幕时,添加相关的选项设置即可
- 还是一样,我们不对ffmpeg命令参数进行详细说明,小伙伴们可以查看ffmpeg官方文档
- 好啦,这就是使用ffmpeg进行视频双语字幕的添加方法啦,感谢各位读者的观看,若有错误,请指正!