我有一些 MKV 文件,里面有 Advanced SubStation Alpha (ASS) 字幕。字幕是“可切换的”,所以它们可能不会“刻录”。
我的目标是——以某种方式——增加这些字幕的字体大小。最好的办法是直接修改 MKV 文件中的字幕流属性(如果这有意义的话?)。(媒体播放器关于字体大小的设置不会有帮助;我会在电视上播放这些 MKV 文件。)这将使我的 HandBrake 转码更容易,因为该程序无法导入除 SRT 之外的任何其他字幕格式。但是,它可以使用 ASS 字幕如果它们嵌入在要转码的文件中。因此,最简单的方法就是保留(直接修改)MKV 中的字幕。
但我甚至不知道从哪里开始……
答案1
好吧,我做到了。这不是最佳方法,但我很着急。下面是我解决问题的方法。
(还,不要忘记安装 mkvtoolnixLinux 用户可以直接从其存储库中提取包,而 Windows 用户可以尝试下载mkvtoolnix从官方网站。
- 运行
mkvinfo <mkv filename>
并获取字幕索引。 - 跑步
mkvextract tracks <mkv filename> <subtitle track index>:<mkv filename>.ass
<mkv filename>.ass
用文本编辑器替换输出的字体大小。- 跑步
mkvmerge -o <new mkv filename> <mkv filename> --language 0:eng <mkv filename>.ass
<new mkv filename>
使用转码手刹并在电视上观看转码后的文件。
一个例子使用文件dn-01.mkv
:
运行
mkvinfo dn-01.mkv
后程序会打印出一些关于mkv文件的信息,查找字幕轨道和其对应的编号。请务必使用括号内的数字,因为它是用于的mkvextract
。在我的例子中,字幕轨道信息是:| + A track | + Track number: 3 (track ID for mkvmerge & mkvextract: 2) | + Track UID: 476285904 | + Track type: subtitles | + Enabled: 1 | + Default flag: 1 | + Forced flag: 0 | + Lacing flag: 0 | + MinCache: 0 | + Timecode scale: 1 | + Max BlockAddition ID: 0 | + Codec ID: S_TEXT/ASS | + Codec decode all: 1 | + CodecPrivate, length 2057 | + Language: eng
奔跑
mkvextract tracks dn-01.mkv 2:dn-01.ass
并等待。dn-01.ass
使用文本编辑器打开,然后更改V4+ Styles
文件开头标题下的字体大小。(记得更改全部样式,而不仅仅是Default
。)例如:Style: Default,Marker Felt,27,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,2,10,10,10,0 Style: SIGN,Sand,36,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,0 (more)
... 变成 ...
Style: Default,Marker Felt,42,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,2,10,10,10,0 Style: SIGN,Sand,54,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,0 (more)
更改完成后保存文件。
运行
mkvmerge -o dn-01-modified.mkv dn-01.mkv --language 0:eng dn-01.ass
并等待。该过程完成后,新创建的dn-01-modified.mkv
将有一个额外的字幕轨道,其渲染尺寸应比原始字幕轨道更大。
您现在已完成!但我想在电视上观看视频。如果您也想这样做,或者在其他设备上播放,那么:
使用一些视频转码程序进行转码
dn-01-modified.mkv
,并使用适合您的目标设备的设置。(不要忘记告诉程序老化如果你的目标设备无法播放 ASS 字幕,请将新添加的字幕轨道添加到视频本身中!)就我而言,我使用了HandBrakeCLI使用以下设置在三星 60 英寸电视上使用。请注意,我正在刻录字幕,因为我的电视不喜欢 ASS 字幕。HandBrakeCLI -e x264 -q 20.0 -a 1 -E ffac3 -B 160 -6 dpl2 -R Auto -D 0.0 --audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback ffac3 -f mkv --loose-anamorphic --modulus 2 -m --x264-preset veryfast --h264-profile main --h264-level 4.0 --subtitle "2" --subtitle-burned 2 -i dn-01-modified.mkv -o dn-01-modified-burned.mkv
dn-01-modified-burned.mkv
在目标设备上播放转码后的文件。
正如我在一开始所说的:这不是一个最佳过程。事情可以做得更好,但目前我没有时间改进这个过程。对大量视频这样做也不是一件有趣的事;它会变得非常重复。幸运的是,我只需要对几个视频这样做,但在未来,我肯定会有更多需要放大字幕的视频,到那时,我会编写一个 bash 或 python 脚本来自动完成所有操作。