使用ffmpeg处理srt字幕的对齐和位置相关参数说明

2025-07-03 01:04:17 19 分享链接 开发笔记 ffmpeg

在使用ffmpeg时,Alignment=2,Y=-50不支持Y参数,可以使用MarginV参数来调整字幕的垂直位置。以下是关于ffmpeg字幕srt对齐和位置设置的详细说明:

在命令行中输入以下命令可以获取关于subtitles滤镜的详细帮助

ffmpeg -h filter=subtitles

字幕对齐

  • Alignment参数用于设置字幕的对齐方式,取值范围是1-9,常见的对齐方式如下:

    • 1: 左下角。
    • 2: 下中点。
    • 3: 右下角。
    • 5: 左上角。
    • 6: 上中心。
    • 7: 右上角。
    • 9: 中左。
    • 10: 中间。
    • 11: 中右。

字幕位置

  • 除了对齐方式外,还可以通过以下参数来微调字幕的位置:

    • MarginL: 设置字幕与左边界的距离。
    • MarginR: 设置字幕与右边界的距离。
    • MarginV: 设置字幕与底部的垂直距离。
  • 例如,要将字幕设置为底部居中,并且距离底部有5像素的距离,可以使用以下命令:

    ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='Alignment=2,MarginV=5'" output.mp4
  • 如果要将字幕设置在视频的中间位置,可以将Alignment设置为10,命令如下:

    ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='Alignment=10'" output.mp4
  • 当需要将字幕向上移动时,可以通过设置MarginV为负值来实现。例如,将字幕向上移动10像素:

    ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='Alignment=2,MarginV=-10'" output.mp4
  • 还可以使用Origin参数来设置字幕的位置,Origin参数可以指定字幕的起始位置,与Alignment参数配合使用可以更灵活地控制字幕的位置。例如:

    ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='Alignment=2,Origin=0,0'" output.mp4

    此命令将字幕设置在视频的左上角。

  • Linespacing参数用于设置字幕行间距。例如,设置行间距为5像素:

    ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='Linespacing=5'" 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         垂直距离

底部居中对齐,离底部200

ffmpeg -i input.mp4 -vf "scale=1080:1920,subtitles=test.srt:original_size=1080x1920:force_style='FontSize=12,Alignment=2,MarginV=200'" -c:v h264_nvenc output.mp4

顶部居中对齐,离顶部200

ffmpeg -i input.mp4 -vf "scale=1080:1920,subtitles=test.srt:original_size=1080x1920:force_style='FontSize=12,Alignment=6,MarginV=200'" -c:v h264_nvenc output.mp4

带背景

ffmpeg -i input.mp4 -vf "scale=1080:1920,subtitles=test.srt:original_size=1080x1920:force_style='FontSize=12,Alignment=2,MarginV=50,OutlineColour=&H100000000,BorderStyle=3'" -c:v h264_nvenc output.mp4

重置所有

ffmpeg -i inputx.mp4 -vf "subtitles=test.srt:original_size=1920x1080:force_style='FontSize=8,MarginV=10,Alignment=2,BorderStyle=1,Outline=0,Shadow=0,Spacing=100,ScaleX=100,ScaleY=100,Bold=0,Italic=0,Underline=0,StrikeOut=0'" -c:v h264_nvenc output.mp4

参考文档

使用ffmpeg处理srt字幕的对齐和位置相关参数说明