Languages

Sunday, September 8, 2013

Como baixar legendas automaticamente ao terminar o torrent

EDIT: Eu criei um tutorial passo a passo de como instalar o Legender e programar o uTorrent para baixar automatico as legendas para leigos, acesse: http://thinkhacker.blogspot.com.br/2014/05/como-baixar-legendas-automaticamente-ao.html

---------------

Um belo dia eu fiquei de saco cheio de ter que procurar a legenda pra cada um dos filmes que eu baixava, isso me tomava tanto tempo que eu já estava desistindo de ver filmes no pc e ficava apenas no netflix.

Esse plano já não funcionou mais quando eu comprei minha TV 3D, já que o netflix não oferece ainda esta categoria. Precisei achar uma forma mais fácil de legendar os filmes..

Foi aí que encontrei o legendasbrasil - http://www.legendasbrasil.com.br/um site que tem um aplicativo muito útil, para baixar as legendas direto do seu shell (clicando com botão direito no filme). 

A grande vantagem dele, além da praticidade, é que ele usa uma hash do filme para procurar, então a precisão dos resultados é muito superior pois você estará baixando uma legenda testada e que funciona com aquele exato vídeo.

Não deu muito tempo até que eu criasse preguiça de ir lá no meu pc para clicar no filme e mandar baixar legenda. 

E foi quando eu tive a idéia de usar linha de comando para baixar, assim eu poderia configurar o meu aplicativo de torrent favorito (o utorrent) para rodar esse comando automaticamente quando terminasse um download.

Isso não foi tão fácil quanto parecia, aparentemente o legendasbrasil não possui uma forma de rodar por linha de comando, então o máximo que eu conseguia fazer era abrir o tal wizard dele e ter que clicar em próximo próximo próximo toda vez!

Foi aí que eu comecei a analizar o tráfego com o wireshark, na intenção de entender como ele fazia para baixar as legendas. Após ver direito como funcionava o protocolo do legendasbrasil eu fiz um igual, só que de linha de comando, para baixar a melhor legenda instantaneamente, sem passar por todo aquele processo desnecessário.

E eis que vos apresento o legender, o nome é uma reles brincadeira do nome legenda em português, transformado para verbo, em inglês.

Sem demais baboseiras, ele funciona assim:

- Substitui o programa de wizard original, o perfectmatch.exe, por um que baixa a legenda direto sem fazer perguntas.

- Além disso tem um aplicativo de auxilio, o legender.exe, que facilita rodar em linha de comando e deve ser colocado no mesmo diretório do perfectmatch.

Para usar ele: legender.exe [arquivo_de_filme1] [arquivo_de_filme2] ...

- Criei também um legenddir.bat, que ao invés de um arquivo de filme, recebe um diretório. Ele roda o legender em todos os arquivos de um diretório, é esse que você vai usar no utorrent por exemplo.
Essa versão do legender so funciona com o legendasbrasil versão 2.27. Eu inclui o instalador do legendasbrasil no zip.

ATENÇÃO: o legendasbrasil é um adware, traduzindo eles ganham dinheiro instalando spywares na sua maquina. 

O instalador dele vem cheio de truques para tentar te ludibriar a aceitar um spyware, como por exemplo uma segunda e terceira EULA que vc precisa clicar em declinar para seguir sem instalar spyware.

Sabendo disso, instale ele com bastante calma, e leia bem o que você esta clicando a cada passo, desmarque todas as opções possíveis e você conseguira instalar ele sem colocar spywares no seu pc.

Depois de instalado o legendasbrasil jogue o conteúdo do zip na pasta de instalação, sobrescrevendo quando necessário.

Configure o seu aplicativo de torrent favorito para usar o legender.exe se quiser executar ele num arquivo especifico, ou o legenddir.bat para executar em um diretório. Eu prefiro o legenddir porque quando baixamos series que vem com muitos episódios eu quero legendar automaticamente todos eles.

O zip possui também um arquivo com instruções passo a passo.

Legender v0.1b, arquivos:
https://sites.google.com/site/thinkhackerblog/legender%200.1b.zip?attredirects=0&d=1

Legender v0.1b, código fonte (python):
https://sites.google.com/site/thinkhackerblog/legender%200.1b%20src.zip?attredirects=0&d=1


14 comments:

  1. Fala cara, foi de grande ajuda o seu script. Já estou usando ele.

    Criei um bat para chamá-lo que antes de executar move todos os arquivos para a raiz para que a execução considere todos os meus arquivos baixados. Se tiver interesse me fale q te passo.

    Abs

    ReplyDelete
    Replies
    1. gostei da ideia, mas como vc faz com a estrutura de pastas em um torrent longo?

      o pacote que fiz inclui um bat legendir.bat, para nao estragar a estrutura de pastas seria uma boa ideia executar ele recursivamente em toda a arvore de diretorio, talvez uma leve alterada no legendir de pra fazer isso, assim voce nao acaba misturando temporadas de series por exemplo.

      Voce pode colar o texto do seu bat aqui por favor? assim pessoas que possam querer algo assim podem copiar

      Delete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Ola Leandro, tudo bom ?

    Estou fazendo praticamente o mesmo mas usando bash shell, já que tenho um torrent box.
    Estou tendo problemas em calcular o hash para poder fazer a pesquisa da legenda, já tentei de diversas formas porém nunca consegui bater com o hash que é usado na request que capturo pelo wireshark.

    Como vc calculou esse hash ? Com qual algoritimo ?

    Abs

    ReplyDelete
    Replies
    1. Para calcular o hash eu uso o programa do legendasbrasil mesmo, acabei caindo nessa tb de nao conseguir descobrir como ele calcula a hash.

      Para nao ter que partir para o disassemble completo e extracao de codigo eu acabei optando por usar esse programinha que ja vem no pacote da versao 2.27, mas que serve apenas para esse calculo, sem requisicoes web.

      Delete
    2. Achei o código para calcular o HASH descompilando umas DLL da versão 2.31
      private static byte[] ComputeMovieHash(Stream input)
      {
      long length = input.Length;
      long num2 = length;
      long num3 = 0L;
      byte[] buffer = new byte[8];
      while ((num3 < 0x2000L) && (input.Read(buffer, 0, 8) > 0))
      {
      num3 += 1L;
      num2 += BitConverter.ToInt64(buffer, 0);
      }
      input.Position = Math.Max((long) 0L, (long) (length - 0x10000L));
      num3 = 0L;
      while ((num3 < 0x2000L) && (input.Read(buffer, 0, 8) > 0))
      {
      num3 += 1L;
      num2 += BitConverter.ToInt64(buffer, 0);
      }
      input.Close();
      byte[] bytes = BitConverter.GetBytes(num2);
      Array.Reverse(bytes);
      return bytes;
      }

      Delete
    3. Opa, valeu por ter se dado ao trabalho de descompilar o cálculo da hash cara, vou portar pra Python aqui e fazer uns testes

      Delete
  4. Leandro, muito show suas ideia e execução.. Mas com esse algortimo do hash, nã seria possivel criar uma aplicação standalone para não depender mais do legendasbrasil?

    ReplyDelete
    Replies
    1. Sim sim, agora que vi o código do werewr vou fazer uns testes aqui, não depender do programa carregado de spywares seria ótimo

      Delete
  5. Leandro, poderia me ensinar o passo a passo para utilizar o programa? Pois sou totalmente leigo no assunto

    ReplyDelete
    Replies
    1. Fiz um passo a passo aqui http://thinkhacker.blogspot.com.br/2014/05/como-baixar-legendas-automaticamente-ao.html

      Delete
  6. This comment has been removed by the author.

    ReplyDelete
  7. Cara, que programa genial!

    Eu utilizo o app do Legendas Brasil faz um bom tempo, sempre facilitou minha vida. Mas o Legender superou bastante, com dois cliques e pronto, todos os vídeos com legenda. Valeu mesmo, Leandro!

    Fiz algumas modificações pontuais que funcionam melhor para mim. Com dois cliques num vbs, todas as legendas são baixadas de forma completamente silenciosa para os vídeos do mesmo diretório ou subdiretório (exceto se não for encontrada legenda para algum arquivo, dando uma mensagem de erro). Além disso, só busca legenda se o vídeo correspondente ainda não a tiver. Ah, e só procura para os formatos de vídeos especificados no bat (útil se na pasta onde são armazenados os vídeos, há arquivos de outros tipos).
    Então ficou assim:

    Os arquivos "legenddir.bat" e "legenddir.vbs" ficam em "D:\Vídeos".

    - legenddir.bat:
    "
    for /f "usebackq delims=|" %%z in (`dir /b /s *.mkv *.mp4 *.avi`) do (
    if not exist %%~ndpz.srt (
    "D:\Programas\Legendas\Application Files\Legendas-2.27\legender.exe" "%%z"
    )
    )
    "
    Obs.: pode-se definir o bat como arquivo de sistema e deixar pastas e arquivos ocultos à mostra, a fim de que se possa ignorar a busca por legendas para algum vídeo, eventualmente, ao ocultá-lo. Já que só executo o vbs, fiz isso para deixar a pasta mais organizada, com apenas um arquivo visível nela e o resto dentro de subpastas.

    - legenddir.vbs:
    "
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run chr(34) & "legenddir.cmd" & Chr(34), 0
    Set WshShell = Nothing
    "

    - compila.py: (Perfect Match)
    "
    from distutils.core import setup
    import py2exe, sys, os

    sys.argv.append('py2exe')

    setup(
    options = {'py2exe': {'bundle_files': 1}},
    windows = [{'script': "PerfectMatch.py"}],
    zipfile = None,
    )
    "
    Aqui, alterei o Perfectmatch.exe para não exibir a janela do console.

    Espero que seja útil a quem interessar!

    ReplyDelete