Download e Conversão de Legendas Do Youtube

Introdução

Esses dias baixei um vídeo do youtube só que a legenda não veio junto. Pesquisei um pouco e encontrei vários programas e sites que fazem o download da legenda. Nas referências [1] e [2] descobri um modo de fazer isso manualmente e logo pensei em fazer um post sobre o assunto.

Há vários programas e sites que fazem download e a conversão de legendas do youtube, mas nesse post aprenderemos a fazer isso de forma manual.

Código do Vídeo

Sabemos que cada vídeo do youtube possui um identificador representado pelos caracteres após o watch?v=. Nesse tutorial usarei o seguinte vídeo como exemplo:

o código desse vídeo é kGYACultjCY.

Listando as Legendas

Através do endereço:

http://video.google.com/timedtext?type=list&v=kGYACultjCY

temos acesso a todas as legendas disponíveis no vídeo. Acesse o link e veja um arquivo XML listando as legendas de acordo com o idioma.

XML listando legendas disponíveis

XML listando legendas disponíveis

Veja que somente uma linha desse conteúdo  é referente ao idioma português:

<track id="10" name="" lang_code="pt" lang_original="Português" lang_translated="Portuguese"/>

Os atributos que interessam são name e lang_code.

Obtendo a legenda

Sabendo o código do vídeo, o código do idioma o atributo name da legenda, é fácil recuperar a legenda em questão. O link a ser acessado é da forma:

http://video.google.com/timedtext?type=track&v=<CODIGO DO VIDEO>&lang=<IDIOMA>&name=<NOME>

Por exemplo, para recuperarmos a legenda em português do vídeo exemplo, acessamos o seguinte link:

http://video.google.com/timedtext?type=track&v=kGYACultjCY&lang=pt&name=

Clique no link acima e você verá que a legenda segue o formato XML. Esse formato não é muito aceito pelos players de vídeo e por isso teremos que fazer uma conversão para um formato mais adequado.

Legenda em XML

Legenda em XML

Observe que, para esse vídeo em específico, o atributo name é vazio e por isso não é necessário passá-lo no link. Na referência [2] temos um exemplo em que esse atributo existe e o link para acessar a legenda é:

http://video.google.com/timedtext?type=track&v=XraeBDMm2PM&lang=es&name=Spanish (es)

Convertendo XML para SubRip (.srt)

Mais uma vez, existem vários programas que fazem essa conversão de forma automática. Se você deseja algo mais automatizado, obtenha o programa Google2Srt em [3].

Bem, visualizando a saída XML observamos o seguinte padrão:

<text start="3.08" dur="3.6">
Deveria ser pessoal. Deve ser pessoal. É isso que estamos procurando.
</text>

O start contém o instante em que a legenda aparece e dur indica a duração dela. Entre as tags <text> e </text> temos a legenda em si.

Já o formato SubRip tem o seguinte padrão:

2
00:00:03,080 --> 00:00:06,680
Deveria ser pessoal. Deve ser pessoal. É isso que estamos procurando.

O número ‘2’ é o identificador da legenda. A linha seguinte indica o instante da legenda e a duração dela e a última linha, a legenda em si.

Verificando os dois formatos, fica fácil fazer a conversão de um para outro. A seguinte linha em XML:

<text start="3.08" dur="3.6">

gera a seguinte linha em SubRip

00:00:03,080 --> 00:00:06,680
      ^^^^^^           ^^^^^^
    valor de start         |
                      start + dur

O XML usa um formato fracionário de tempo em segundos, ou seja, 3.08 é 3 segundos + 080 milésimos de segundos. Por outro lado, o SubRip trabalha com um formato mais geral indicado por hora:minuto:segundo,milésimos, onde o campo dos milésimos tem três algarismos.

Para converter um tempo T do XML para o tempo equivalente do SubRip, fazemos:

Seja T=SEG.MILI
SEG/3600 : (SEG%3600)/60 : (SEG%3600)%60 , MILI

Isso é, para um T=5052.54, temos:

T = SEG.MILI = 5052.54
SEG = 5052
MILI = 540

5052/3600:(5052%3600)/60:(5052%3600)%60,540
   |            |            |           |
   v            v            v           v

   1     :      24      :    12        , 540

A linha em negrito é o tempo em SubRip.

Resumindo

Seguindo os procedimentos abaixo, alguém poderá escrever facilmente um programa que faz download e converte para SubRip uma legenda do youtube:

1) Obtenha o código do vídeo em $CODIGOVID
2) Acesse: http://video.google.com/timedtext?type=list&v=$CODIGOVID
e obtenha os atributos $NAME e $CODIGOIDIOM
3) Baixe o conteúdo XML de: 
http://video.google.com/timedtext?type=track&v=$CODIGOVID&lang=$CODIGOIDIOM&name=$NAME

4) Converta de XML para SubRip:
   - para cada <text start=$START dur=$DUR>$LEGENDA</text> incremente $ID
   - imprima:
       $ID
       tempo_subrip($START) --> tempo_subrip($START+$DUR)
       $LEGENDA
       <linha vazia>

obs: tempo_subrip() é a função que converte o tempo do XML para o tempo do SubRip.

Conclusão

O youtube fornece a incrível possibilidade de se anexar várias legendas em um só vídeo. Porém, ao se baixar o vídeo em questão as legendas não vem incluídas nele. Para resolvermos esse problema, obtemos a legenda através de um endereço específico que exige como parâmetros somente o código de duas letras do idioma e o código identificador do vídeo. A legenda retornada por esse endereço vem no formato XML e por isso, uma conversão para o formato SubRip (srt) se faz necessária. Na última parte do post vimos como essa conversão é feita aplicando-se simplesmente operações matemáticas nos tempos de aparição e duração da legenda.

Não irei postar um código exemplo por falta de tempo. Espero num futuro próximo postar algo parecido.

Referências

[1] How do I download subtitles from a YouTube video? by stackexchange (Acessado em: Novembro/2012)
http://webapps.stackexchange.com/questions/25072/how-do-i-download-subtitles-from-a-youtube-video

[2] Google2SRT (Help) (Acessado em: Agosto/2013)
http://google2srt.sourceforge.net/en/help.html

[3] Google2srt by kom (Acessado em: Novembro/2012)
http://google2srt.sourceforge.net/

7 pensamentos sobre “Download e Conversão de Legendas Do Youtube

    • Olá nelson,

      esse vídeo não tem legenda embutida, somente a legenda automática gerada pelo youtube. Nesse caso, esse esquema não vai funcionar.

      O que você pode fazer é procurar o vídeo original, em inglês, e verificar se ele possui legendas em português.

      Abraços

  1. Maravilha! Muito obrigado por esclarecer alguns pontos de como baixar manualmente, no linux não encontrei alternativa ao Google2srt, conhece alguma? A dificuldade agora é transformar esse XML em SRT….

    • Olá Rafael,

      parece que o linux carece de algumas alternativas. Você teve problemas para rodar o google2srt? De longe é o melhor programa que tem.

      Uma alternativa é usar esse script:

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

      Você precisará da extensão Tampermonkey (Chrome) ou Greasemonkey (Firefox) para instalá-lo. Sempre que você entrar em algum vídeo do youtube irá aparecer um menu de seleção para fazer download da legenda em .srt.

      No mais, irei postar um script para fazer essa conversão. Creio que será útil como ferramenta e também como aprendizagem.

      Abraços.

  2. Pingback: Script Em Python Para Baixar Legendas do Youtube | Daemonio Labs

  3. Excelente o tutorial. Agradeço o senso de compartilhamento de um conhecimento que provavelmente demandou tempo de pesquisa e/ou lazer com familiares. Agradeço o esforço de todos que fizeram o mesmo pela internet mas esse tutorial foi ao fundamento do assunto, antes de usar um soft, passa a compreensão do procedimento, do motivo de cada passo. Grato de verdade, Daemonio.

    • Olá Luiz, fico feliz que tenha gostado. Muitas postagens realmente demandam muito tempo, tanto para pesquisar quanto para postar, mas acredito que tudo isso é válido já que o compartilhamento de informação é o mais importante.
      Comentários assim que me faz continuar com as postagens, apesar do tempo curto. Muito obrigado mesmo. Abraços.

Deixe um comentário