m13253 / BiliDan

Play videos on Bilibili.com with MPV and Danmaku2ASS
http://m13253.blogspot.com/2014/06/watch-bilibili-with-biligrab-danmaku2ass.html
Other
512 stars 69 forks source link

教练! 如何导出指定地址弹幕喵? 又或者说指定特定片源作为代替播放喵? #6

Closed ghost closed 9 years ago

ghost commented 10 years ago

顺便吐槽看完动漫删除临时ASS设定喵.

m13253 commented 10 years ago

导出弹幕的功能很多软件都有了, 比如 BiliPlus 网站, 和 You-Get 命令行程序(有一个 bug 可以利用,就是用 -u / --url 参数可以仅抓弹幕) 还有我记得原版 Biligrab(作者是 cnbeining)也是可以抓弹幕的。 因为 bilidan 大部分处理都是在内存中进行的,所以 XML 弹幕是找不到的。 如何找呢?加上 -v / --verbose 有惊喜:

INFO: Loading comments...
DEBUG: Fetch: http://comment.bilibili.com/469970.xml <-- 弹幕 XML 地址
INFO: Invoking Danmaku2ASS, converting to /tmp/tmp-danmaku2ass-247i8t_v.ass

指定特定片源作为代替播放:用原版 Danmaku2ASS 喵。

如果你觉得上面的方案不满意,请提出改进意见喵~

m13253 commented 10 years ago

[OT] 我刚刚更新了 bilidan,降低了弹幕速度(主要为了匹配新版播放器)。请测试。

ghost commented 10 years ago

喵喵喵喵! 所以说喵! Danmaku2ASS没有神喵输入指定Bilibili地址就能给猫猫带回来弹幕的功能喵!

m13253 commented 10 years ago

喵喵喵喵! 所以说喵! Danmaku2ASS没有神喵输入指定Bilibili地址就能给猫猫带回来弹幕的功能喵

Danmaku2ASS 应该是不接受 URL 地址的,因为 ASS 的生成和视频长宽比有关,所以只有 Biligrab 这边处理好了喂给 Danmaku2ASS。 你的想法是不是在本地有高清片源,想配合 B 站弹幕观看? 我今晚试着增加一个「片源」选项吧。

ghost commented 10 years ago

教练! 这里有一份栗子! http://pan.baidu.com/s/1gdelfbH 密码 3j8l 这个文件是个zip压缩文件,如何使用片源选项直接从这个下载地址把里面的动漫播放出来喵?

虽然不用片源选项也有其他办法做喵... 这是办法之一: -> 执行python bilidan.py --hd http://www.bilibili.com/video/av1656906/ -> 定格播放器 -> 复制/tmp/XXXXX.ass 到/tmp/a.ass -> 使用Chrome/Chromium打开http://pan.baidu.com/s/1gdelfbH -> 按下F12之后点击"下载"之后,取消. 然后寻找"百度网盘直接下载地址" -> curl "百度网盘直接下载地址" | funzip - | mpv --sub-file /tmp/a.ass -

另外如果这个压缩文件是RAR格式的喵~ -> curl "百度网盘直接下载地址" | unrar p -inul - | mpv --sub-file /tmp/a.ass - 大概就成了这个样子了喵~ 这也是猫猫日常生活中生活方法之一喵~ /w\

EDIT: 喵... 如果 curl管道方法不行的话喵~ 从F12菜单那里右键百度网盘下载地址,寻找Copy as curl喵 然后执行 curl 'http://nb.baidupcs.com/file/ce02f206034066e98a87894120693cc0?bkt=p2-nb-828&fid=3006184855-250528-338714172642160&time=1414396891&sign=FDTAXERB-DCb740ccc5511e5e8fedcff06b081203-cS2gpUVFl8b%2BGP6HJRpMXjSIIYs%3D&to=nbb&fm=Nin,B,T,t&newver=1&newfm=1&flow_ver=3&expires=8h&rt=sh&r=215051382&mlogid=3919783246&vuk=2953353685&vbdid=1980312751&ifn=%5BScarlet%40TSDM%5D%5BKTXP%5D%5BAkame%20ga%20Kill%21%5D%5B17%5D%5BGB%5D%5B720P%5D.rar&fn=%5BScarlet%40TSDM%5D%5BKTXP%5D%5BAkame%20ga%20Kill%21%5D%5B17%5D%5BGB%5D%5B720P%5D.rar' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip,deflate,sdch' -H 'Accept-Language: zh-CN,zh;q=0.8,en;q=0.6' -H 'User-Agent: Mozilla/5.0 (X11; Linux x8664) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/_;q=0.8' -H 'Referer: http://pan.baidu.com/share/link?shareid=1666407199&uk=3006184855' -H 'Connection: keep-alive' -H 'Cache-Control: no-cache' --compressed > a.rar 之后unrar p -inul a.rar | mpv --sub-file /tmp/a.ass - 这样子的喵~

m13253 commented 10 years ago

--media 参数可以指定为本地文件,也可以是远程 URL。 但是必须是 mpv 可以识别的文件格式。也就是说 rar 不解压是不可以的。

使用管道是不行的,因为 bilidan 会处理视频文件至少两次来获得分辨率信息。

但是你可以一边下载一边解压一边用 --media 功能来看它。

P.S. 度盘下载链接是不检查 Cookies 的,所以如果你的视频在度盘不是被 rar 压缩的状态,可以把「百度网盘直接下载地址」直接喂给 --media 哦喵。

ghost commented 10 years ago

喵喵喵喵! 使用管道bilidan就能一次处理了喵!

m13253 commented 10 years ago

喵喵喵喵! 使用管道bilidan就能一次处理了喵!

我说了 bilidan 必须处理视频两次,第一次是获取分辨率信息、色域信息和其他一些生成弹幕必须的信息,第二次是正式播放。

所以就不能用管道了。

ghost commented 10 years ago

这跟用不了管道有什么关系喵?

m13253 commented 10 years ago

这跟用不了管道有什么关系喵?

curl xxx.mp4 | mpv -

像上面那样的话,不管你是喂给 mpv 还是喂给 bilidan。 管道意味着只能按顺序读取。 你连快退都不能用。 更别说处理两遍了。

所以建议你下载它。 下载一半的时候把文件名喂给 bilidan 边下边看就好了喵。

ghost commented 10 years ago

@m13253 为何不用"缓存"喵?

m13253 commented 10 years ago

@m13253 为何不用"缓存"喵?

你自己下载之不就是缓存了…… 而且 mpv 的缓存功能很坑很坑。 0.6 新版改得好用了一点。 但是依然很坑 所以别对缓存抱期望。

因为 Linux 没有文件占用的问题。 所以你用浏览器下载了一半的文件也是可以播放的。 这不就是当年所谓的「边下边播」咩?

ghost commented 10 years ago

猫猫没听过当年有这种东西喵... 但是现在的一堆使用电脑的都还不知道这种方法看视频这是无可置疑的喵! 还有bilidan自己处理缓存问题不就好了喵?

EDIT: 那样会把bilidan变得复杂,当猫猫没说过喵

EDIT2: 说起来为何要使用猫猫都不知道的mpv喵?

m13253 commented 10 years ago

还有bilidan自己处理缓存问题不就好了喵?

如果你能在1000行代码内实现它的话。

ghost commented 10 years ago

那猫猫告诉你一个思路就是了喵. 把视频链接下载下来喵,同时bilidan无延迟处理视频2次喵 这也就是猫猫想说的喵! 为何bilidan处理视频2次,还有间隔延迟喵?

EDIT: 最好能在内存中处理喵

m13253 commented 10 years ago

那猫猫告诉你一个思路就是了喵. 把视频链接下载下来喵,同时bilidan无延迟处理视频2次喵 这也就是猫猫想说的喵! 为何bilidan处理视频2次,还有间隔延迟喵?

还是那句话,我觉得我的能力实现不了。 如果你有这样的能力,并且有时间和精力, 欢迎改进并发 pull request。

偶也是没办法喵~

ghost commented 10 years ago

image

m13253 commented 10 years ago

┐(´∀`)┌ヤレヤレ :tired_face:

m13253 commented 10 years ago

这个功能我会加入 TODO list 的。 因为我自己也有这个需求喵。 度盘里有视频,想配合 B 站弹幕看。 但是难度实在有点大。 所以先委屈一下喵喵咯。

ghost commented 10 years ago

喵. @m13253 说起来你对Rust语言有兴趣喵?

m13253 commented 10 years ago

说起来你对Rust语言有兴趣喵?

看过一点。对 Rust 的对象所有权的概念非常抵制。这是要把所有对象都上 std::unique_ptr 的节奏嘛……

ghost commented 10 years ago

qq 20141028004459 虽然不知道为何你这么抵制喵.... 但猫猫觉得用着还好喵~ 至少远离了Segment Fault喵...

m13253 commented 10 years ago

虽然不知道为何你这么抵制喵.... 但猫猫觉得用着还好喵~ 至少远离了Segment Fault喵...

因为我觉得 GC (Garbage Collector) 和 ARC (Automatic Reference Count) 才是王道。

ghost commented 10 years ago

喵? GC已经被大神喷的很惨了喵? GC不是比不过RAII喵?

ghost commented 10 years ago

那群avplayer.org大神喵/w\

ghost commented 10 years ago

QAQ 突然想起结果猫猫今天到头来猫猫也没玩上"女王万岁"这款游戏喵... 猫猫还有一些事情要做了喵!

ghost commented 10 years ago

喵呼呼,猫猫突然发现你是肾果党喵/w\ 为何说是肾果党,GC与ARC技术让猫猫联想到的说喵

ghost commented 10 years ago

这不对喵! 起码你给猫猫做个导出字幕功能喵喵喵喵! @m13253 (看番中的猫猫)

m13253 commented 10 years ago

这不对喵! 起码你给猫猫做个导出字幕功能喵喵喵喵!

还记得我说过 ASS 字幕和视频分辨率有影响吗? 有可能会出现文字定位不准或者弹幕移动到一半突然消失的问题(早期我为了修复这个问题付出多少努力) (极端情况下,)高清片源配低清字幕会出现偏色,当然要眼睛机灵一点。 所以参数必须要配合视频来生成。

也许你会追问我就算这样做一个导出字幕的功能不行吗? 我的回答是,从你启动 bilidan 开始的整个流程如下:分析视频链接、获取视频信息、获取视频地址、下载一小部分并预分析视频生成参数、下载弹幕 XML、分析弹幕 XML、写入弹幕 ASS、启动播放器、清理垃圾。 就算只是导出字幕也要经历以上这些步骤,除了不启动播放器。 所以既然上面一堆步骤都执行过了,做一个导出字幕的功能实在不值。

至于 ASS 临时文件,我是用 Python 的 NamedTemporaryFile 自动生成的。我无法也不想控制它的生与死,不控制它生成在什么目录下、有什么文件名,也不控制它什么时候被自动清理掉。

ghost commented 10 years ago

呜... 喵!

cnbeining commented 9 years ago

@mindcat

啊。

这个需求其实我在上游写过了: 对于只导出弹幕,https://github.com/cnbeining/Biligrab/blob/master/biligrablite.py

对于弹幕播放,https://github.com/cnbeining/ABPlayerHTML5-Py--nix 和https://github.com/cnbeining/Mukioplayer-Py-Mac 两个都可以用,都很稳定。

ASS嘛,最新的Biligrab 0.95已经支持导出了,虽然还比较简陋。

Biligrab的初始目标就是下载弹幕文件,所以不会删除XML或ASS(也不会提供删除选项)。

究其原因是,Biligrab和danmaku2ass的目标不同:BIligrab是为两个播放器服务的,本项目是为mpv服务的。这造成了所有的drama。例如,Biligrab会等所有的桌面版文件concatenate后再操作,这个项目会一边下移动版文件一边操作。

没有好坏之分,看你的使用场景了。

m13253 commented 9 years ago

@mindcat

@cnbeining 在上面说得很对,几个项目的使用场景是完全不同的。 这个东西的作用很像 you-get -p 或者 youtube-viewer 只是用来观看的,并非用来收藏或者下载。

我一心不想加某些功能的原因是,加上它就成了另外一个软件了,倒不如直接去用另外的软件。当然可以 fork 它来创造另一个软件咯。 也就是说,你要的仅下载弹幕并转换的功能,可以使用 BiligrabLite 和下面最后介绍的 niconvert。

另外, @cnbeining 说「下载移动版文件」是不对的哦。我这里下载的也是桌面版,片源和网页播放器几乎一致的,也支持高清模式。


最后补充,几个项目名字有点奇怪,如果弄不太清楚我来解释一下: Biligrab —— 作者 cnBeining,用来下载视频和弹幕 Danmaku2ASS —— 作者我,用来转换下载好的弹幕到 ASS Biligrab-Danmaku2ASS —— 作者我,是上面两货的桥梁,其中我改造和重写了 Biligrab 的一些功能 BiligrabLite —— 作者 cnBeining,用来下载弹幕,不下载视频 ABPlayerHTML5 —— 作者 Jabbany,用来在浏览器里使用 HTML5 观看视频和弹幕,只支持 MP4 片源(往往低清) ABPlayerHTML5-Py-Mac —— 作者 cnBeining,用来在 OS X 上下载视频、弹幕、转换格式并调用浏览器 HTML5 观看视频和弹幕,不过可惜边下边看的功能支持有困难 MukioPlayer-Py-Mac —— 作者 cnBeining,用来在 OS X 上下载视频、弹幕并调用浏览器 Flash Player 观看视频和弹幕,对于片源和高级弹幕支持好一点 还有 niconvert —— 和 Danmaku2ASS 干同样的事,但是还原度奇低(尤其是神弹幕没法看),不过有一个 GUI 可以下载弹幕,如果你是 GUI 党可以考虑

ghost commented 9 years ago

image