ti-enxame.com

Download de transcrições do YouTube geradas automaticamente

Existe uma maneira de baixar as transcrições do YouTube geradas automaticamente sem baixar o vídeo?

Gostaria de verificar as negociações do TED, mas tenho largura de banda limitada e gostaria de exportar as transcrições automáticas (também conhecidas como legendas ou legendas).

25
Casebash

Use a função "Inspetor de rede" do depurador de scripts do navegador e encontre a segunda solicitação para timedtext página depois de ativar as legendas transcritas e, em seguida, basta copiar todas as solicitações na barra de endereços para baixá-las no formato xml nativo do YouTube.

Para obter a versão SRT, execute este código no console do depurador para a página desse 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)

Também aqui está a versão do bookmarklet do 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))})();
8
DitherSky

Existem algumas maneiras de extrair legendas de um vídeo do YouTube -

Ao especificar o idioma e o VideoId neste URL genérico - http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}, é possível obter um arquivo .xml contendo as legendas no idioma desejado para o vídeo escolhido.

Para se livrar das tags contidas nesse arquivo e ter apenas a transcrição de texto sem formatação , aqui está o que você deve fazer:

  • Abra o Microsoft Excel
  • Copie e cole as legendas dentro de uma célula
  • Pressione Ctrl+H
  • Na guia substituir, digite <*> na caixa de texto "Localizar" e deixe a caixa de texto "Substituir por" em branco e clique em Replace All. A expressão de pesquisa removerá todas as tags do texto original.

Como alternativa, existe uma ferramenta de código aberto chamada Google2SRT que baixa todos os subs disponíveis de um vídeo do YouTube com um clique e os converte no formato .srt para que possa ser usado em players de mídia como VLC Media Player.

Atualização: O Ted.com agora fornece transcrições das conversas em seu site.

6
mvark

Eu acho que este script de usuário deve funcionar para você:

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

1
Alex Andronov

O Google2SRT 0.6 suporta o YouTube ASR: http://sourceforge.net/projects/google2srt/

0
kom

Se for o seu próprio vídeo, você pode baixar as legendas no gerenciador de vídeo. Vamos para:

Gerenciador de vídeos >> Editar (no vídeo que você deseja) >> Legendas >> (Clique na faixa que deseja baixar) >> Ações (caixa suspensa)

No momento da escrita, existem três tipos de arquivos disponíveis:

  • .vtt
  • .srt
  • .sbv

Eles têm usos diferentes em aplicativos diferentes, mas são muito semelhantes. SRT é provavelmente o mais comum.

Caso contrário, se não for o seu vídeo, o melhor método (único método) é obter o arquivo xml nas ferramentas do desenvolvedor.

Usando o Google Chrome neste exemplo, navegue até o vídeo e siga estas etapas:

  1. Pause o vídeo. Aguarde a reprodução, se houver um anúncio.
  2. Pressione F12 no seu teclado. Isso abre as ferramentas do desenvolvedor. Pode ser necessário clicar em algum espaço vazio da página para que o vídeo não fique ativo.
  3. Clique na guia Rede nas Ferramentas do desenvolvedor.
  4. Clique no ícone de transcrição logo abaixo do vídeo. Dois itens aparecerão na guia Rede nas Ferramentas do desenvolvedor.
  5. Ambos os itens são intitulados timedtext? mais um monte de variáveis. O segundo é tipicamente o que você deseja. Começa assim:
    <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>

Esse arquivo xml é útil se você deseja usar a transcrição em uma página da web. Fora isso, acho que você não pode usá-lo da mesma maneira que usaria um arquivo SRT. Se você é bom em programação, pode escrever facilmente um programa que o converterá em SRT. Eu escrevi meu próprio programa C # que extrai os dados para uma finalidade diferente e levou menos de duas horas.

0
fredsbend