Download di trascrizioni YouTube generate automaticamente


25

C'è un modo per scaricare le trascrizioni YouTube generate automaticamente senza scaricare il video?

Vorrei dare un'occhiata ai discorsi di TED, ma ho una larghezza di banda limitata e vorrei esportare le trascrizioni automatiche (anche conosciute come sottotitoli o sottotitoli).


qualcuno conosce un modo per farlo per i video con sottotitoli trascritti automaticamente?
Kenwarner,

Correlato (per i sottotitoli non generati automaticamente): webapps.stackexchange.com/questions/25072/…
Lumaca meccanica


Ci sono novità a riguardo?
Leo,

Risposte:


8

Usa la funzione "Network inspector" del debugger di script del tuo browser e trova la seconda richiesta alla pagina con testo temporizzato dopo aver abilitato i sottotitoli trascritti, quindi copia tutta quella richiesta sulla barra degli indirizzi per scaricarli nel formato XML nativo di YouTube.

Per ottenere la versione SRT, eseguire questo codice nella console del debugger per la pagina di quel file 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)

Anche qui c'è la versione bookmarklet dello 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))})();

6

Esistono un paio di modi per estrarre i sottotitoli da un video di YouTube :

Specificando la lingua e VideoId in questo URL generico, http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}è possibile ottenere un .xmlfile contenente i sottotitoli nella lingua desiderata per un video scelto.

Per sbarazzarsi dei tag all'interno di quel file e avere solo la trascrizione in testo semplice , ecco cosa devi fare:

  • Apri Microsoft Excel
  • Copia incolla i sottotitoli all'interno di una cella
  • Premi Ctrl+H
  • Nella scheda Sostituisci digitare <*> nella casella di testo "Trova cosa" e lasciare vuota la casella di testo "Sostituisci con", quindi fare clic su Replace All. L'espressione di ricerca rimuoverà tutti i tag all'interno del testo originale.

In alternativa, esiste uno strumento open source chiamato Google2SRT che scarica tutti i sottotitoli disponibili da un video di YouTube con un clic e li converte in .srtformato in modo che possa essere utilizzato all'interno di lettori multimediali come VLC Media Player.

Aggiornamento: Ted.com ora fornisce le trascrizioni dei colloqui sul suo sito.


L'URL generico non sembra funzionare. Entro http://video.google.com/timedtext?lang=english&v=b11AXknrsEIma non funziona. Inoltre, andare agli strumenti per sviluppatori non aiuta. Ci sono tonnellate di risorse lì dentro e nessuno di loro dice il testo a tempo.
61897,

Non importa, l'ho trovato attraverso gli strumenti di sviluppo. Tuttavia, non riesco ancora a far funzionare un URL generico. Sarebbe la cosa più semplice.
61897,

Prova youtube.com/api/timedtext?lang= {LANG} & v = {VIDEOID}
mvark

Devo fare qualcosa di sbagliato. Per questo video entro in questo , ma si carica una pagina vuota. Ho provato a cambiare englishper ene engma fa la stessa cosa.
61897

Sembra che i sottotitoli possano essere recuperati solo se i sottotitoli vengono trascritti manualmente, cioè non generati automaticamente. Il collegamento video che hai condiviso ha solo didascalie automatiche.
mvark



0

Se è il tuo video, puoi scaricare i sottotitoli da Gestione video. Vai a:

Gestione video >> Modifica (sul video che desideri) >> Sottotitoli >> (Fai clic sulla traccia che desideri scaricare) >> Azioni (casella a discesa)

Al momento della scrittura, sono disponibili tre tipi di file:

  • .vtt
  • .srt
  • .sbv

Questi hanno usi diversi in diverse applicazioni, ma sono molto simili. SRT è probabilmente il più comune.

Altrimenti, se non è il tuo video, il metodo migliore (unico metodo) è ottenere il file xml dagli strumenti di sviluppo.

Utilizzando Google Chrome in questo esempio, vai al video e segui questi passaggi:

  1. Metti in pausa il video. Aspetta che suoni se c'è un annuncio.
  2. Premi F12 sulla tastiera. Questo apre gli strumenti di sviluppo. Potrebbe essere necessario fare clic su uno spazio vuoto nella pagina in modo che il video non sia attivo.
  3. Fai clic sulla scheda Rete negli Strumenti per sviluppatori.
  4. Fai clic sull'icona della trascrizione proprio sotto il video. Verranno visualizzati due elementi nella scheda Rete negli Strumenti per sviluppatori.
  5. Entrambi gli articoli sono intitolati timedtext?più un mucchio di variabili. Il secondo è in genere quello che desideri. Inizia così:
    <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>

Questo file XML è utile se si desidera utilizzare la trascrizione in una pagina Web. A parte questo, non penso che tu possa usarlo nello stesso modo in cui utilizzeresti un file SRT. Se sei bravo a programmare, puoi facilmente scrivere un programma che lo convertirà in SRT. Ho scritto il mio programma C # che estrae i dati per uno scopo diverso e ci sono voluti meno di due ore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.