我有一个从 youtube 下载 mp4 文件的脚本。它的作用是生成http://youtube.com/get_video?video_id= *VIDEO_ID*&&t=*THE_TOKEN*=&fmt=18&asv=2 形式的链接,但它不再起作用(今天注意到了)。你怎么看?
4 回答
与其尝试使用 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”。注意:并非所有格式都适用于所有视频。
已弃用:将不再工作!
如果你想下载到服务器,你可以使用youtube-dl,它仍然可以工作。
好吧,他们似乎已经删除了 fmt 选项。请参阅http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs。
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.