ffmpeg ass 字幕的不正确边框宽度

ffmpeg incorrect border width of ass subtitles

这是我在给视频刻录字幕时遇到的。

下面是屁码,我要在解析中使用640x360

[Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
YCbCr Matrix: None
PlayResX: 640
PlayResY: 360

[Aegisub Project Garbage]
Last Style Storage: Default
Scroll Position: 154
Active Line: 172
Video Position: 10429

[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,45,&H00FFFFFF,&H000000FF,&H00FF0000,&H00000000,0,0,0,0,100,100,0,0,1,5.125,3.125,2,28,28,16,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.94,0:05:12.11,*Default,NTP,0,0,0,,the quick brown dog jumps over the lazy fox.

我一般在Windows上用MeGUI(有avs脚本)烧录。这是 avs 代码:

DirectShowSource("C:\Users\xxx\Downloads\test.mp4", fps=25.000, audio=false, convertfps=true).AssumeFPS(25,1)
#deinterlace
#crop
#resize
#denoise

LoadPlugin("C:\Users\xxx\Desktop\megui\tools\avisynth_plugin\VSFilter.dll")
TextSub("C:\Users\xxx\Desktop\ass.ass", 1)

ConvertToYV12()

刻录后的字幕是这样的:

上Windows

但是,在Linux上无法使用MeGui。因此我使用了ffmpeg。我使用的命令是这样的:

ffmpeg -i test.mp4 -vf ass=ass.ass -crf 25 -an -f mp4 done.mp4
ffmpeg -i test.mp4 -vf ass=ass.ass:original_size=640x360 -crf 25 -an -f mp4 done.mp4
ffmpeg -i test.mp4 -vf ass=ass.ass:original_size=1920x1080 -crf 25 -an -f mp4 done.mp4
ffmpeg -i test.mp4 -vf subtitles=ass.ass -crf 25 -an -f mp4 done.mp4
ffmpeg -i test.mp4 -vf subtitles=ass.ass:original_size=640x360 -crf 25 -an -f mp4 done.mp4
ffmpeg -i test.mp4 -vf subtitles=ass.ass:original_size=1920x1080 -crf 25 -an -f mp4 done.mp4

然而,他们看起来都是这样的

Linux

上的字幕

windows上的效果就是我想要的。我怎样才能在 Linux 上获得那样的效果?谢谢!

刚发现这里已经解决了, https://github.com/libass/libass/issues/154

只需添加

ScaledBorderAndShadow: no

放在ass文件头上可以解决这个问题。

困了我一年