找回密码
 立即注册
查看: 2776|回复: 13

关于播放器Ass字幕渲染问题

7

主题

13

回帖

26

VC币

荣誉会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
100780

崭露头角

hpt 发表于 2023-9-25 21:41:38 | 显示全部楼层 |阅读模式
本帖最后由 hpt 于 2023-10-14 00:40 编辑

本帖没有喷播放器垃圾的意思

手机端用了很多播放器,很多播放器字幕渲染效果都不是很完美,反而电脑端(似乎)随便找个播放器渲染效果都挺不错的,大部分视频渲染出来的效果都是很完美的(就跟字幕组压制出来的硬字幕版本一样),但是我用过的播放器都出现了有一小部分视频的字幕渲染效果有问题

1. VLC在快进的时候字幕显示不全


2. MPV在喵萌奶茶屋的魔法少女网站的ED结束后,ED歌词应该全部消失,但是却有一个字没有被消失还仍然显示在视频中


3. potplayer在喵萌奶茶屋的总之就是非常可爱的ED中,歌词偶尔会闪一下


v.gif


我偏向于内封/外挂,找一个ass字幕渲染完美的播放器好像有点难..


回复

使用道具 举报

24

主题

772

回帖

3104

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
648753
sommio 发表于 2023-9-26 08:25:46 | 显示全部楼层
本帖最后由 sommio 于 2023-9-26 08:32 编辑

mpv-android 跟电脑版 mpv 的 libass 是一样的,不知道你用的是哪个「mpv」。
目前主流的字幕渲染器都仅能利用单核,性能差距就没办法了。

按理说 vlc 呈现的效果应该和 mpv-android 差不多,虽然 libass 没有后者这么新但也足够(v0.16.0)
回复

使用道具 举报

8

主题

176

回帖

0

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
311982
ttt805446984 发表于 2023-9-26 09:35:06 | 显示全部楼层
1  2  ,没试,第三个刚好有,看了下mpv显示没问题
说明应该是播放器配置的问题
回复

使用道具 举报

7

主题

13

回帖

26

VC币

荣誉会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
100780

崭露头角

hpt  楼主| 发表于 2023-9-26 10:26:22 | 显示全部楼层
本帖最后由 hpt 于 2023-10-14 00:48 编辑
ttt805446984 发表于 2023-9-26 09:35
1  2  ,没试,第三个刚好有,看了下mpv显示没问题
说明应该是播放器配置的问题 ...

第三个MPV显示的没问题,potplayer显示的ED字幕偶尔会闪一下


就是第二个mpv显示的有点问题


MPV显示的字幕




字幕组压制的硬字幕





回复

使用道具 举报

8

主题

176

回帖

0

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
311982
ttt805446984 发表于 2023-9-26 11:12:00 | 显示全部楼层
本帖最后由 ttt805446984 于 2023-9-26 11:13 编辑
hpt 发表于 2023-9-26 10:26
第三个MPV显示的没问题,potplayer显示的ED字幕偶尔会闪一下

我下载原片试了下,,还真是,只有mpv的会残留一段时间

mpc和vlc都正常


不过感觉是个例,过了算了,我也更喜欢软字幕,但是第一次遇到这种怪事

点评

mpc-be我测试了也不正常,这里的字幕会闪烁一下  发表于 2023-9-26 19:57
这应该是 mpv 自己的问题了,我在 Linux 上 aegisub, vlc, mpv 都是用系统包管理器的相同 libass.so。只有 mpv 存在这个问题,mpv-git 也是如此  发表于 2023-9-26 11:43
回复

使用道具 举报

49

主题

531

回帖

1万

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
2209108
tmdtmdtmdqq 发表于 2023-9-26 13:58:25 | 显示全部楼层
本帖最后由 tmdtmdtmdqq 于 2023-9-26 14:15 编辑

因为特效字幕行的结束时间 小于 开始时间
例如EP12里的6765行:
Dialogue: 1,0:21:11.50,0:21:11.45,

  1. 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)}い
复制代码


只要错误行后面 多一起始时间 大于等于 起始时间的 字幕行,就能正常显示(估计是刷掉这帧的缓存?)
比如,在末尾加一空白行:
  1. Dialogue: 1,0:21:11.50,0:21:11.50,ed - jp,,0,0,0,fx,
复制代码



只能说特效制作不够严谨,其实还有其它问题,例如OP中有没被展开的变量 !tron[math.random(3)]!,绘画指令出现双引号之类的


点评

细,我直接改成大于开始时间也能正常显示  发表于 2023-9-26 14:40
回复

使用道具 举报

5

主题

492

回帖

215

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
368961
苏辰汐 发表于 2023-9-26 20:01:33 | 显示全部楼层
本帖最后由 苏辰汐 于 2023-9-26 20:13 编辑

鉴于其他基于 libass 的播放器渲染正常,2实际算是 mpv 的一个 bug,建议最好向官方反馈并等待修复
这个本质问题是当字幕持续时间未知时,mpv 将保留该字幕渲染直至下一个新的字幕渲染事件发生(如果将后面的字幕内容删除,它将持续显示直至视频结束)。这绝对是个 mpv 的 bug
回复

使用道具 举报

5

主题

492

回帖

215

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
368961
苏辰汐 发表于 2023-9-26 23:08:37 | 显示全部楼层
本帖最后由 苏辰汐 于 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 都自己造轮子

点评

ffmpeg 现在还直接空输出有 STYLE 的 WebVTT (#9064)  发表于 2023-9-27 08:13
回复

使用道具 举报

1

主题

18

回帖

0

VC币

注册会员

Rank: 2

积分
1113
赤染翎羽 发表于 2023-9-27 18:08:01 | 显示全部楼层
按我的印象,Android版vlc最大的问题是缺特效,并且同屏有多条字幕时可能缺三少四,不清楚是不是基于性能上的考虑而设计的。mx player和kodi应该是可以正常渲染ass,至少没啥很明显的一眼可见缺失,不过kodi不支持外挂字体,对手机的适配也有点糟糕,比较可惜。我个人更倾向于将字幕处理成PGS格式再在手机或电视上播放,PGS对性能的需求远低于ASS,兼容性也远好于ASS,无论是VLC还是Kodi,甚至是MIUI系统内置的小米视频,都可以接近完美的播放。
回复

使用道具 举报

5

主题

492

回帖

215

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
368961
苏辰汐 发表于 2023-9-28 15:29:56 | 显示全部楼层
本帖最后由 苏辰汐 于 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 字幕缺失 [Script Info] 时忽略解析"PlayResX/Y:"信息(模仿 vsfilter 行为,修复兼容性)
  • 修复 ffmpeg 无法识别具有双 BOM 字节的 UTF-16 编码的字幕文件
  • 修复 ffmpeg 无法识别首行不是 [Script Info] 的 ASS 字幕文件
  • 移除 ffmpeg 中对 ASS 字幕中负时间戳的不恰当处理(非 ASS 字幕不受影响)

windows 版本的 mpv 相关构建:Releases · dyphire/mpv-winbuild
具体补丁可以在构建脚本中找到:https://github.com/dyphire/mpv-winbuild-cmake/tree/patch

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表