FFmpeg添加字幕时自定义字体、字号和文字颜色的方法

原创内容,转载请注明出处:https://www.myzhenai.com.cn/post/4153.html

我是在使用迅捷视频工具的时候,因为我知道迅捷是使用FFmpeg进行操作的,所以我也想知道如何操作。

FFmpeg转码、加载字幕等操作分开来操作的话,我都懂得。

但是如果这些功能全部连起来一起操作,命令行要如何写呢?我很好奇,所以折腾了两天,请教了好多大佬。

最后在Telegram上的一个技术交流群中,有两个大佬给出了正确的指点。

一、加载字幕(指定字体 字号大小 文字颜色)
一般来说,FFmpeg加载字幕时使用到了两个滤镜模块,一个是 “subtitles”,另一个是 “drawtext”,在制作视频水印的时候,更多的是使用“drawtext”,而制作srt和ass等字幕文件的时候,我们可以使用 “subtitles”。

D:\ffmpeg\bin\ffmpeg.exe -i 20220518142237.mp4 -vf "subtitles=20220518142237.srt:fontsdir=.:force_style='PrimaryColour=&H2cc1a4,FontName=宋体,FontSize=10',scale=1080:1920" -vcodec libx264 -b:v 20000k -acodec aac -b:a 320k -ar 48000 -ac 2 D:\a\20220518142237.mp4
#注意事项
#运行命令的时候,尽可能用cd切换到该视频、字幕文件、字体文件的目录(三个文件最好放在同一个目录)
#20220518142237.mp4 是需要编辑的视频文件
#20220518142237.srt 是需要的字幕文件 如何创建srt字幕文件,请搜索本博客
#fontsdir=. 是字体存放目录
#PrimaryColour=&H2cc1a4 是字体颜色
#FontName=宋体 是字体
#FontSize=10 是文字大小
#scale=1080:1920 同时转码视频像素为1080:1920
#-vcodec libx264 视频转码为H264
#-b:v 20000k 比特率为20000kbps
#-acodec aac 音频转码为aac
#-b:a 320k 音频比特率转码为320kbps
#-ar 48000 音频取样频率为48000hz
#-ac 2 双声道

注意事项:命令中的所有符号均为半角符号。

错误提示:Multiple -filter, -af or -vf options specified for stream 0, only the last option ‘-filter:v scale=1080:1920’ will be used.

出现了上述的错误提示的话,是我们命令中写入了多个 -vf -af 参数,也就是说我们提供了两个滤镜。我们可以把subtitles滤镜和scale滤镜放在一条-vf参数里的,用逗号隔开。

subtitles滤镜参数

例:ffmpeg -i "imput.mp4" -lavfi "subtitles=subtitles.srt:force_style='Alignment=0,OutlineColour=&H100000000,BorderStyle=3,Outline=1,Shadow=0,Fontsize=18,MarginL=5,MarginV=25'" -crf 1 -c:a copy "output.mp4"

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         垂直距离

 

二、SecondaryColour参数
在我测试的时候,在命令中添加了SecondaryColour参数,但是并没有起作用,字幕并没有像卡拉OK中的字幕一样出现变化,用Telegram上大佬说的,这个参数需要有两行字幕在同一个位置才会发生变化,我没有试过,有懂的朋友也请指点一下。
相关链接:https://www.myzhenai.com.cn/post/3634.html

标签:
IP 地址 216.73.217.37
区域位置 美国加利福尼亚蒙诺维亚
系统信息 🇨🇳 系统 浏览器
最后修改:2022 年 05 月 20 日

赞赏支持

文章二维码