最新消息:20210917 已从crifan.com换到crifan.org

【已解决】嵌入ASS字幕到mp4视频中如何指定字幕的位置

视频 crifan 1728浏览 0评论
折腾:
【未解决】ffmpeg合并字幕到视频下方指定位置
期间,已经可以把ass字幕嵌入到视频中,且在下方显示了。
但是希望能指定字幕的位置。
参考之前的:
【已解决】调节ass字幕配置字幕字体大小和背景色再用ffmpeg嵌入视频中
【已解决】ass字幕文件中如何设置字幕的半透明背景色
【已解决】用Aegisub字幕编辑器去调整字体大小和字幕背景半透明效果
但是好像没有提及字幕位置
自己看到ass中有个:
PlayResX: 384
PlayResY: 288
去研究看看是否有效
然后再去整理:
【整理】ASS字幕文件格式详解
  • PlayResX & PlayResY:屏幕宽高
不是指字幕的位置
ssa/ass字幕格式全解析 – 简书
384×288是标准的4:3画面分辨率之一。ssa字幕里的坐标(字幕的位置)即根据这2个数值的范围来定义。16:9宽银幕的片子略做调整即可。
SSA/ASS Subtitles | Matroska
MPC-BE / Tickets / #223 Subtitle (ass) scaling problem – PlayResX/ PlayResY
subtitle ass PlayResX PlayResY
ass set subtitle postion
ass  subtitle display position
Question: How to adjust the position of ASS subtitle format? – VideoHelp Forum
Positioning subtitle in video – VideoHelp Forum
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H0300FFFF,&H00000000,&H02000 000,0,0,0,0,100,100,0,0,1,4,0,2,10,10,0,1
Style: Single,Arial,20,&H00FFFFFF,&H0300FFFF,&H00000000,&H02000 000,0,0,0,0,100,100,0,0,1,4,0,2,10,10,10,1
好像其中的
MarginL, MarginR, MarginV
和位置有关系
去看看
How can I change the position of only SOME lines in a subtitle file? – VideoHelp Forum
Ability to change display position for ASS/SSA subtitles
How to Change Subtitle Position in VLC
对字幕有参数,强制设置位置
-》那或许ass有参数?
-》好像也不是,估计是软字幕,vlc中额外支持的位置参数而已,和ass等没关系
https://zh.wikipedia.org/wiki/SubStation_Alpha
“* MarginL, MarginR. 左右缩进。文字距离视频最左最右的最小距离。
* MarginV. 上下缩进。文字热点(对齐点)距离视频上下的最小间距离。这取决于文字对齐方式,如果该文字使用中对齐,则上下缩进值无效。需要时文字可用\n或\N命令换行。ASS文件中,Script Info部分的一个参数“WrapStyle”也可以改变此值。”
去调整相关值试试效果
另外,没看到WrapStyle在哪里有解释
Positioning subtitle in video – VideoHelp Forum
“Convert to ASS or SSA (I recommend SSA because some players do not handle ASS additional attributes) as El Heggunte mentioned and add an additional line as ‘Single’ and then change the Vertical Margin to 0 for double lines (containing /N code) and 10 for single. You may have to vary off of this depending on different factors.
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H0300FFFF,&H00000000,&H02000 000,0,0,0,0,100,100,0,0,1,4,0,2,10,10,0,1
Style: Single,Arial,20,&H00FFFFFF,&H0300FFFF,&H00000000,&H02000 000,0,0,0,0,100,100,0,0,1,4,0,2,10,10,10,1”
说是:
两行字幕=默认:margin V=0
单行字幕=single:margin V=10
好像是:
此处margin V是垂直方向的margin,边距
-》而不是我以为的,希望的:具体的位置?
不管了,去试试marginV=40:
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding

Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,40,0
试试:
ffmpeg -i input/5d41d82f52247ce73d40475b_extendedAll.mp4 -vf "ass=input/5d41d82f52247ce73d40475b_cfgPosition.ass" output/5d41d82f52247ce73d40475b_addedAss_cfgPosition.mp4
结果:
是可以调整位置的,这个40,看起来像是比例,即40%的高度,而不是40px像素
但是看
ssa/ass字幕格式全解析 – 简书
“MarginL —字幕距左边的距离—取值范围0-PlayResX的数值
MarginR —字幕距右边的距离—取值范围0-PlayResX的数值
MarginV —字幕高度—取值范围0-PlayResY的数值”
好像又不是,而是
MarginV/PlayResY x 视频实际高度 ?
再去试试其他MarginV的值,比如100,其中此处PlayResY: 288:
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding

Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,100,0
命令:
ffmpeg -i input/5d41d82f52247ce73d40475b_extendedAll.mp4 -vf "ass=input/5d41d82f52247ce73d40475b_cfgPosition.ass" output/5d41d82f52247ce73d40475b_addedAss_marginV100.mp4
看看效果
对于高度是288的话,此处MarginV是100,看起来的确是:px像素,从底下向上的距离
那么再去试试MarginV是260,以及MarginL=80,MarginR=120
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding

Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,80,120,260,0
命令:
ffmpeg -i input/5d41d82f52247ce73d40475b_extendedAll.mp4 -vf "ass=input/5d41d82f52247ce73d40475b_cfgPosition.ass" output/5d41d82f52247ce73d40475b_addedAss_marginV260L80R120.mp4
看看效果:
  • 左右是对的:
    • L=80
    • R=120
  • 顶部也是对的:
    • V=从底向上=260
      • 由于字幕中间宽度有限,字幕太长,换行成多行,导致底部都超过屏幕了。
【总结】
至此,算是基本上确定,可以用:
  • MarginL和MarginR:控制字幕左右margin
  • MarginV:控制字幕从底向上的margin
从而实现,指定字幕的位置了。
举例:
ass文件中相关参数
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding

Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,20,20,10,0
其中:
  • MarginL=40
  • MarginR=40
  • MarginV=20
命令:
ffmpeg -i input/5d41d82f52247ce73d40475b_extendedAll.mp4 -vf "ass=input/5d41d82f52247ce73d40475b_cfgPosition.ass" output/5d41d82f52247ce73d40475b_addedAss_marginV10LR20.mp4
效果:

转载请注明:在路上 » 【已解决】嵌入ASS字幕到mp4视频中如何指定字幕的位置

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
91 queries in 0.181 seconds, using 23.33MB memory