本帖最后由 tonyhsie 于 2022-4-27 13:17 编辑
幫頂一下
順便提一個範例來解釋
其它子集化工具 (AssFontSubset) 是怎麼錯誤的處理「粗體」、「斜體」的
今天有一個簡單的 ass 檔,指定使用「思源黑體」、「粗體」,顯示一段文字
- [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,思源黑體,100,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0.7,0,2,15,15,14,1
- [Events]
- Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
- Dialogue: 0,0:00:00.00,1:01:04.59,Default,,0,0,0,,思源黑體 -1
复制代码
以下使用 MPC-HC & vsfilter 來做測試
當我使用影片+外掛字幕時,結果是這樣 (正確的結果)
當我把粗體改為非粗體時,
Style: Default,思源黑體,100,&H00FFFFFF,&H00000000,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,0.7,0,2,15,15,14,1
結果是這樣 (非粗體,對照組)
當我使用 AssFontSubset 把字幕的字型子集化- [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,CHR48ML7,100,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0.7,0,2,15,15,14,1
- [Events]
- Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
- Dialogue: 0,0:00:00.00,1:01:04.59,Default,,0,0,0,,思源黑體 -1
复制代码
並內封進 mkv 時,結果是這樣 (錯誤結果)
比較三張圖就能發現,在子集化之後,原本的「思源黑體」+「粗體」
在子集化&內封後,變成了「非粗體」
原因是因為,AssFontSubset 在子集化字型時,不會特別針對「粗體」或「斜體」挑選獨立字型
如果你輸入的字型資料夾裡,有「非粗體」的「思源黑體」在,那 AssFontSubset 就會把它子集化
這一步是有問題的(因為實際上應該被子集化的,是「粗體」的「思源黑體」)
樓主的程式理論上已解決這個錯誤了
順便附上我測試用的子集化後的內掛影片 & 外掛字幕
方便大家實測
|