标签:
iphoneyoutubeflvmpeg |
2007年07月04日 星期三
天气:晴,闷热
独立日快乐,美国人民!
虽然我对iPhone根本不感兴趣,但事实上我有点羡慕iPhone直接观看YouTube这个功能。那些在YouTube上的视频虽然解析度不高,放在手机小小的屏幕上看还真是挺合适的。当然,现在国内的GPRS费用很高,如果直接看的话,我也承受不起。但这个功能真的很吸引我,嗯。
此外,我的电话上有一个TCPMP(The Core Pocket Media Player)播放器,它是不支持FLV格式的。后来下载了一个Adobe的Flash Lite,貌似也无法直接播放FLV视频。于是,问题就来了。如果我想在电话上看YouTube的话,我需要三个步骤:1,分析FLV源文件地址;2,下载FLV文件;3,转换成MPEG格式。
对于我这种懒汉来说,虽然可以一一操作起来,但不得不抱怨一句:这三个步骤太复杂了。有没有好的办法呢?肯定是有的。我就看到有这么一款软件,可以将YouTube上的视频直接下载到本地,然后转换成AVI格式。这样一来,你所需要做的事情就是:1,找到喜欢的视频内容;2,点击下载即可。很方便吧,呵呵。
如果事情简单到这个地步,那么我就不会写这篇Blog了。要知道我最不喜欢的就是安装软件了,尤其是为了一个芝麻大的一点事情去安装一个超过两兆的软件。要是绿色的还可以考虑,只有安装版?去死吧。
所以我决定自己写一个,懒汉版的YouTube下载+转换器。而且还要完全合法和免费,嗯……
说到这里我要再次跟大家赞一下Windows Script Host,用起来真的是太方便了。很多情况下,一些机械的事情完全可以彻彻底底地交给它去做,你只需要一步一步地把细化的步骤描述出来即可。这么说还有一个原因,我是在Windows平台下工作的。如果是其他的平台,我们也有其他的选择,比如Python,再比如Perl,甚至是批处理文件。
我的思路是这样的:假定我每次需要下载的YouTube视频有很多个,至少不止一个(其实就一个也无所谓,反正保证通用性就行)。我给这个程序一个文本文件的列表,然后双击一下我的脚本。程序就开始一个一个地找出YouTube上这些视频FLV文件的真实地址,然后生成一个临时的批处理文件(.BAT)。最后通过Shell调用这个临时的批处理文件,即可开始下载并转化。程序运行结束之后,之前生成的临时批处理文件会被删除掉。
以上就是我的思路,我觉得我应该已经表述清楚了,呵呵。接下来就是开始解决问题,嗯。
问题一,如何找到FLV源文件。对于YouTube来说,它的FLV源文件地址是比较好找的。如果你能得到一个标准的YouTube视频播放地址,比如:http://www.youtube.com/watch?v=Vy20b7pCcrY(一帮神经病把一台iPhone给砸了-。-)你会发现URL中含有一串字符“Vy20b7pCcrY”,不用分析都知道这就是Video ID。但仅仅通过Video ID是无法下载到FLV源文件的,你还需要得到另外一个叫做t的变量。
大多数视频分享站点都会有同样的问题,通过另外一个加密的值来防治源文件被随意下载。如果需要破解这些值的话,如果不知道算法的话,一般需要借助一些HTTP数据的嗅探工具。可是YouTube的做法让人称赞,它干脆就直接提供了这个值,呵呵。
查看一下HTML源文件,你应该能找到这么一行:
var fs = window.open(
"/watch_fullscreen?video_id=Vy20b7pCcrY&l=59&t=OEgsToPDskLm0UBm_gQti2NXKLuwnUUm&soff=1&sk=yjy2ds8vWhkRdeNoQvRMywC&fs=1&title="
+ "iPhone SMASH" ,
这里提供了我们需要的t值,在这个例子里,变量t等于OEgsToPDskLm0UBm_gQti2NXKLuwnUUm。接下来的事情,就是直接用天下人皆知的YouTube下载链接模版生成地址即可,最终的结果是:
http://www.youtube.com/get_video?video_id=Vy20b7pCcrY&t=OEgsToPDskLm0UBm_gQti2NXKLuwnUUm
事实上这还不是真正的下载地址,但是通过这个地址已经能够下载FLV源文件了,我们就不再继续深究下去。因为我的知识也仅仅这么多,继续下去我也不会了,呵呵。
问题二,如何下载FLV。我们有命令行工具Wget,这是自由软件基金会的工作成果,是自由软件。想下载FLV?使用最新版的Wget直接抓去上面我们得到的地址即可。
问题三,如何将FLV转换成MPEG。我们有命令行工具FFmpeg,这是一个开源项目,如果个人使用的话就是免费软件。想转换成MPEG文件?嗯,也许你需要仔细阅读一下FFmpeg的文档,呵呵。
至此,以上三个问题完全解决,我们就开始动手操作吧。YouTube终于可以登陆我的电话,我也能移动着收看YouTube了,嘿嘿。
源代码在这里,有兴趣拿去研究吧。如果发现Bug,欢迎留言给我。

加载中…