Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ASS弹幕二次调整后出现丢失或者叠加 #33

Open
lrln opened this issue Dec 10, 2022 · 11 comments
Open

ASS弹幕二次调整后出现丢失或者叠加 #33

lrln opened this issue Dec 10, 2022 · 11 comments
Labels
bug Something isn't working

Comments

@lrln
Copy link

lrln commented Dec 10, 2022

1.用bilibilievo获取到ASS弹幕,用DanmakuFactory调整大小时间后,播放时弹幕都挤在视频左上角,
所以我都是用bilibilievo获取xml后再转换成ass,用downkyi或者闪豆下视频带弹幕随便编辑就不会出现问题,
不知道是不是evo脚本的问题
2.录播姬xml转成ass后,再对生成的ASS调整,生成的SC礼物直方图会丢失,只保留弹幕.
3.我勾选统计表没有效果,只会在直方图上方占位置不显示.(没体验过统计表,不知道好不好用)
4.用losslesscut切割ASS后不会保留sc直方图,我知道是loss切割不能识别DanmakuFactory的问题,还是苦恼.
(全部压制再切割太费时间了,所以选择先切割再分段压制)

@hihkm
Copy link
Owner

hihkm commented Dec 11, 2022

感谢你的反馈~
1、没有了解过bilibilievo,能否提供转换前以及转换后的ass文件我看看是什么问题~
2、SC礼物框的动画由大量的ass动画特效组成(一条SC可能会产生数十条动画),目前的转换策略为在读入ass文件时该部分内容会直接抛弃,因为很难解析。
3、统计表是统计当前弹幕量用的,占位置不显示是指什么样子呢~
4、如A2所述,SC礼物框的动画是由大量的ass动画组成,losslesscut可能无法支持特效字幕,可以尝试一下其他工具。如果片段不是很多的话,可以尝试先裁剪视频,在转换弹幕时设置根据开始时间设置偏移量,这会节省压制时间,但会加大工作量。

目前的所有转换都不能保证完全无损,因为各种文件格式承载的信息都不一样。重构时将会重点考虑这个问题,比如通过注释附带更多信息,至少保证对于本工具产出的文件相互转换能做到尽量无损。

@lrln
Copy link
Author

lrln commented Dec 11, 2022

录播姬无统计表
从b站EVO下载xml转换ASS后显示统计表
Uploading 出问题的ASS弹幕.zip…
对于第4点的补充:loss可以切割ASS和sc,只是那一段分割视频里没有SC发送,所以没有显示,在选择了过滤礼物后,sc并不会被小礼物顶上去,会在左边形成一整排,因为并没有设置SC停留时间,后切割的视频没办法压制前面的SC,
https://www.bilibili.com/video/BV1Ce411P7AV/ 这个视频没有压制进去
https://www.bilibili.com/video/BV1yW4y1g7FR/ 这段SC大战就很好的记录了
综上: loss可以切割ASS中的SC,要在切割片段里有SC才可以,但无论如何,都不会切割直方图,直方图无法显示并压制.
1.3问题的视频和ASS已经上传

@lrln
Copy link
Author

lrln commented Dec 11, 2022

目前是b站下载的弹幕可以显示统计表,录播姬的不可以
evo下载弹幕已经上传,都在zip里

@hihkm
Copy link
Owner

hihkm commented Dec 11, 2022

你好,Uploading 出问题的ASS弹幕.zip… 这个链接依然指向本issue,无法下载。请重新上传试一下~

  • 如果要保留之前的sc,确实没有比较好的方法,这些裁剪工具貌似是以字幕的开始时间为准进行裁剪的(或许会有比较智能的工具能做到)。比如一个长3分钟的视频,我有一个图形会在 2:00 - 3:00 一直显示,写到ass文件上的持续时间就是 2:00 - 3:00。如果你裁剪 2:30 - 3:00 这一段,因为这条字幕的起始时间 2:00 < 2:30 ,就被裁剪软件直接抛弃了。渲染出来就是不完整,内容缺失。
  • 直方图是一个从视频开始持续到视频结束的东西,无论你剪切中间哪一段,只要不是从头开始,都会被这样的剪切软件无情抛弃~

对于这个问题,或许我可以考虑加一个字幕切片的功能。

@lrln
Copy link
Author

lrln commented Dec 11, 2022

@hihkm
Copy link
Owner

hihkm commented Dec 11, 2022

对于第一个问题,这个是因为识别ass文件的时候的误判。对于无法识别的弹幕类型,DanmakuFactory都会认定为特殊弹幕,故会出现位置不正常。
对于 evo转换前正常.ass 这个文件,有两个地方会导致这个问题:

1、滚动弹幕 \move 有多余内容

比如常见的右左滚动弹幕,bilibilievo上是这样子表示的
Dialogue: 0,0:00:00.00,0:00:14.10,Medium,,0,0,0,,{\move(1962,30,-65,30,0,14100)\C&HFFFFFF&}00:31
其中 \move(1962,30,-65,30,0,14100) 的后两个参数描述的是移动的开始和结束时间,实际上 0:00:00.00,0:00:14.10 表述的是相同的意思,添加了这两个可选的参数之后,DanmakuFactory为了不丢失信息,会错误识别为特殊弹幕。

2、固定弹幕部分 \pos 位置异常

比如常见的顶部(或底部)固定弹幕,bilibilievo上是这样子表示的
Dialogue: 0,0:00:02.56,0:00:16.66,Medium,,0,0,0,,{\pos(0,-999)\C&HFFFFFF&}11
其中 \pos(0,-999) 表示位置信息。有大量的弹幕都为此位置,我猜测是作者通过此方式来隐藏被屏蔽或无法显示的弹幕,但是这种做法也会导致被DanmakuFactory错误识别为特殊弹幕。

临时处理:
如果实在要转换这样的弹幕文件,可以使用记事本工具对要转换的文件进行以下文本替换:
1、将 ,0,14100) 全部替换为 )
2、将 \pos(0,-999) 全部替换为 \pos(948.5,-999),其中 948.5 为屏幕分辨率的一半,bilibilievo设定的是 1897。

兼容第三方生成的ass是比较困难的,由于这个东西没有一个统一的标准,大家生成的文件形式上都不一样,比较难以避免,后续考虑一下如何处理这样的问题。

@lrln
Copy link
Author

lrln commented Dec 11, 2022

evo的ASS兼容性我倒是无所谓,反正下了ASS我还是要格式化一遍,平时都是下的XML
我4点反馈其实最在乎的是第三点,录播姬点了原始数据还是没有统计表,
用b站直播回放弹幕就可以生成统计表,这个我解决不了,想知道怎么解决

@hihkm
Copy link
Owner

hihkm commented Dec 11, 2022

确实无统计表,能否提供源 xml 文件~

@lrln
Copy link
Author

lrln commented Dec 11, 2022

@hihkm
Copy link
Owner

hihkm commented Dec 11, 2022

这个问题比较尴尬,统计表是四年前最开始就有的功能,实现写的比较死,而礼物弹幕是后来追加的,为了防止统计出问题(当时觉得应该也没人用这玩意儿),所以只是简单地做了一个拦截,但凡存在一条不是正常的弹幕统计表就不会生成。
因为在重构,所以不打算对当前版本做较大的改动了,希望能理解~

@hihkm
Copy link
Owner

hihkm commented Dec 11, 2022

不看代码都忘了有这茬qwq

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants