How to download the CBS news videos

视频的url:

在这个网站http://www.cbsnews.com/上能在线观看CBS的视频节目,比如Evening News, 60 minutes, Face the Nation等等。

随便打开一个视频节目的播放页,然后打开网页源代码,搜索mp4,就能看到这样的东西

{"pid":"ZqQdf4uXVkZE","bitrate":764000,"uri":"rtmp://cp98363.edgefcs.net/ondemand/?auth=cbs&aifp=v001&slist=media/2014/01/05/107395139598/<break>media/2014/01/05/107395139598/ftn_0105_NEWfull_796.mp4"},"tablet":{"pid":"tv78ObYUA_eM","bitrate":740000,"uri":"http://download.cbsnews.com/media/mpx/2014/01/05/107395139598/ftn_0105_NEWfull_740.mp4"},"mobile":{"pid":"S8jlI1_h4UwZ","bitrate":240000,"uri":"http://download.cbsnews.com/media/mpx/2014/01/05/107395139598/ftn_0105_NEWfull_240.mp4"}

它对应的是一个视频的不同格式。其中740.mp4和796.mp4是分辨率最高的,分辨率是640x360。这两个文件基本一样,区别是796.mp4的音频是48khz的,而740.mp4是22khz的。域名都是download.cbsnews.com,只是后面的网址略有区别。

如:

http://download.cbsnews.com/media/2014/02/09/144224323936/FTN_0209_FULL_796.mp4
http://download.cbsnews.com/media/mpx/2014/02/09/144224323936/FTN_0209_FULL_740.mp4

后来我找到了一个隐藏的连接:把796改成1296

http://download.cbsnews.com/media/2014/02/09/144224323936/FTN_0209_FULL_1296.mp4

结果发现只是码率提升了,分辨率依然不变。

字幕:

Face The Nation的transcript会发到它的网站上,如http://www.cbsnews.com/news/face-the-nation-transcripts-february-9-2014-king-durbin-ayotte/ 其它节目的要手动下载,下载完之后是DFXP(timed text)格式的字幕,大多数播放器都不支持(除了基于flash的),所以需要用工具转换成srt等格式。

字幕的url一般是这样的格式:http://www.cbsnews.com/videos/captions/733zluzsf5g1hcxfwqfsg8ss0vi1lnks.adb\_xml

其中文件名去掉后缀的部分,"733zluzsf5g1hcxfwqfsg8ss0vi1lnks",是节目的guid。

有两种方法能找到一个这个url。

一个是根据节目的pid,下载一个xml文件。pid可以在播放页的html中找到,在本文开头的例子中就有。

要下载的xml的地址是: http://link.theplatform.com/s/dJ5BDC/_SbjLEcF68Ch?format=SMIL&Tracking=true&mbr=true (其中_SbjLEcF68Ch是pid)

这个xml中有一行是

<param name="ClosedCaptionURL" value="xxxxxxx">

url就在这个value里。

还有一种方法是从栏目的rss中找

http://feed.theplatform.com/f/dJ5BDC/VxxJg8Ymh8sE?sort=added%7Cdesc "MPX version of CAN Feed"

http://feed.theplatform.com/f/dJ5BDC/b9CTX1Xd9JO7?sort=added%7Cdesc "MPX version of the All Flash Feed"

能直接找到caption url的地址。

这个rss可以在get的时候通过url参数来过滤,比如,如果知道节目的pid,那么就可以直接把这个节目摘出来,如

http://feed.theplatform.com/f/dJ5BDC/b9CTX1Xd9JO7?byContent=byReleases=byPid%253D_SbjLEcF68Ch

其中%253D其实是ascii的等号,被连续encode了两次。

byContent之后追加的查询被称为Public URL filter queries。比如

http://feed.theplatform.com/f/dJ5BDC/VxxJg8Ymh8sE?byCategories=CBS%20Evening%20News&byContent=byFormat%3Dmpeg4

就能获得CBS Evening News的所有mpeg4格式的视频。

Format列表:http://sa.theplatform.com/theplatformfiles/sdk/javadocs/com/theplatform/service/admin/enums/FormatEnum.html

字幕的转换方法:

我在网上找了很多工具,发现皆不靠谱。比如subtitle workshop、google2srt、Jubler subtitle editor、microsoft Expression Encoder 4。

实际上不过是要把一个xml中的一些信息摘出来,转化成一个文本文件(srt)。如果你是一个程序员,随便拿自己喜欢的语言写一个,10来分钟就OK的事情。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥