【问题标题】:Youtube video download URLYoutube视频下载地址
【发布时间】:2010-07-22 17:50:19
【问题描述】:

我编写了一个程序,它可以获取 youtube 视频 URL 并下载它
今天起来我是这样做的:
1. 从“/get_video_info?video_id=ID”获取视频“token”,如:

http://www.youtube.com/get_video_info?video_id=jN0nWjvzeNc  

2。通过“/get_video?video_id=ID&t=TOKEN&fmt=FORMAT_ID”请求下载视频,例如:

http://www.youtube.com/get_video?video_id=jN0nWjvzeNc&t=vjVQa1PpcFMgAK0HB1VRbinpVOwm29eGugPh3fBi6Dg%3D&fmt=18  

但这不再起作用了!
新的下载地址是什么?

谢谢

【问题讨论】:

标签: url download youtube


【解决方案1】:

实际上,我正在从事从 youtube 下载视频文件的类似项目。我发现 get_video 可能被 Youtube 屏蔽了。因此,我没有使用 get_video.,而是使用从 get_video_info 检索到的视频信息并将其提取以获取视频文件 url。

在get_video_info 中有url_encoded_fmt_stream_map。编码后,您可以找到每个不同格式的视频的 url 和签名值。所以文件 url 就像 [url value]+'&signature='+[sig value]。

此外,我发现以下主题与我的方法相同。希望它可以帮助你。

Can't Download from youtube

如果你对如何下载 youtube 视频文件感兴趣,我写了一个小程序来演示这个过程。您可以免费使用它。

https://github.com/johnny0614/YoutubeVideoDownload

【讨论】:

  • 你在 github 上的 demo 不能用了...?我正在尝试使用 YoutubeVideoDownload.py http://www.youtube.com/watch?v=U3VdT3HEzKE mp4
  • @yujohnnyzhou 我添加了一个交互式下载模式,用于选择不同的视频类型以及单行下载进度条,而不是多行显示。请查看您的 github 页面。
  • 谢谢 - 我刚开始使用它,但它似乎不适用于 Vevo 上传的视频。
  • @TheBeardedTemplar 还有一件事,我认为这个程序适用于 vevo github.com/rg3/youtube-dl
  • @TheBeardedTemplar 我已经找到了问题所在。当程序检索到 video_info 文件时,它会使用参数 video_id=/*video_id*/ 向 get_video_info 发送请求。但是,它不适用于 vevo 视频。您必须附加另一个参数 el=vevo。所以请求 url 看起来像 www.youtube.com/get_video_info?video_id=/*video_id*/&el=vevo 。目前,这是检索 vevo 视频信息文件的唯一方法(我发现)。如果您有任何其他想法,请告诉我。 :)
【解决方案2】:

在网址末尾添加&asv=2

【讨论】:

  • 嗨,非常感谢,它可以工作,但是:我尝试了“asv=3”(因为我从 youtube 播放器的反向操作脚本代码中获取)但它没有工作!但你的作品。谢谢
  • &asv=2 是从嵌入播放器逆向工程的。我不知道它为什么有效,但它有效:D
  • 由于受版权保护的内容,通过添加“asv=3”下载链接生成。如果您有受版权保护的内容,那么您必须使用“asv=3”。
【解决方案3】:

你可以直接通过使用直接获取流

http://www.youtube.com/get_video_info?video_id=jN0nWjvzeNc

我制作了一个小脚本来用 PHP 流式传输 youtube 视频。看看脚本如何获取视频文件。

<?php 
@set_time_limit(0); 
$id = $_GET['id']; //The youtube video ID
$type = $_GET['type']; //the MIME type of the video

parse_str(file_get_contents('http://www.youtube.com/get_video_info?video_id='.$id),$info); 
$streams = explode(',',$info['url_encoded_fmt_stream_map']); 

foreach($streams as $stream){ 
    parse_str($stream,$real_stream); 
    $stype = $real_stream['type']; 
    if(strpos($real_stream['type'],';') !== false){ 
        $tmp = explode(';',$real_stream['type']); 
        $stype = $tmp[0]; 
        unset($tmp); 
    } 
    if($stype == $type && ($real_stream['quality'] == 'large' || $real_stream['quality'] == 'medium' || $real_stream['quality'] == 'small')){ 
        header('Content-type: '.$stype); 
        header('Transfer-encoding: chunked'); 
        @readfile($real_stream['url'].'&signature='.$real_stream['sig']); //Change here to do other things such as save the file to the filesystem etc.
        ob_flush(); 
        flush(); 
        break; 
    } 
}
?>

查看工作演示 here。我希望这可以帮助你。

【讨论】:

  • @opengrid 那是关于我的虚拟主机的。稍后我会尝试其他虚拟主机。
  • 演示在我的本地主机上运行良好.. 谢谢 :)
  • @Licson 它在本地主机上运行良好。但是,当我尝试将它部署到像共享主机这样的服务器时,它会遇到 Cipher 加密密钥的问题,因为该 url 不包含任何签名和值,因此该 url 不起作用.. 如果你知道如何克服这个请告诉我们
  • 它可以工作,但有时不能像版权视频一样工作 不下载 youtube.com/watch?v=rs-T3zSoFgQ 我检查了其他网站 y2mate.com/youtube/Ye9T5eD258k 此处提供相同的视频下载选项。
【解决方案4】:

经过多次失败的尝试,这个 github 存储库帮助了我:

https://github.com/rg3/youtube-dl

只获取如下网址:

youtube-dl 'https://www.youtube.com/watch?v=bo_efYhYU2A' --get-url

下载 mp4 并另存为 a.mp4,如:

youtube-dl 'https://www.youtube.com/watch?v=bo_efYhYU2A' -f mp4 -o a.mp4

祝你好运。

【讨论】:

    【解决方案5】:

    上次我正在修复一个损坏的 Chrome 扩展程序以下载 YouTube 视频。我通过更改脚本部分来修复它。

    (Javascript)

    var links = new String();
    var downlink = new String();
    var has22 = new Boolean();
    has22 = false;
    var Marked = false;
    
    var FMT_DATA = fmt_url_map;//This is html text that you have to grab. In case of extension it was readily available through:document.getElementsByTagName('script');
    
    var StrSplitter1 = '%2C', StrSplitter2 = '%26', StrSplitter3 = '%3D';
    if (FMT_DATA.indexOf(',') > -1) { //Found ,
        StrSplitter1 = ',';
        StrSplitter2 = (FMT_DATA.indexOf('&') > -1) ? '&' : '\\u0026';
        StrSplitter3 = '=';
    }
    
    var videoURL = new Array();
    var FMT_DATA_PACKET = new Array();
    var FMT_DATA_PACKET = FMT_DATA.split(StrSplitter1);
    
    for (var i = 0; i < FMT_DATA_PACKET.length; i++) {
        var FMT_DATA_FRAME = FMT_DATA_PACKET[i].split(StrSplitter2);
        var FMT_DATA_DUEO = new Array();
    
        for (var j = 0; j < FMT_DATA_FRAME.length; j++) {
            var pair = FMT_DATA_FRAME[j].split(StrSplitter3);
            if (pair.length == 2) {
                FMT_DATA_DUEO[pair[0]] = pair[1];
            }
        }
    
        var url = (FMT_DATA_DUEO['url']) ? FMT_DATA_DUEO['url'] : null;
    
        if (url == null) continue;
        url = unescape(unescape(url)).replace(/\\\//g, '/').replace(/\\u0026/g, '&');
        var itag = (FMT_DATA_DUEO['itag']) ? FMT_DATA_DUEO['itag'] : null;
        var itag = (FMT_DATA_DUEO['itag']) ? FMT_DATA_DUEO['itag'] : null;
        if (itag == null) continue;
        var signature = (FMT_DATA_DUEO['sig']) ? FMT_DATA_DUEO['sig'] : null;
        if (signature != null) {
            url = url + "&signature=" + signature;
        }
        if (url.toLowerCase().indexOf('http') == 0) { // validate URL 
    
            if (itag == '5') {
                links += '<a href="' + url + '&title=' + username + title + quality240 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v240p">FLV (240p)</span></a>';
            }
            if (itag == '18') {
                links += '<a href="' + url + '&title=' + username + title + quality360 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v360p">MP4 (360p)</span></a>';
            }
            if (itag == '35') {
                links += '<a href="' + url + '&title=' + username + title + quality480 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v480p">FLV (480p)</span></a>';
            }
            if (itag == '22') {
                links += '<a href="' + url + '&title=' + username + title + quality720 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v720p">MP4 HD (720p)</span></a>';
            }
            if (itag == '37') {
                links += ' <a href="' + url + '&title=' + username + title + quality1080 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v1080p">MP4 HD (1080p)</span></a>';
            }
            if (itag == '38') {
                links += '<a href="' + url + '&title=' + username + title + quality4k + '"style="text-decoration:none"><span class="yt-uix-button-menu-item"  id="v4k">MP4 HD (4K)</span></a>';
            }
    
            FavVideo();
            videoURL[itag] = url;
            console.log(itag);
        }
    }
    

    您可以从videoURL[itag] 数组中获取单独的视频链接。

    扩展程序可以从here下载。

    我希望这会对某人有所帮助。这是有效的解决方案(截至 2013 年 4 月 6 日)

    【讨论】:

      猜你喜欢
      • 2012-11-18
      • 2010-11-08
      • 2011-04-30
      • 1970-01-01
      • 2013-09-10
      • 2011-02-10
      • 2019-03-06
      • 2011-01-30
      • 2012-12-21
      相关资源
      最近更新 更多