查看: 30382|回复: 12
上一主题 下一主题 跳转到指定楼层

修复无法播放的acfun视频文件

25

主题

77

存在感

28

活跃日
 3 

SOS团新手

发帖: 411
SOS币: 4260
注册: 2009-08-28
访问: 2015-12-25

楼主
发表于 2010/05/29 | 编辑

猜你喜欢: acfun视频黑屏, Acfun, 360


原文请移步:

https://www.deleak.com/blog/2010/05/29/fix-acfun-video/

下边是直接copy过来的,图片不显示什么的请多担待,我设置了图片防盗链。

    *
      这是一篇迟到近3个月的文章……

(停!windows 用户以及急欲修复视频的用户请停止继续阅读,请直接使用chunqing286的修复工具进行修复。)

在今年3月时候,就有朋友跟我抱怨说mplayer不能播放下载回来的flv文件(原帖)。这让我这个mplayer控何情以堪?所以要来地址亲自尝试,结果不出所料,failed miserably…

    视频地址:
    http://bilibili.us/video/av4193/
    【MMD】这不是Miku 这是221大人(请点击播放按钮以播放视频)

    视频下载:http://tj5.dhot.v.iask.com/f/1/6cdea1d8cb42d852a36df96c01fff20128983640.flv

    *
      分析

视频大小34.1m,首先通过mediainfo分析视频信息:

看起来没有什么异常?但那是仔细算一下就会发先问题所在:

结果是31.8m,与文件体积相差约0.4m。

只有文件头被破坏或者修改才可能发生文件识别错误的情况。

用mplayer播放以下看看错误信息:

Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffflv] vfm: ffmpeg (FFmpeg Flash video)

Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 44100 Hz, 2 ch, s16le, 32.0 kbit/2.27% (ratio: 4000->176400)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)

可以看到,mplayer使用了libavcodec进行分离,并调用ffflv和mp3解码器进行播放。整个步骤基本无误,而出了前几帧外,后边则有近20k行的解码失败日志。(full ver.)

基本可以判断是flv文件被修改而导致播放器播放失败。

    *
      flv文件结构

接下来就是自习flv文件结构时间,资料(1,2,3,4,5)—— 必修课

    现在是深入了解变态编码时间:——选修课

    之所以会产生畸形视频,是因为很多视频网站只保留视频索引,而视频文件并非保存在本地服务器。例如acfun,bilibili,均调用新浪的视频进行播放。因为本地不能存储视频,所以视频上传到新浪时,新浪会对码率,分辨率过大的视频进行压缩以保证流畅播放。因为二次压缩会影响视频质量,所以很多人研究了很多方法(资料)以避免上传的视频被新浪压缩。但是因为视频文件被刻意修改,所以普通播放器不能播放。

    目前最为常见的是前黑法。(理论上应该叫文件头重塑法吧~)

综合播放器日志及对flv文件头的分析,判定其文件头被修改。

一般来说,他们都是通过这个前黑+月亮合并器进行修改的(工具内含有两个分辨率版本的一秒h263黑屏视频和一个垃圾合并器)。之所以说合并器垃圾呢,是因为真的要忍不住吐槽了……用这么粗鲁的方式合并flv我也是此生仅见。倒也不错,成就了n多畸形flv。

因为合并器合并后的视频是1s h263+ 真正视频主体,而真正的视频和那一秒的黑屏视频参数有差别,合并器并未转换视频流以使flv文件结构正确,反而只是修改文件头,必然导致播放器播放失败。

    *
      修复!

删除多余数据法:

既然知道了是使用一秒黑屏的h263修改文件头强制合并,那么把问题视频的一秒黑屏数据删除即可实现视频文件修复。

使用十六进制编辑器打开需要修改的flv文件和一秒黑屏的原文件(上文已经提供打包下载)。

请仔细观察上左图(源视频)和上右图(1s黑屏),选中部分内容相同。所以把源视频文件  09 00 00 06 2C 后的部分删除即可(参照flv文件结构去~)。至于说删多少呢,删除文件头部分和一秒黑屏的交集部分就可以了。

如上图所示,删除至此即可。修改完毕:

把修改后的文件另存为flv文件。(请不要覆盖原有文件!)

如图所示,视频文件已经可以正常播放了

文件头替换法:

既然已经知道文件头是被损坏,那么使用完好的文件头对无法播放的视频文件头进行替换,理论上可以实现对已经损坏的文件的修复。

    *
      linux下的修复程序:

http://code.google.com/p/xflvtool/

arch+gcc编译成功,使用时失败,大家可以参考下代码~(话说还是手工修复感觉更hacky哦~)

    *
      吐槽时刻:

非常抱歉,这里没有你们能看到的怨念吐槽。总之,对视频文件头等其他部分的破坏和任意修改,都是对访客,新浪,乃至于视频制作者的不尊重,希望你们能自重。ps:不要在喊渣浪这个词,新浪免费提供空间为你们储存这些畸形文件,实乃大度。如果全部rm掉,也是理所应当,不要再对任何事务怀有怨念,而是应该以感恩的心去用……

    *
      特别感谢:

chunqing286,一心月,zhu527812567, ryoohki

    *
      参考资料:

http://weiyuhu.javaeye.com/blog/570237

http://noahgenius.javaeye.com/blog/164782

http://blog.sina.com.cn/s/blog_48f93b530100eyoe.html

http://blog.sina.com.cn/s/blog_4a741176010005tp.html

http://www.2dland.cn /space.php?uid=24&do=blog&id=434(需注册)

http://www.5uflash.com/flashjiaocheng/Fmsjiaocheng/2351.html

linux快速入门教程+进阶手册

655

主题

2082

存在感

667

活跃日
喵~离线 有意栽花不如无心插柳
 9 

家中的荣誉团员

1楼
发表于 2010/05/29 | 编辑
http://acfun.chunqing286.com
AcFunLocalizer全自动修复……

关于我们|无图版|SOSG WIKI

Copyright © 2006-2024 SosG.Net
Total 0.044412(s) query 9, Gzip enabled,  沪ICP备07006640号-3