脚本:批量remux媒体(特别是MP4,flv等)文件

小丸因为稳定原因不提供这个功能,我们自己写一个。
请注意,对于多轨道文件,不保证正确或成功。
请自行确认目标格式是否可以封装原数据流。
老规矩,MIT协议。随便抱走,文件坏了不负责。
基于python3写的。
 
用法:
python3 ***.py

#!/usr/bin/env python
#coding:utf-8
# Author:  Beining@ACICFG Tech Team
# Purpose: Batch convert media file type with ffmpeg.
# Created: 03/07/14
# MIT License
import os
import glob
print('''
-----------------------------------------
 Batch convert mediafile type with remux
                V 0.01
            Beining@ACICFG
          www.cnbeining.com
-----------------------------------------
''')
ffmpeg_location = input("Type the real location of ffmpeg. If left blank, I will use the default one under /usr/bin/.\nMake sure you use the latest version of ffmpeg.")
if ffmpeg_location == '':
    ffmpeg_location = 'ffmpeg'
format_from = str(input('Type the format you want to convert from, without ".":'))
format_to = str(input('Type the format you want to convert to, without ".":'))
if_delete_original = int(input("Type 0 for not deleting original file(s), 1 for delete."))
info=os.getcwd()
print('My working folder is '+str(info))
file_to_convert_type = '*.'+format_from
file_list =  glob.glob(file_to_convert_type)
print('Files to be remuxed:')
for filename in file_list:
    print(filename+'\n')
total_file_number = str(len(file_list))
print('Total file number: '+total_file_number)
flag = 0
for filename in file_list:
    name = filename.split('.')
    real_name = name[0]
    print('Converting ' + str(flag+1) + ' of ' + total_file_number + ' files...')
    os.system(ffmpeg_location + ' -i ' + filename + ' -c:a copy -c:v copy ' + real_name + '.'+format_to)
    if if_delete_original == 1:
        try:
            os.remove(filename)
            pass
        except:
            print('Cannot delete ' + str(filename) + ' ! Do it by yourself...')
            pass

 

对于sina的新后黑策略的详细分析(最近更新:Apr.15.2014 Linux与OSX原生战渣浪方法)

看页面右边,真的不考虑捐助我们一下吗?→
 
 
 
 
弄了各种排列组合。
虽然我们不指望后黑吃饭,但是我们指望后黑改MD5。
我们的在线视从来都小于1K码率,但是有时过不了审核。
这时我们就后黑换个MD5冲过去。
但是目前来看,效果不好?
在小丸和一帮人的怂恿下,做一些实验。
这时就看出VPS的好处了。。。上传哗哗的。
Linux下,wine解决软件问题。
请注意:需要装dotnetfx20  & vcrun2005,否则新的FlvBugger在wine下直接挂。
-----未测试----

转载:过sina另一方法:中黑法


中黑法。
-------------------

--------------推荐:新后黑----------

Balthasar版Flvbugger:http://pan.baidu.com/s/1o65AEds

巨大后黑成功。
1.3G巨大文件极端测试,内存占用没有明显变化。
作者升级:超大文件后黑测试通过。
同时推荐:
小丸工具箱 http://maruko.appinn.me/
自带后黑,原理同手工压制方法。测试有效。
Linux与OSX的原生方法:http://www.cnbeining.com/2014/04/under-linux-and-osx-native-slag/
-----老办法的测试结果------
视频源:码率14M,肯定二压的货。文件45M左右。
存活要求:不转码失败。不过审那是你自己的问题。
Failed代表直接显示“转码失败”。
所有测试都经过复测。包括Failed,都多次复现。
处理后,文件都符合正常sina不二压标准。
结果:
SinaHigh:
前黑:Failed
后黑:Failed
倍速:我都不知道是多少倍速了。http://you.video.sina.com.cn/b/127526545-2716128137.html
http://you.video.sina.com.cn/b/127529264-2716128137.html
FlvBugger:
前黑:420sec http://you.video.sina.com.cn/b/127526860-2716128137.html
http://video.sina.com.cn/v/b/127532571-2716128137.html
后黑:这个原视频码率960+。
微小后黑,900,可行:http://you.video.sina.com.cn/b/127596815-2716128137.html
800,可行:http://you.video.sina.com.cn/b/127607796-2716128137.html
倍速:3X http://video.sina.com.cn/v/b/127528780-2716128137.html
2X http://you.video.sina.com.cn/b/127532041-2716128137.html

----------------

-----------其他手工后黑办法---------------
1..另外也可以考虑VFR
以下3个办法不再推荐,小丸自带功能,直接用最新版小丸工具箱,原理一样
2.这里给一个压制的解决办法,未测试:
875259a8gw1ee4vi4ivr9j20gu07ejta
 
3.再写一个蛋疼的AVS法:
小丸,直接加载这个AVS:
BlankClip(length=20000,width=1280,height=720,fps=29.970,color=$000000)
ConvertToYV12()
长度:自己按计算器,总码率小于1K
视频长宽,fps:自己Mediainfo之
做出这个视频。
然后,要么用这里的东西:
https://github.com/soimort/you-get/tree/develop/src/you_get/processor
要么ffmpeg的concat方法(参考Biligrab的代码),合并视频。月亮flv合并是个简单东西。
这就可以手动后黑了。
4.如果愿意使用,各种非编软件都可以。
------------------------------
-----------结论------------
(如果中黑对劲,那么这个结论就变了)
后黑原版Flvbugger可以微小用,SinaHigh后黑直接死,Balthasar版Flvbugger可以用。
前黑可以用,但是会造成移动端损坏。而且只有FlvBugger的可以用。
倍速可以用。
新版小丸可以用。
 
蛋疼的问题。以后大家很可能要忍受前黑或倍速了。
不是我们不想弄好,而是我们不能保证我们的正常文件能过审,所以必须弄备份以保证发片速度。一旦不过审,这个文件就废了:再次上传,秒拒。
希望移动端在我们不能使用正常文件投稿的时候,直接在论坛下载我们的小版本文件。这是最稳妥的办法。歪门邪道在这里:https://forum.chineseaci.com/t-240
转载注明ACI字幕组技术部 Beining。

B站的海外与国内加速分析(Update:Mar.6.2014)

UPDATE Mar.6:
67.159.54.58
us-chicago.acgvideo.com
芝加哥FDC。
 
 
一直没时间好好看。
本来应该拆swf,但是懒了。直接写。
就今天的结果来看:

http://nl-amsterdam.acgvideo.com/
机房为FDCserver的阿姆斯特丹Cogent机房。
俄罗斯加拿大东部解析到此处。
暂时没有发现更多地址。

最后扔个地址:
http://interface.bilibili.cn/v_cdn_play?cid=*** B站自己源的服务器
http://interface.bilibili.tv/playurl?cid= B站真实源的服务器
 

滚回EC2

      3 Comments on 滚回EC2

新机器的网速太慢,100M都跑不满。IO残次,只有35.
暂时滚回EC2,下一步祸害DO吧。
便宜没好货。

再次搬家,终于有自己的落脚点了

      2 Comments on 再次搬家,终于有自己的落脚点了

再次搬家完毕。感谢@sunday的协助。
总体算是特别顺利。
1.入个新VPS:
IO和网速都不是特别满意,但是也不贵。KVM架构,这下做东西放心了。
LNMP准备好。
2.提前变解析:
老站点和新站点必须都有直接解析,否则过一会要出乱子。这次差点传不上文件,幸亏老站点有IP直接连接。
3.打包资料:
虽然站点有每日+每周备份,还是要小心。
VPS直接shell进去,打包所有文件,扔在根目录下。等一会远程拖过去。
sql直接打包,PMA就成。
最惨,WP还提供导出功能。
4.远程拖:
文件大肯定麻烦。
5.导入数据库,建立vhost,做好rewrite。
建立账号,数据库连接检查。
6.更改权限,该加组的加组。
7.改回CDN。
 
完活。

2014年最新Acfun、Bilibili Sina源解析策略,加历史解析策略

逼我哈。
 
Sina源的解析变迁:
最开始:10年~12年,Sina与弹幕站闹翻前
http://v.iask.com/v_play.php?vid=XXXXX
(某些老视频还可以用,应该是11*******系列和之前都能用)
然后,Sina闹翻了,加限制:
API法:
http://platform.sina.com.cn/playurl/t_play?app_key=1917945218&vid={vid}&dtime={Linux_Time_Stamp}
普通法:
http://v.iask.com/v_play.php?vid={vid}“&dtime={Linux_Time_Stamp}
 
然后,又一次闹翻了,233.
Sina开始检查referer。
弹幕站开始用HTTPS,因为HTTPS到HTTP不发referer,所以逃过这个限制。
 
AB两站各有自己的解决办法。
 
B站:
http://interface.bilibili.tv/playurl?cid=
cid扔进去,齐活。
 
A站:API:
http://sex.acfun.tv/Home/Sina?app_key=****&vid={vid}
app_key不变。
 
Sina一怒之下,加密。
http://v.iask.com/v_play.php?vid=" + request.Id + "&ran=" + ran + "&p=i&k=" + key;
解析策略先不写。
 
但是A站貌似也没好好弄API。
2014年元旦,A站的API直接没了。
 
现在A站:
用2DL的API。(是不是有一腿?)
http://2dland.acfun.tv/video.php?action=xml&type=xina&vid={vid}&key={MD5_Lower_32}&ti=3
http://2dland.sinaapp.com/video.php?action=xml&type=xina&vid={vid}&key={MD5_Lower_32}&ti=3
 
vid大家都知道了。
这个Key的生成办法是:md5(vid+’footstone’)到32位小写。
ti可加可不加。
 
笑看争斗啊。23333.
转载注明ACI字幕组Beining。

内部文件:对服务器做迅雷离线的警告

给各位考虑用VPS或者空间使用HTTP或FTP方式喂迅雷离线的提醒:
离线服务器下载完成后 迅雷离线会将你的文件加入备选URL列表供下载。这可能造成极大的未期望带宽。
我们给个例子:
约30小时前,我们上传了两个媒体文件,加起来1G。
30小时后,我们检查cPanel的时候,发现了302G的流量。这些文件的直接下载地址从未公布,唯一的可能是迅雷的用户在抓。
我们考虑,有可能是cPanel对限制使用的文件名使用白名单,造成虽然动态和html等静态文件不能使用,一些媒体文件、图片文件等却可以突破限制,造成极大的损失。
如果需要进行此类操作,请考虑
1)反盗链设置:仅允许迅雷抓取
2)及时删除或更名文件;
3)对流量和速度进行限制
4)对流量进行实时监控与报警
的一种或多种。
 
Thunder

一些简单的论坛往来

      No Comments on 一些简单的论坛往来

被吞了233,直接开主题贴再发一遍。。。
这是一个有关于BiliLoca以及一些在Linux实现Bilibili本地化的讨论帖(真爱电脑,远离Adobe Flash) @AncientLysine
也希望其他吧友能够给出一些意见,谢谢
(首先感动。。。这年头给Linux编方便程序的人不多了。。。好评!!!谢大神)
在您给出的GitHub里,愣是没找到编译方法。。。难道是我太弱。。。求如何编译,Linux x64 Ubuntu/Fedora/Mint/Porteus/...,难道不是用make?没看见makefile啊。。。求指点
还有我一看scr目录瞬间觉得这个程序好复杂。。。个人觉得是不是不用这么复杂。。。至少在Linux下可以用更简单的方法。。。(以下纯属个人意见):
-------------------------------------
首先解析可以用Flvcd解析,然后之间处理Flvcd解析完成的HTML的代码找里面的视屏地址
然后下载可以用Axel进行,一个命令多线下载,我一般用 -n5 5线程
至于弹幕下载可以用 “http://blog.sina.com.cn/s/blog_58c506600100utap.html” 给出的方法,随便试了一下貌似可行,wget就行了,这个不用多线下
然后播放可以用MPlayer进行,自带Ass等弹幕(明明是字幕)功能
(这里就有问题了,貌似MPlayer不支持XML弹幕,求大神能不能直接告诉我怎么转成Ass之类的方法,在源码里翻了半天各种看不懂...,谢谢!)
(B站没了弹幕真是一点也不欢乐,求转换方法。。。这样就能在我下方的Bash Script里加弹幕功能了)
-------------------------------------
于是乎我有一个自己变得Bash Script专门来集成这中间所有的过程(除了没有弹幕)
#!/bin/bash
case $1 in d)m="echo mplayer -fs";shift;;p)mplayer -fs `ls`;exit;;a)m="$2";shift 2;;*)m="mplayer -fs";;esac;n=0;for t in $@; do if [ ${#t} -gt 6 ];then C=1;N=${t:6:4};t=${t:0:6};while [ $N -gt $C ];do d+='http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$t'%2Findex_'$C'.html&sbt=%BF%AA%CA%BCGO%21 ';let C+=1;done;else d+='http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$t'%2F ';fi;done;for t in $d;do wget $t -OB&>/dev/null;N=`sed -n '/br>/,/br>/p' B|tr '"' '\n'|grep p:|grep -v '>'|sed '$d'`;for C in $N;do axel -n8 -o$n $C&>/dev/null&if [ $n = 0 ];then p=$!;fi;let n+=1;done;done;(while [ $n != 0 ];do n=`ps|grep axel|wc -l`;echo -en "\033[s\033[1;78f$n\033[u";done)&N=0;while [ $n -gt $N ];do m+=" $N";let N+=1;done;wait $p;$m
-------------------------------------
有点乱,好吧我整理一下
#!/bin/bash
case $1 in #处理不同的模式
d) #Download模式,只下载不播放,最后会输出用于播放的命令
m="echo mplayer -fs";
shift;;
p) #Play模式,用于播放“Download”下载的视频,不过最好还是直接用Download给出的命令
mplayer -fs `ls`;
exit;;
a) #ABC模式,自己来写播放命令,例如写 "mplayer" 会不全屏的播放(默认全屏),“mplayer -fs”和没写模式没区别
m="$2";
shift 2;;
*) #没认出来什么模式,视为没写模式
m="mplayer -fs";;
esac; #到此模式部分处理完成
n=0; #初始化计数器
for t in $@; #对所有Argument(av号+(p数+1))进行For循环, 得到所有下载地址
do if [ ${#t} -gt 6 ]; #如果是正常小于6位AV号那就不处理,否则的话就是写了(分P数+1)在后面(比如说总共2P就写3在后面如1234563)
then C=1;
N=${t:6:4};
t=${t:0:6};
while [ $N -gt $C ]; # 对每一个Part进行For循环
do d+='http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$t'%2Findex_'$C'.html&sbt=%BF%AA%CA%BCGO%21 ';
let C+=1;
done; #每一个Part的For循环完了
else d+='http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$t'%2F ';
fi;
done; #得到了所有的Part的地址
for t in $d; #开始解析所有视频
do wget $t -OB&>/dev/null;N=`sed -n '/br>/,/br>/p' B|tr '"' '\n'|grep p:|grep -v '>'|sed '$d'`; ##用FLVCD解析
for C in $N; #下载解析到的每一个Part的所有自动分P(6分钟)
do axel -n8 -o$n $C&>/dev/null& # 用 "&" 结尾来多线下载所有的P
if [ $n = 0 ];then p=$!;fi;let n+=1; #记录下第1个视频的第1个Part的第1个自动分P的下载进程的id
done;
done; #到这儿为止所有的P都开始下载了
(while [ $n != 0 ];do n=`ps|grep axel|wc -l`;echo -en "\033[s\033[1;78f$n\033[u";done)& #一个小插件在终端的右上角显示还有几个P没下完,0或什么都没有就是都下完了,这是你可以关无线网开关了
N=0;while [ $n -gt $N ];do m+=" $N";let N+=1;done;wait $p;$m #等第1个视频的第1个Part的第1个自动分P下完开始播放
-------------------------------------
顺便贴上使用方法: (这个script叫“B”,大写) B (d/p/a) (cmd@a) [avNum+(PCount+1)]
d: 在Download模式下只下载不播放,最后会给出播放整个视屏的命令
p: 在Play模式下只播放不下载,适用于当你错失D模式给出的命令时,这是你不用输入任何av号了,直接“B p”
a: 在ABC模式下可以自定义播放命令,例如输入"B a mplayer XXXXXX"可以用非全屏的方式关看,跟高级的功能请RTFSC(Read The F**king Source Code)
【avNum+(PCount+1)】:例如“av917506”有总共3个P,你想看所有的三个P,只需使用 “B 9175064” (7位数字,最后一个数字是3+1的意思)
-------------------------------------
至于播放时的快捷键,具体请“man mplayer”或“mplayer --help”。以下列举几个简单的快捷键
“ ”(空格),播放暂停
”(回车)”,放下一Part
“Esc,q”,退出播放
“9,0”,(左右小括号的位置),音量
”【,】“ (左右中括号),播放速度(可以三倍速播放哟...)
"o” (opq的o),开关屏显
“左右箭头”,快进快退
”f”,退出全屏
“。。。”(忘记了,键盘左上角部分):视频缩放
-------------------------------------
至于UI,我觉得Linux用户不至于水到没有UI就用不了,Linux用户也不需要特别的UI,就让它用命令行的方式会方便很多
至于弹幕屏蔽,我们可以使用正!则!表!达!式!(优越中。。。),这个在命令行下也是很容易直接实现的,只需要额外一个Filter就行了
至于发弹幕。。。这个,比较复杂,我们只考虑简单的问题。。。
这样写的话Dependency也少了很多,像我那种Live OS的Porteus,超迷你Linux的Puppy甚至没有X server的Linux(纯粹一黑屏命令行Linux)都可以正常使用(当前这个Linux版本我没有lib×××用不了)
(神马你不知道MPlayer可以通过直接渲染到/dev/fb0的fbdev来在没有X server的情况下照常运行?明明是一个命令行黑屏,可突然开始看B站了!)
(配合W3M,Lynx这些终网页端浏览器这个甚至可以做到没有X server上B站,看B站!《== 胡说!终端根本不能显示中文! 《== 不要在意那些细节。。。)
-------------------------------------
大神觉得这个怎么样,我是觉得挺省资源的,现在就差利用好MPlayer的字幕功能了,求XML to Ass方法!谢谢!
也希望其他吧友能给出回复!
-----------
 
同病相怜 把我的办法扔过来参考:
(以下全都是开源软件。。。)
http://www.cnbeining.com/?p=330
自卖自夸。
Biligrab(呃,我这人不大会起名。。。),弹幕和视频都能下载,自动合并,封装成MP4。(为啥要MP4?因为我还有个别的东西。。。)
流程简单,参考了ACDown、Bilibili助手等的代码:
尝试API获取cid和视频名称、分P名称等信息(如失败,抓网页找cid,再没有我也没辙了,aid猜cid这办法太神棍了)-API抓下载地址(如失败,抓flvcd找下载地址,再没有我也没辙了,因为不知道vid,所以不能用A站的科技)-写个list,aria2c 16线程下载-写个文件,ffmpeg concate,封装MP4,收工。
然后就是两个咱封装的播放项目:
https://github.com/superwbd/Mukioplayer-Py-Mac
(Flash实现,明白了吧)
https://github.com/superwbd/ABPlayerHTML5-Py--nix
(HTML5实现,跑起来不错,但是不能跑的时候还是需要Mukioplayer接手)
readme写的明白,不多说了。等研究明白了再看看能不能实现AcPlay,因为复杂程度增加很多。。
XML2ASS?
两个实现:
https://danmu2ass.codeplex.com/
.NET的
https://github.com/muzuiget/niconvert
Python的
具体不了解了,因为没有这个需求。。。
嘛还需要啥呢?
需要更多的开发者吧。。。这圈子真够小的。。。
 
--------

好的我们折腾了半天成功的把一个高级的XML文件打成了最低级的SRT格式,哈哈哈哈哈哈。。。现在终于能看弹幕啦!
附上Bash Script:
chromium-browser http://comment.bilibili.tv/`wget http://www.bilibili.tv/video/av$1 -O-|gzip -cd|tr , '\n'|tr '&' '\n'|grep cid|sed 's:[^0-9]::g'`.xml&mousepad S&n=0;for t in `wget 'http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$1%2F -O-|sed -n '/br>/,/br>/p'|tr '"' '\n'|grep p:|grep -v '>'|sed '$d'`;do axel -n5 -o$n $t&let n+=1;done;sed 's:<d p="' S|sort -n>s;T=(`sed 's:\([0-9]*\).*:\1:' s`);C=(`tr '<' '\n'<s|tr '>' '\n'|grep -P '[\x80-\xFF]'`);x=-1;c=0;b=0;t=0;l=`mplayer -novideo -ao null -frames 0 -identify 0|grep ttimestamp:|sed s:[^0-9]::g`;for((i=0;i<${#T[@]};i++));do let n=${T[$i]}-$b;if [ $n -gt $l ];then let b+=$l;let t+=1;c=0;x=-1;n=0;l=`mplayer -novideo -ao null -frames 0 -identify $t|grep ttimestamp:|sed s:[^0-9]::g`;fi;if [ $n -gt $x ];then echo>>$t.srt;x=$n;echo $c>>$t.srt;let ta=$x/3600;let tb=$x%3600/60;let tc=$x%60;echo -n "$ta:$tb:$tc,000-->">>$t.srt;let tc+=2;echo $ta:$tb:$tc,000>>$t.srt;let c+=1;fi;echo ${C[$i]}>>$t.srt;done;mplayer -subcp utf-8 -font 'WenQuanYi Micro Hei' -subfont-text-scale 2 `ls|sort -n`;
神马?太乱了?好吧,我就来解释一遍(再过2小时就是起床时间了,,,)
chromium-browser http://comment.bilibili.tv/`wget http://www.bilibili.tv/video/av$1 -O-|gzip -cd|tr , '\n'|tr '&' '\n'|grep cid|sed 's:[^0-9]::g'`.xml&
mousepad S&
n=0
for t in `wget 'http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$1%2F -O-|sed -n '/br>/,/br>/p'|tr '"' '\n'|grep p:|grep -v '>'|sed '$d'`;do axel -n5 -o$n $t&let n+=1;done;
sed 's:<d p="' S|sort -n>s;
T=(`sed 's:\([0-9]*\).*:\1:' s`);
C=(`tr '<' '\n'<s|tr '>' '\n'|grep -P '[\x80-\xFF]'`);
x=-1;
c=0;
b=0;
t=0;
l=`mplayer -novideo -ao null -frames 0 -identify 0|grep ttimestamp:|sed s:[^0-9]::g`;
for((i=0;i<${#T[@]};i++));do let n=${T[$i]}-$b;if [ $n -gt $l ];then let b+=$l;let t+=1;c=0;x=-1;n=0;l=`mplayer -novideo -ao null -frames 0 -identify $t|grep ttimestamp:|sed s:[^0-9]::g`;fi;if [ $n -gt $x ];then echo>>$t.srt;x=$n;echo $c>>$t.srt;let ta=$x/3600;let tb=$x%3600/60;let tc=$x%60;echo -n "$ta:$tb:$tc,000-->">>$t.srt;let tc+=2;echo $ta:$tb:$tc,000>>$t.srt;let c+=1;fi;echo ${C[$i]}>>$t.srt;done;
mplayer -subcp utf-8 -font 'WenQuanYi Micro Hei' -subfont-text-scale 2 `ls|sort -n`;
(我会告诉我懒得解释了吗?)
那么就这样了。。。算了还是说一下那坨最长的吧,我主要做的就是在提取XML文件中的时间和弹幕内容后(其余数据忽略),跟据分P长度来吧完整的弹幕文件分配补偿给每个分P,把所有集中在一秒内的弹幕和并在一起(不同行)写到字幕文件里去。每个弹幕出现至少1秒至多2秒
发现弹幕不正常?好的恭喜你你必须修改那个 'WenQuanYi Micro Hei' 成你电脑了有的”中文“字体。。。
最后的”2“是字体大小,大约是整数吧。。。

 
 
@ZisIsNotZis
容我挨个具体说明一下。
----------------
1。这个是我目前面临的问题,为什么我用wget下载下来的XML文件都是乱码。。。(地址绝对没错),而用Chromium输入那个地址就能得到文字内容呢。。。我也没看见您用特别的方式处理XML文件,这让我很费解。。。
gzip压缩惹的祸。一开始我也没想到这点,然后也是乱码。
看第77行:
os.system('curl -o "'+filename+'.xml" --compressed http://comment.bilibili.tv/'+cid+'.xml')
--compressed:解开gzip压缩。之前想手工转换,后来发现还不如这么傻瓜化解决呢。
---------------
2。 第二个问题还是关于XML的。。。(问题这么多)我貌似没看见有对XML文件的特殊处理,那个文件是不是到输出“xml should be ready”那边的时候就已经处理完了?那那个弹幕是怎么播放的呢?播放器直接支持?还是什么其他的
是又不是。。。看你如何定义“处理”了。实际上,对原始文件数据,我唯一的处理是gzip解压,之后不做其他处理。弹幕播放用我上面提到的软件(我自己封装的那2个)。直接支持,因为这些就是专门的弹幕播放器。
---------------
3。 因为不知道ffmepg是干嘛的,我最后一部分基本上没看懂。。。这个文件到底是被播放了呢,还是被下载了呢?那些弹幕有没有被播放呢,还是说就是下载了,还是内嵌进去了(这个狠)?
129行:
os.system('ffmpeg -f concat -i ff.txt -c copy "'+filename+'".mp4')
请看一下ffmpeg文档关于Concat的用法。Concat是直接连接文件,不重新转码。(恩,我一直准备把ffmpeg的文档整个翻译了,但是自己做起来太累,只能一点点弄。。。https://github.com/superwbd/ffmpeg-all-translate 如果谁有兴趣,随时fork跑然后发pull request啊。)
Biligrab只起到下载作用。播放是播放软件做的,虽然我在写Biligrab的时候考虑到为后面的播放打基础。
--------------
顺便吐槽几句。。。吐槽1:目前我那个程序的下载弹幕部分因为问题1的问题的解决方法是:让Chrome打开那个XML页面,打开一个Mousepad/Leafpad之类的,然后让用户复制黏贴进去。。。
无论是curl,还是wget,都有解压的选项。只不过考虑到有些机器可能没有wget(OSX你懂的。。。这毕竟不是真linux),所以变成了curl。
-------------
吐槽2:关于您上面说的“hope it never happens”,我觉得直接用FLVCD就行了呀,既然有这么方便的工具,为什么还要自己想办法解析呢。。。又要随着时间更新,又要处理其他网站播放器的问题什么的我个人是觉得太麻烦了啦,毕竟Unix的系统的相当大一个奥义就是“一环套一环”啊(FIFO,PIPE,虚拟文件系统,接口,stdin/out神马的)。总之就是我觉得要尽量发挥FLVCD存在的价值,,,
Biligrab 0.1的时候,我直接用了FLVCD,根本不去考虑API。因为这个API怎么调用我死活看不懂。。。
之所以只作为备选:
1)这个是专门解析BIlibili的,所以我首选使用API,还可以起到一部分黑科技的效果。(详情见Bilibili助手的代码)
2)API给出的地址是随地理位置不同、网络环境不同而不同的。Bilibili有自己的CDN服务器,位置我已经找到2处了,在中国大陆。sina使用的CDN是蓝汛的,全球布站,但是不一定全球都缓存。因为咱人在加拿大,如果用FLVCD解析,由于FLVCD本身在大陆,基本解析的结果都是B站自己的CDN,速度会受到一定影响。如果是API,对于海外,就会给出sina的CDN,对速度帮助很大。(其实是因为去年光缆漏光导致我刚写好这东西就跑不起来了。。。于是只能又写一个)
3)速度快啊。API的返回肯定字数少啊。
FLVCD?如果有API,我还是会尽可能使用API的解析。因为我的速度考虑是海外的。。。
-------------
吐槽3:我总觉得这个程序的速度不给力,不够强劲。。。为什么呢,首先虽然弹幕下载部分和视频下载部分并不冲突,不需要有先后顺序之分,可以并行,然后每一个视屏的分P之间也不一定需要有严格的顺序。我的想法就是一起下,下的快,校园网带宽无限。。。有的时候我所有下载任务线程数能超过500个(每个6分钟8线程)
我首先说一点,咱不知道国内的校园网具体是什么样的,所有了解都是查资料得到的。。。
之所以不这么用,有几点考虑,我复现了,不知你是不是也遇到过:
1)我这里的校园网每天限制下行流量8G上行1G,如果连接数太多,恐怕会招致网管喝茶。。。虽然我平时做事情会挂上SSH,但是还是不想麻烦。
2)aria2c的下载是如此,容我再研究一下。
3)(重点)在特别极端情况下,我发现,蓝汛的CDN有时cache有问题,造成下载文件不完整。由于怀疑是反攻击策略,为了规避,暂时先这么用。
----------
最后是其实第一个视屏下完后就可以开始放了,其他的部分可以在放第一P的时候下完
由于我使用专门的弹幕播放器,这个是没法实现的。。。
--------
用下载而不是Stream的好处就是绝对不会有卡顿和6分钟诅咒之类的东西,进度条顺畅,想怎么跳OP怎么跳OP。不过带来的就是一丁点的准备时间。所有还是摇尽快开始播放。。。
嘛。。。因为我网速没什么压力,所以等几分钟也没什么障碍。。。
--------
我看着这个源码觉得Python编程好简单(但代码好长。。。)(大一,正好学Python),不过出于我有强迫症,我一般只会用2种语言:最直接,最方便,最短的Bash,和最快的C++。。。
同大一,只科班学过简单Python,所以就用它了。。。Bash还没学。。。
-------
算了再吐槽一句吧,”封装“这个词对我太深奥了。。。怎么世界上各种大触,太可怕,太可怕。无关的吐槽另一句:革命尚未成功,同志任需努力啊!我们总有一天会打败Windows的!(然后就是Linux和Mac互掐了?)
这是视频处理部分了,因为咱兼职压制君,所以这个也在研究。。。如果不准备做,这个坑不跳也罢。。。
Windows。。。无他,乱七八糟的事情太多,懒得弄了。
-------
我成功加入弹幕功能了!见此贴10楼。
可喜可贺~建议用ASS,但是这个咱就没有专门研究过了。。。因为不用。。。