Herunterladen automatisch generierter YouTube-Transkriptionen

25

Gibt es eine Möglichkeit, die automatisch generierten YouTube-Transkriptionen herunterzuladen, ohne das Video herunterzuladen?

Ich möchte die TED-Vorträge überprüfen, habe aber eine begrenzte Bandbreite und möchte die automatisierten Transkripte (möglicherweise auch als Untertitel oder Untertitel bezeichnet) exportieren.

Casebash
quelle
Kennt jemand eine Möglichkeit, dies für Videos mit automatisch transkribierten Untertiteln zu tun?
Kenwarner
Verwandte (für nicht automatisch generierte Untertitel): webapps.stackexchange.com/questions/25072/…
Mechanische Schnecke
auch hier beantwortet: stackoverflow.com/questions/9611397/…
Tin Man
Gibt es Neuigkeiten dazu?
Leo

Antworten:

8

Verwenden Sie die Funktion "Network Inspector" des Skript-Debuggers Ihres Browsers und suchen Sie nach der Aktivierung der transkribierten Untertitel nach einer zweiten Anforderung für die Timed-Text- Seite. Kopieren Sie dann alle Anforderungen in die Adressleiste, um sie im nativen YouTube-XML-Format herunterzuladen.

Um die SRT-Version zu erhalten, führen Sie diesen Code in der Debugger-Konsole für diese XML-Seite aus:

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)

Auch hier ist eine Bookmarklet-Version des Skripts:

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
quelle
6

Es gibt verschiedene Möglichkeiten, Untertitel aus einem YouTube-Video zu extrahieren :

Durch Angabe der Sprache und der Video-ID in dieser generischen URL erhalten http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}Sie eine .xmlDatei mit den Untertiteln in der gewünschten Sprache für ein ausgewähltes Video.

Um die Tags in dieser Datei loszuwerden und nur das Nur-Text-Transkript zu haben, müssen Sie Folgendes tun:

  • Öffnen Sie Microsoft Excel
  • Kopieren Sie und fügen Sie die Untertitel in eine Zelle ein
  • Drücken Sie Ctrl+H
  • Geben Sie auf der Registerkarte Ersetzen <*> in das Textfeld "Suchen nach" ein, lassen Sie das Textfeld "Ersetzen durch" leer und klicken Sie auf Replace All. Der Suchausdruck entfernt alle Tags im Originaltext.

Alternativ gibt es ein Open-Source-Tool namens Google2SRT , das alle verfügbaren Subs von einem YouTube-Video mit einem Klick herunterlädt und in ein .srtFormat konvertiert, damit es in Media Playern wie dem VLC Media Player verwendet werden kann.

Update: Ted.com stellt jetzt auf seiner Website Abschriften der Vorträge zur Verfügung.

mvark
quelle
Die generische URL scheint nicht zu funktionieren. Ich trete ein, http://video.google.com/timedtext?lang=english&v=b11AXknrsEIaber es funktioniert nicht. Es hilft auch nicht, Entwickler-Tools aufzurufen. Es gibt Unmengen von Ressourcen und keine von ihnen sagt Timed-Text.
61897
Egal, ich habe es über die Entwicklerwerkzeuge gefunden. Ich kann eine generische URL trotzdem nicht zum Laufen bringen. Das wäre das Einfachste.
61897
Probieren Sie youtube.com/api/timedtext?lang= {LANG} & v = {VIDEOID}
mvark
Ich muss etwas falsch machen. Für dieses Video gebe ich dies ein, aber es lädt eine leere Seite. Ich habe versucht , Wechsel englishzu enund engaber es tut die gleiche Sache.
61897
Es sieht so aus, als ob die Untertitel nur abgerufen werden können, wenn Untertitel manuell transkribiert, dh nicht automatisch generiert werden. Der von Ihnen freigegebene Videolink enthält nur automatische Untertitel.
MVARK
1

Ich denke, dieses Userscript sollte für Sie funktionieren:

http://userscripts.org/scripts/show/50003/

Alex Andronov
quelle
2
Danke, aber das scheint nicht das Herunterladen von automatisch transkribierten Untertiteln zu ermöglichen
Casebash
0

Wenn es sich um Ihr eigenes Video handelt, können Sie die Untertitel aus dem Videomanager herunterladen. Gehe zu:

Video Manager >> Bearbeiten (auf das gewünschte Video) >> Untertitel >> (Klicken Sie auf den Track, den Sie herunterladen möchten) >> Aktionen (Dropdown-Box)

Zum Zeitpunkt des Schreibens sind drei Dateitypen verfügbar:

  • .vtt
  • .srt
  • .sbv

Diese haben unterschiedliche Verwendungszwecke in unterschiedlichen Anwendungen, sind sich jedoch sehr ähnlich. SRT ist wahrscheinlich die häufigste.

Andernfalls besteht die beste Methode (einzige Methode) darin, die XML-Datei von den Entwicklertools abzurufen, wenn es sich nicht um Ihr Video handelt.

Navigieren Sie in diesem Beispiel mit Google Chrome zum Video und führen Sie die folgenden Schritte aus:

  1. Pausiere das Video. Warten Sie, bis es abgespielt wird, wenn eine Werbung vorliegt.
  2. Drücken Sie F12 auf Ihrer Tastatur. Dies öffnet die Entwicklertools. Möglicherweise müssen Sie auf eine leere Stelle auf der Seite klicken, damit das Video nicht aktiv ist.
  3. Klicken Sie in den Entwicklertools auf die Registerkarte Netzwerk.
  4. Klicken Sie auf das Transkriptionssymbol direkt unter dem Video. Auf der Registerkarte Netzwerk in den Entwicklertools werden zwei Elemente angezeigt.
  5. Beide Elemente tragen den Titel timedtext?plus eine Reihe von Variablen. Der zweite ist in der Regel der, den Sie wollen. Es beginnt so:
    <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>

Diese XML-Datei ist nützlich, wenn Sie das Transkript in einer Webseite verwenden möchten. Davon abgesehen können Sie es meines Erachtens nicht so verwenden, wie Sie es mit einer SRT-Datei tun würden. Wenn Sie sich mit Programmieren auskennen, können Sie problemlos ein Programm schreiben, das es in SRT konvertiert. Ich habe mein eigenes C # -Programm geschrieben, das die Daten für einen anderen Zweck extrahiert, und es hat weniger als zwei Stunden gedauert.

61897
quelle