web-dev-qa-db-fra.com

URL de téléchargement de vidéos Youtube

J'ai écrit un programme qui récupère l'URL de la vidéo youtube
Aujourd'hui, j'ai fait ceci:
1. récupère la vidéo "token" à partir de "/ get_video_info? video_id = ID" comme: 

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

2. Téléchargez la vidéo en la demandant à "/ get_video? Video_id = ID & t = TOKEN & fmt = FORMAT_ID" comme: 

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

Mais ça ne marche plus!
Quelle est la nouvelle URL de téléchargement?

Merci

31
RYN

Ajoutez &asv=2 à la fin de l'URL.

10
rossy

En fait, je travaille sur le projet similaire qui consiste à télécharger le fichier vidéo à partir de YouTube. Je trouve que le get_video pourrait être bloqué par Youtube. Ainsi, au lieu d’utiliser get_video., j’utilise les informations vidéo extraites de get_video_info et les extrait pour obtenir l’URL du fichier vidéo. 

Dans get_video_info, il y a url_encoded_fmt_stream_map. Après l'encodage, vous pouvez trouver l'URL et la valeur de signature de chaque vidéo au format différent. Ainsi, le fichier url est comme [valeur url] + '& signature =' + [valeur sig].

De plus, je trouve le sujet suivant qui utilise la même méthode avec le mien. J'espère que ça peut t'aider. 

Impossible de télécharger depuis youtube

Si vous souhaitez télécharger un fichier vidéo youtube, il existe un petit programme que j'ai écrit pour illustrer le processus. Vous êtes libre de l'utiliser.

https://github.com/johnny0614/YoutubeVideoDownload

15
yujohnnyzhou

Vous pouvez obtenir le flux directement en utilisant uniquement 

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

J'ai fait un petit script pour diffuser des vidéos youtube en PHP. Voyez comment le script récupère le fichier vidéo.

<?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; 
    } 
}
?>

Voir la démo de travail ici . J'espère que cela pourra vous aider.

10
Licson

La dernière fois que je travaillais à la réparation d’une des extensions cassées de Chrome pour télécharger une vidéo YouTube. Je l'ai corrigé en modifiant la partie script.

(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);
    }
}

Vous pouvez obtenir un lien vidéo séparé à partir du tableau videoURL[itag].

L'extension peut être téléchargée depuis ici .

J'espère que cela aiderait quelqu'un. C'est une solution de travail (au 06-avr-2013)

2
Rajendra

Après de nombreux essais infructueux, ces dépôts github m'aident:

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

Obtenez l'URL seulement comme:

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

téléchargez un mp4 et enregistrez-le sous le format:

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

Bonne chance.

1
rongdong.bai