Téléchargement de transcriptions YouTube générées automatiquement

25

Existe-t-il un moyen de télécharger les transcriptions YouTube générées automatiquement sans télécharger la vidéo?

Je voudrais consulter les discussions TED, mais j'ai une bande passante limitée et je voudrais exporter les transcriptions automatisées (également connues sous le nom de sous-titres ou de sous-titres codés).

Casebash
la source
Quelqu'un sait-il comment procéder pour des vidéos avec des sous-titres transcrits automatiquement?
Kenwarner
Connexes (pour les sous-titres non générés automatiquement): webapps.stackexchange.com/questions/25072/…
mécanique
a également répondu ici: stackoverflow.com/questions/9611397/…
Tin Man
Y a-t-il des nouvelles à ce sujet?
Leo

Réponses:

8

Utilisez la fonction "Network inspector" du débogueur de script de votre navigateur et trouvez une deuxième demande pour la page timedtext après avoir activé les sous-titres transcrits, puis copiez simplement toute cette demande dans la barre d'adresse pour les télécharger au format natif YouTube xml.

Pour obtenir la version SRT, exécutez ce code dans la console de débogage pour la page de ce xml:

function makeTimeline (time) {
    var string, time_array = [], milliseconds = Math.round(time % 1 * 1000).toString();

    while (3 > milliseconds.length) {
        milliseconds = '0' + milliseconds;
    }

    time_array.push(Math.floor(time / (60 * 60)));
    time_array.push(Math.floor((time - (time_array[0] * 60 * 60)) / 60));
    time_array.push(Math.floor(time - ((time_array[1] * 60) + (time_array[0] * 60 * 60))));

    for (var i = 0, il = time_array.length; i < il; i++) {
        string = '' + time_array[i];
        if (1 === string.length) {
            time_array[i] = '0' + string;
        }
    }
    return time_array.join(':') + ',' + milliseconds;
};

function returnSRT (data) {
    var caption, previous_start, start, end, temp, captions = data.getElementsByTagName('text'), srt_output = '';

    for (var i = 0, il = captions.length; i < il; i++) {
        caption = captions[i];
        start = +caption.getAttribute('start');

        if (0 <= previous_start) {
            temp = captions[i - 1].textContent.replace(/</g, '&lt;').replace(/>/g, '&gt;');
            srt_output += i + '\n' + makeTimeline(previous_start) + ' --> ' + makeTimeline(start) + '\n' + temp + '\n\n';
            previous_start = -1;
        }

        if ( end = +caption.getAttribute('dur'))
            end = start + end;
        else {
            if (captions[i + 1]) {
                previous_start = start;
                continue;
            }
        }

        temp = caption.textContent.replace(/</g, '&lt;').replace(/>/g, '&gt;');
        srt_output += i + '\n' + makeTimeline(start) + ' --> ' + makeTimeline(end) + '\n' + temp + '\n\n';
    };
    return srt_output;
}

returnSRT(document.documentElement)

Voici également la version bookmarklet du script:

javascript:(function(){function%20makeTimeline(time)%7Bvar%20string%2Ctime_array%3D%5B%5D%2Cmilliseconds%3DMath.round(time%251*1000).toString()%3Bwhile(3%3Emilliseconds.length)%7Bmilliseconds%3D'0'%2Bmilliseconds%3B%7Dtime_array.push(Math.floor(time%2F(60*60)))%3Btime_array.push(Math.floor((time-(time_array%5B0%5D*60*60))%2F60))%3Btime_array.push(Math.floor(time-((time_array%5B1%5D*60)%2B(time_array%5B0%5D*60*60))))%3Bfor(var%20i%3D0%2Cil%3Dtime_array.length%3Bi%3Cil%3Bi%2B%2B)%7Bstring%3D''%2Btime_array%5Bi%5D%3Bif(1%3D%3D%3Dstring.length)%7Btime_array%5Bi%5D%3D'0'%2Bstring%3B%7D%7Dreturn%20time_array.join('%3A')%2B'%2C'%2Bmilliseconds%3B%7D%3Bfunction%20returnSRT(data)%7Bvar%20caption%2Cprevious_start%2Cstart%2Cend%2Ctemp%2Ccaptions%3Ddata.getElementsByTagName('text')%2Csrt_output%3D''%3Bfor(var%20i%3D0%2Cil%3Dcaptions.length%3Bi%3Cil%3Bi%2B%2B)%7Bcaption%3Dcaptions%5Bi%5D%3Bstart%3D%2Bcaption.getAttribute('start')%3Bif(0%3C%3Dprevious_start)%7Btemp%3Dcaptions%5Bi-1%5D.textContent.replace(%2F%3C%2Fg%2C'%26lt%3B').replace(%2F%3E%2Fg%2C'%26gt%3B')%3Bsrt_output%2B%3Di%2B'%5Cn'%2BmakeTimeline(previous_start)%2B'%20--%3E%20'%2BmakeTimeline(start)%2B'%5Cn'%2Btemp%2B'%5Cn%5Cn'%3Bprevious_start%3D-1%3B%7Dif(end%3D%2Bcaption.getAttribute('dur'))end%3Dstart%2Bend%3Belse%7Bif(captions%5Bi%2B1%5D)%7Bprevious_start%3Dstart%3Bcontinue%3B%7D%7Dtemp%3Dcaption.textContent.replace(%2F%3C%2Fg%2C'%26lt%3B').replace(%2F%3E%2Fg%2C'%26gt%3B')%3Bsrt_output%2B%3Di%2B'%5Cn'%2BmakeTimeline(start)%2B'%20--%3E%20'%2BmakeTimeline(end)%2B'%5Cn'%2Btemp%2B'%5Cn%5Cn'%3B%7D%3Breturn%20srt_output%3B%7Dwindow.location.href%3D'data%3Atext%2Fplain%3Bbase64%2C'%2Bbtoa(returnSRT(document.documentElement))})();
DitherSky
la source
6

Il existe plusieurs façons d'extraire les sous-titres d'une vidéo YouTube -

En spécifiant la langue et VideoId dans cette URL générique - http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}vous pouvez obtenir un .xmlfichier contenant les sous-titres dans la langue souhaitée pour une vidéo choisie.

Pour vous débarrasser des balises dans ce fichier et avoir simplement la transcription en texte brut , voici ce que vous devez faire:

  • Ouvrez Microsoft Excel
  • Copiez collez les sous-titres dans une cellule
  • Appuyez sur Ctrl+H
  • Dans l'onglet Remplacer, tapez <*> dans la zone de texte "Rechercher quoi" et laissez la zone de texte "Remplacer par" vide, puis cliquez sur Replace All. L'expression de recherche supprimera toutes les balises du texte d'origine.

Alternativement, il existe un outil open-source appelé Google2SRT qui télécharge tous les abonnés disponibles à partir d'une vidéo YouTube en un seul clic et les convertit en .srtformat afin qu'il puisse être utilisé dans des lecteurs multimédias comme VLC Media Player.

Mise à jour: Ted.com fournit maintenant des transcriptions des discussions sur son site.

mvark
la source
L'URL générique ne semble pas fonctionner. J'entre http://video.google.com/timedtext?lang=english&v=b11AXknrsEImais ça ne marche pas. De plus, l'accès aux outils de développement n'aide pas. Il y a des tonnes de ressources là-dedans et aucune d'entre elles ne dit timedtext.
61897
Peu importe, je l'ai trouvé grâce aux outils de développement. Cependant, je ne parviens toujours pas à obtenir une URL générique. Ce serait la chose la plus simple.
61897
Essayez youtube.com/api/timedtext?lang= {LANG} & v = {VIDEOID}
mvark
Je dois faire quelque chose de mal. Pour cette vidéo, je saisis cela, mais il charge une page vierge. Je l' ai essayé de changer englishde enet engmais il fait la même chose.
61897
Il semble que les sous-titres ne puissent être récupérés que si les légendes sont transcrites manuellement, c'est-à-dire non générées automatiquement. Le lien vidéo que vous avez partagé ne contient que des sous-titres automatiques.
mvark
0

S'il s'agit de votre propre vidéo, vous pouvez télécharger les sous-titres à partir du gestionnaire de vidéos. Aller à:

Gestionnaire de vidéos >> Modifier (sur la vidéo que vous voulez) >> Légendes >> (Cliquez sur la piste que vous souhaitez télécharger) >> Actions (liste déroulante)

Au moment de la rédaction, trois types de fichiers sont disponibles:

  • .vtt
  • .srt
  • .sbv

Ceux-ci ont des utilisations différentes dans différentes applications, mais sont très similaires. SRT est probablement le plus courant.

Sinon, si ce n'est pas votre vidéo, la meilleure méthode (seule méthode) est d'obtenir le fichier xml à partir des outils Developer.

À l'aide de Google Chrome dans cet exemple, accédez à la vidéo, puis procédez comme suit:

  1. Mettez la vidéo en pause. Attendez qu'il joue s'il y a une publicité.
  2. Appuyez sur F12 sur votre clavier. Cela ouvre les outils de développement. Vous devrez peut-être cliquer sur un espace vide de la page pour que la vidéo ne soit pas active.
  3. Cliquez sur l'onglet Réseau dans les outils de développement.
  4. Cliquez sur l'icône de transcription juste en dessous de la vidéo. Deux éléments apparaîtront dans l'onglet Réseau des outils de développement.
  5. Les deux éléments sont intitulés timedtext?plus un tas de variables. Le second est généralement celui que vous souhaitez. Cela commence comme ceci:
    <transcript> <text start="4.14" dur="3.049">my name is doctor john rush</text> <text start="7.189" dur="3.731">I'm the CEO and president</text>

Ce fichier xml est utile si vous souhaitez utiliser la transcription dans une page Web. À part cela, je ne pense pas que vous puissiez l'utiliser de la même manière que vous utiliseriez un fichier SRT. Si vous êtes un bon programmeur, vous pouvez facilement écrire un programme qui le convertira en SRT. J'ai écrit mon propre programme C # qui extrait les données dans un but différent et cela a pris moins de deux heures.

61897
la source