QH7B
发表于 2024-10-7 15:40:05
最新版对于同名字体的处理还是有问题:
https://p.sda1.dev/19/47a40ca40411f5d7fe967c4b9f0dee88/捕获2.JPG
截图上的这几个字都没能正确显示,原始字体是 冬青黑体简体中文 W6 ,图中“我”“的”显示的是 冬青黑体简体中文 W3 ,其他文字都是默认字体。
字幕和字体蓝奏云:iXiOf2bvceof
我自己分析出的原因是,冬青黑体简体中文 W6 和 冬青黑体简体中文 W3 这两个字体子集化后字体名相同,字幕文本里的字体名称也相同,而且都是Regular样式,播放器无法区分这两个字体,只能使用其中的一个。
788也瘋狂
发表于 2024-10-7 19:35:55
QH7B 发表于 2024-10-7 15:40
最新版对于同名字体的处理还是有问题:
截图上的这几个字都没能正确显示,原始字体是 冬青黑体简体中文 W6 ...
這個問題著實難受,我也要去修改我的程式了mmm
他們其實 nameID 1 是一樣的 nameID 2 是不一樣的 就跟 msyh 與 msyhbd一樣 不過我懷疑 原始ASS文件中 是使用他的 nameID 4 去命名的 感覺是有優先權的概念在裡面{:5_102:}
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,微软雅黑,46,&H00FFFFFF,&H00FFFFFF,&H00275FD4,&H00275FD4,0,0,0,0,100,100,0,0,1,1,2,2,10,10,10,1
Style: Screen,Hiragino Sans GB W6,32,&H00477A9F,&H00477A9F,&H00477A9F,&H00477A9F,0,0,0,0,100,100,0,0,1,0,0,5,10,10,10,1
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:25.87,Default,,0,0,0,,请享用我们的{\fn微软雅黑 Bold}头部吧
Dialogue: 0,0:00:00.00,0:07:58.29,Screen,,0,0,0,,{\an4\fn微软雅黑\b1\c&H000000&\pos(16,52)}一直以来承蒙
這是一個範例 其中 (微软雅黑 Bold) 跟 (\fn微软雅黑\b1) 使用的字體因該是一樣的....
當子集化後因該保留該字體原始的樣式名稱 然後對 nameID 1 名稱進行重命名(微软雅黑)就好 不用 (微软雅黑 Bold) 整個更名
不過這問題讓我腦袋很卡中CPU都快被幹掉了
b8b41e3c
发表于 2024-10-7 19:47:18
QH7B 发表于 2024-10-7 15:40
最新版对于同名字体的处理还是有问题:
截图上的这几个字都没能正确显示,原始字体是 冬青黑体简体中文 W6 ...
v5.6.2已修复这个问题.
b8b41e3c
发表于 2024-10-7 19:55:39
788也瘋狂 发表于 2024-10-7 19:35
這個問題著實難受,我也要去修改我的程式了mmm
他們其實 nameID 1 是一樣的 nameID 2 是不一樣的 就跟 msy ...
用v5.6.2测试了你的这个demo,没有问题:
; ----- Font subset begin -----
; Font subset: NGLSB1AJ - 微软雅黑
; Processed by mkvlib 3.1.2 at 2024-10-07 19:53:55
; -----Font subset end-----
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,NGLSB1AJ,46,&H00FFFFFF,&H00FFFFFF,&H00275FD4,&H00275FD4,0,0,0,0,100,100,0,0,1,1,2,2,10,10,10,1
Style: Screen,Hiragino Sans GB W6,32,&H00477A9F,&H00477A9F,&H00477A9F,&H00477A9F,0,0,0,0,100,100,0,0,1,0,0,5,10,10,10,1
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:25.87,Default,,0,0,0,,请享用我们的{\fnNGLSB1AJ}头部吧
Dialogue: 0,0:00:00.00,0:07:58.29,Screen,,0,0,0,,{\an4\fnNGLSB1AJ\b1\c&H000000&\pos(16,52)}一直以来承蒙
788也瘋狂
发表于 2024-10-7 20:10:03
本帖最后由 788也瘋狂 于 2024-10-7 20:11 编辑
b8b41e3c 发表于 2024-10-7 19:55
用v5.6.2测试了你的这个demo,没有问题:
我知道文件不會缺字 種點是播放器不會判斷給粗體 因該會缺字播放器上面
你想想
Dialogue: 0,0:00:00.00,0:00:25.87,Default,,0,0,0,,请享用我们的{\fnNGLSB1AJ}头部吧
{\fnNGLSB1AJ}基本上就沒改啊
b8b41e3c
发表于 2024-10-7 20:27:36
本帖最后由 b8b41e3c 于 2024-10-7 23:11 编辑
788也瘋狂 发表于 2024-10-7 20:10
我知道文件不會缺字 種點是播放器不會判斷給粗體 因該會缺字播放器上面
你想想
Dialogue: 0,0:00:00.00,0: ...
正常的啊?
mpv
potplayer
mpv没有问题,但PotPlayer"头部吧"有问题,
哦,我大概知道你的意思了,但这种问题确实难搞啊,这种字幕确实很犯贱
788也瘋狂
发表于 2024-10-7 23:22:46
我想了一下我給自己的程式增加兩條規則
nameID1 要完全一樣才能觸發 子集後字體名一致
另一條是 如果ASS原始定義的名稱 在 nameID1 裡面收集不到 則輸出時使用自定義的 nameID 4 來代替
解論輸出因該會這樣>
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,NGLSB1AJ,46,&H00FFFFFF,&H00FFFFFF,&H00275FD4,&H00275FD4,0,0,0,0,100,100,0,0,1,1,2,2,10,10,10,1
Style: Screen,Hiragino Sans GB W6,32,&H00477A9F,&H00477A9F,&H00477A9F,&H00477A9F,0,0,0,0,100,100,0,0,1,0,0,5,10,10,10,1
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:25.87,Default,,0,0,0,,请享用我们的{\fnNGLSB1AJ Bold}头部吧
Dialogue: 0,0:00:00.00,0:07:58.29,Screen,,0,0,0,,{\an4\fnNGLSB1AJ\b1\c&H000000&\pos(16,52)}一直以来承蒙
b8b41e3c
发表于 2024-10-8 00:05:11
本帖最后由 b8b41e3c 于 2024-10-8 00:09 编辑
788也瘋狂 发表于 2024-10-7 23:22
我想了一下我給自己的程式增加兩條規則
nameID1 要完全一樣才能觸發 子集後字體名一致
另一條是 如果ASS原 ...
还有一个办法,但要重写整个字体解析的部分,外带子集化的实现也得重写,为了这种犯贱的字幕真的值得吗?
最终解决方案是:用了多少个名字,子集化的时候就加多少个进去
隔壁assfonts在不勾选重命名的时候,就是这么做的,但一旦勾选重命名了,那照样翻车.
我反正是不太想管的,感觉从v5.5.7开始就在给不规范的字幕擦屁股,仿佛永远都擦不干净一样.
QH7B
发表于 2024-10-8 11:00:00
(纯个人观点)感觉只要字幕按照ass specs相关文档去写,没有未定义的用法,都应该算是规范的,只能说ass格式本身为了实现可编辑性导致不够严谨,给播放器实现和子集化操作造成困难。如assfonts作者所说,解决办法好像只有使用pgs这种工业格式,我也倾向于在封装时都使用这种格式的字幕,但目前还没有见到哪个字幕组肯制作pgs字幕,想转换出正确的pgs字幕还是得逐个检查修改保证原ass字幕没有问题才行,而且这个转换实在太慢太费时了。
b8b41e3c
发表于 2024-10-8 15:07:05
本帖最后由 b8b41e3c 于 2024-10-8 16:26 编辑
QH7B 发表于 2024-10-8 11:00
(纯个人观点)感觉只要字幕按照ass specs相关文档去写,没有未定义的用法,都应该算是规范的,只能说ass格 ...
只要字体名字不混用,不把粗体族当普通族用,就不会出现子集化后乱配字体名的问题.
已经懒得再擦屁股了.
按我的想法直接报错就算了.
v5.6.3开始,发现混用字体名默认直接报错,可通过--no-font-check-strict参数关掉严格模式以跳过.