关于播放器Ass字幕渲染问题
本帖最后由 hpt 于 2023-10-14 00:40 编辑本帖没有喷播放器垃圾的意思
手机端用了很多播放器,很多播放器字幕渲染效果都不是很完美,反而电脑端(似乎)随便找个播放器渲染效果都挺不错的,大部分视频渲染出来的效果都是很完美的(就跟字幕组压制出来的硬字幕版本一样),但是我用过的播放器都出现了有一小部分视频的字幕渲染效果有问题。
1. VLC在快进的时候字幕显示不全
https://p.sda1.dev/13/41ab547413d9c4234d0be0ff4fa2063c
2. MPV在喵萌奶茶屋的魔法少女网站的ED结束后,ED歌词应该全部消失,但是却有一个字没有被消失还仍然显示在视频中
https://p.sda1.dev/13/b36a2a177b702baffe315114bcf7fe8a
3. potplayer在喵萌奶茶屋的总之就是非常可爱的ED中,歌词偶尔会闪一下
我偏向于内封/外挂,找一个ass字幕渲染完美的播放器好像有点难..
本帖最后由 sommio 于 2023-9-26 08:32 编辑
mpv-android 跟电脑版 mpv 的 libass 是一样的,不知道你用的是哪个「mpv」。
目前主流的字幕渲染器都仅能利用单核,性能差距就没办法了。
按理说 vlc 呈现的效果应该和 mpv-android 差不多,虽然 libass 没有后者这么新但也足够(v0.16.0)
12,没试,第三个刚好有,看了下mpv显示没问题
说明应该是播放器配置的问题 本帖最后由 hpt 于 2023-10-14 00:48 编辑
ttt805446984 发表于 2023-9-26 09:35
12,没试,第三个刚好有,看了下mpv显示没问题
说明应该是播放器配置的问题 ...
第三个MPV显示的没问题,potplayer显示的ED字幕偶尔会闪一下
就是第二个mpv显示的有点问题
MPV显示的字幕
https://p.sda1.dev/13/48bd32bb39d1e111c8ef25783eea08ea
字幕组压制的硬字幕
https://p.sda1.dev/13/67b8766f46c6949b535a47bdf3d89bbe
本帖最后由 ttt805446984 于 2023-9-26 11:13 编辑
hpt 发表于 2023-9-26 10:26
第三个MPV显示的没问题,potplayer显示的ED字幕偶尔会闪一下
我下载原片试了下,,还真是,只有mpv的会残留一段时间
mpc和vlc都正常
不过感觉是个例,过了算了,我也更喜欢软字幕,但是第一次遇到这种怪事
本帖最后由 tmdtmdtmdqq 于 2023-9-26 14:15 编辑
因为特效字幕行的结束时间 小于 开始时间
例如EP12里的6765行:
Dialogue: 1,0:21:11.50,0:21:11.45,
Dialogue: 1,0:21:11.50,0:21:11.45,ed- jp,,0,0,0,fx,{\an5\\t(0,100,\3c&H000000&)\t(100,200,\3c&HA0FF00&)\t(200,300,\3c&H000000&)\t(300,400,\3c&HA0FF00&)\t(400,500,\3c&H000000&)\t(500,600,\3c&HA0FF00&)\t(600,700,\3c&H000000&)\t(700,800,\3c&HA0FF00&)\t(800,900,\3c&H000000&)\t(900,1000,\3c&HA0FF00&)\t(1000,1100,\3c&H000000&)\t(1100,1200,\3c&HA0FF00&)\t(1200,1300,\3c&H000000&)\t(1300,1400,\3c&HA0FF00&)\t(1400,1500,\3c&H000000&)\t(1500,1600,\3c&HA0FF00&)\t(1600,1700,\3c&H000000&)\t(1700,1800,\3c&HA0FF00&)\t(1800,1900,\3c&H000000&)\t(1900,2000,\3c&HA0FF00&)\t(2000,2100,\3c&H000000&)\t(2100,2200,\3c&HA0FF00&)\t(2200,2300,\3c&H000000&)\t(2300,2400,\3c&HA0FF00&)\t(2400,2500,\3c&H000000&)\t(2500,2600,\3c&HA0FF00&)\t(2600,2700,\3c&H000000&)\t(2700,2800,\3c&HA0FF00&)\t(2800,2900,\3c&H000000&)\t(2900,3000,\3c&HA0FF00&)\t(3000,3100,\3c&H000000&)\t(3100,3200,\3c&HA0FF00&)\t(3200,3300,\3c&H000000&)\t(3300,3400,\3c&HA0FF00&)\t(3400,3500,\3c&H000000&)\t(3500,3600,\3c&HA0FF00&)\t(3600,3700,\3c&H000000&)\t(3700,3800,\3c&HA0FF00&)\t(3800,3900,\3c&H000000&)\t(3900,4000,\3c&HA0FF00&)\t(4000,4100,\3c&H000000&)\t(4100,4200,\3c&HA0FF00&)\t(4200,4300,\3c&H000000&)\t(4300,4400,\3c&HA0FF00&)\t(4400,4500,\3c&H000000&)\t(4500,4600,\3c&HA0FF00&)\t(4600,4700,\3c&H000000&)\t(4700,4800,\3c&HA0FF00&)\t(4800,4900,\3c&H000000&)\t(4900,5000,\3c&HA0FF00&)\t(5000,5100,\3c&H000000&)\t(5100,5200,\3c&HA0FF00&)\t(5200,5300,\3c&H000000&)\t(5300,5400,\3c&HA0FF00&)\t(5400,5500,\3c&H000000&)\t(5500,5600,\3c&HA0FF00&)\t(5600,5700,\3c&H000000&)\bord3\shad2\blur15\be3\pos(820,37)}い
只要错误行后面 多一行起始时间 大于等于 该行起始时间的 字幕行,就能正常显示(估计是刷掉这帧的缓存?)
比如,在末尾加一空白行:Dialogue: 1,0:21:11.50,0:21:11.50,ed - jp,,0,0,0,fx,
只能说特效制作不够严谨,其实还有其它问题,例如OP中有没被展开的变量 !tron!,绘画指令出现双引号之类的
本帖最后由 苏辰汐 于 2023-9-26 20:13 编辑
鉴于其他基于 libass 的播放器渲染正常,2实际算是 mpv 的一个 bug,建议最好向官方反馈并等待修复
这个本质问题是当字幕持续时间未知时,mpv 将保留该字幕渲染直至下一个新的字幕渲染事件发生(如果将后面的字幕内容删除,它将持续显示直至视频结束)。这绝对是个 mpv 的 bug
本帖最后由 苏辰汐 于 2023-9-27 16:35 编辑
苏辰汐 发表于 2023-9-26 20:01
鉴于其他基于 libass 的播放器渲染正常,2实际算是 mpv 的一个 bug,建议最好向官方反馈并等待修复
这个本 ...
刚去 mpv 仓库下提了个 issue,持续关注:Incorrect duration of ASS subtitles · Issue #12492 · mpv-player/mpv
编辑:经过讨论,问题根源出在 FFmpeg 上,而且不好修复。见 FFmpeg/libavformat/subtitles.c
FFmpeg 特异点太多了,怪不得 vlc 和 mpc 都自己造轮子
按我的印象,Android版vlc最大的问题是缺特效,并且同屏有多条字幕时可能缺三少四,不清楚是不是基于性能上的考虑而设计的。mx player和kodi应该是可以正常渲染ass,至少没啥很明显的一眼可见缺失,不过kodi不支持外挂字体,对手机的适配也有点糟糕,比较可惜。我个人更倾向于将字幕处理成PGS格式再在手机或电视上播放,PGS对性能的需求远低于ASS,兼容性也远好于ASS,无论是VLC还是Kodi,甚至是MIUI系统内置的小米视频,都可以接近完美的播放。 本帖最后由 苏辰汐 于 2023-10-1 20:48 编辑
苏辰汐 发表于 2023-9-26 23:08
刚去 mpv 仓库下提了个 issue,持续关注:Incorrect duration of ASS subtitles · Issue #12492 · mpv-p ...
在这之后我尝试为 libass 和 ffmpeg 应用了几个补丁来修复一些已知的字幕问题:
[*]修复 libass 在 ASS 字幕缺失 时忽略解析"PlayResX/Y:"信息(模仿 vsfilter 行为,修复兼容性)
[*]修复 ffmpeg 无法识别具有双 BOM 字节的 UTF-16 编码的字幕文件
[*]修复 ffmpeg 无法识别首行不是 的 ASS 字幕文件
[*]移除 ffmpeg 中对 ASS 字幕中负时间戳的不恰当处理(非 ASS 字幕不受影响)
windows 版本的 mpv 相关构建:Releases · dyphire/mpv-winbuild
具体补丁可以在构建脚本中找到:https://github.com/dyphire/mpv-winbuild-cmake/tree/patch
页:
[1]