3

我有一个从 youtube 下载 mp4 文件的脚本。它的作用是生成http://youtube.com/get_video?video_id= *VIDEO_ID*&&t=*THE_TOKEN*=&fmt=18&asv=2 形式的链接,但它不再起作用(今天注意到了)。你怎么看?

4

4 回答 4

12

与其尝试使用 get_video 来获取视频,不如尝试解析 fmt_url_map(格式 URL 映射)。

您应该能够在找到令牌的相同位置找到 fmt_url_map(例如在 YouTube Flash 视频播放器的 flashvars 中或 YouTube 页面中的某个地方)。如果找不到,请向http://www.youtube.com/get_video_info?video_id= VIDEO_ID发送请求,您应该会得到一个很长的结果,其格式为name=value&name=value&...Find "fmt_url_map" 在此结果中(搜索通过以“&fmt_url_map=”开头并以“&”结尾的字符串的结果)。

获得此值后(您可能需要对其进行 url 解码),它将类似于(没有换行符):

22|http://blah.youtube.com/videoplayback?blah,
35|http://blah.youtube.com/videoplayback?blah,
...

其中每个逗号分隔的条目都以 fmt 值(示例中为 22 或 35)开头,后跟一个竖线字符,然后是您可以用来下载该格式视频的 URL。(此 URL 是特定于客户端的,因此由于 YouTube 检查 IP,某个客户端的 URL 很可能无法与其他客户端一起使用。此外,这些 URL 确实会在一段时间后过期。)

有关不同 fmt 值的列表,请参阅:http ://en.wikipedia.org/wiki/YouTube#Quality_and_formats并显示“YouTube 媒体编码选项的 Comarison”。注意:并非所有格式都适用于所有视频。

已弃用:将不再工作!

于 2010-12-12T02:36:11.123 回答
2

如果你想下载到服务器,你可以使用youtube-dl,它仍然可以工作。

于 2010-12-10T02:00:57.037 回答
0

好吧,他们似乎已经删除了 fmt 选项。请参阅http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs

于 2010-12-10T04:56:57.597 回答
0

I've created a node.js server that can stream YouTube videos directly to the client and it works. See https://github.com/licson0729/node-YouTubeStreamer for details.

于 2013-03-31T10:23:39.550 回答