muzuiget / niconvert

弹幕转换工具
250 stars 33 forks source link

目前的代码希望能重构一下 #7

Closed kaedei closed 10 years ago

kaedei commented 11 years ago

niconvert.py中代码耦合十分严重= =

现在的转换过程的入口是WebSite类,但是Website的init中却又使用了(依赖于)子类的create_downloader()。

希望能把下载解析的过程和转换的过程,也就是 AB站的Downloader 和 AssSubtitle+NicoSubtitle分开,这样结构能够更清晰些。转换过程使用标准格式作为初始化参数,这样对于其他弹幕来源(比如内容为弹幕xml的字符串)也会有很好的支持。

muzuiget commented 11 years ago

那个 WebSite 就是类似 Java 的抽象类,不建议直接实例化 WebSite,具体由子类来实现。

后一个问题没看懂,为什么要分开呢,什么叫标准格式?如果要添加一个新网站(NicoNico?),那么只需要实现下载的 Downloader 和转换函数 create_nico_subtitles() 就可以了。

muzuiget commented 11 years ago

毕竟代码还是一年前写的,现在水平进步了,以现在眼光看,代码确实需要重构,但是一方便能用就又不想动了。

kaedei commented 11 years ago

可能会有这样的场景:转换所需的XML来自于字符串,或是来自于磁盘某个文件,或者是某个List/Set对象等等。现在就没办法直接从这些来源中转换。 最近把niconvert移植到了IronPython中(.NET平台下的Python实现),然后在普通的C#程序中调用。Python Host程序已经取得了所需的xml,传递给Python的就是含有xml的一个String,因为其中没有下载的过程,所以调用起来相当吃力,我不得不把WebSite类砍掉重新写了个转换入口函数才达到目的。

标准格式就是说类似Java中的pojo类,定义一条弹幕所需的标准的格式,比如

class Danmaku {
  public String Time;
  public int Color;
  public int Mode;
  public String Message;
}
muzuiget commented 11 years ago

当时没考虑那么多,只想简单粗暴实现基本效果。其实你也不用纠结这个吧,代码不合口味然后重新封装很常见的,不想改别人代码可以建立个新文件,把有用的部分 import 进去用就行了。

m13253 commented 10 years ago

我最近在写另一个弹幕转换ASS的程序。 弹幕排布算法是,从上往下,找到第一个可以放得下弹幕的地方,如果找不到,就放在空位最多的行。 这个算法和B站本身的弹幕排布算法非常接近。

目前我已经有命令行界面(以后图形界面很方便),尚未有弹幕 XML 抓取功能,可以配合 you-get 来抓 XML。

如果你们有兴趣,可以考虑和我合作。

muzuiget commented 10 years ago

@m13253 很好,不过我已经没有闲功夫继续改进这个项目了,而且我也觉得现在足够用了。

现在 niconvert 的 gui 代码全是调用 niconvert.py 的接口,你略加修改就能用了。

m13253 commented 10 years ago

@muzuiget 如果你有时间,不妨试试看我的程序。目前弹幕排布算法有一些奇怪的bug而不好调试,我希望多多收集大家的报告。

如果我直接用你的GUI代码就需要2to3转换,既然那样我就再自己写一个Gtk+3的GUI吧。现在我也没有闲功夫,不过还请期待。

muzuiget commented 10 years ago

我已经完全用 Python 3 重写了。

@m13253 我也看过你的博客,觉得你用那张演示截图效果不错,我也弄了一张,希望你不要介意。

m13253 commented 10 years ago

嗯。截图什么的没关系的。 我的Danmaku2ASS也成功移植到Py2了。在py2分支。因为我打算做成 XBMC 插件。(仿照 https://github.com/Syndim/XBMC-Bilibili 目前这货用的是修改过的 niconvert 引擎) 话说我已经先你一步,完整实现了高级弹幕功能了哟。只可惜还有一个bug,就是Y轴旋转的问题。Flash的旋转貌似和ASS的旋转坐标不同。我数学不够好,要是能一起研究就好了。

m13253 commented 10 years ago

于是新版还是没有导入本地弹幕功能…… #10

m13253 commented 10 years ago

@m13253 我也看过你的博客,觉得你用那张演示截图效果不错,我也弄了一张,希望你不要介意。

我那个截图使用的是第一版碰撞算法,不仅低效而且效果不好。 我后来修改了碰撞算法。现在用的第三版碰撞算法,过两天重新截图。