Existe uma maneira de converter legendas dvdsub (baseadas em imagens) para srt? por exemplo, com mencoder ou ffmpeg combinado com tesseract?
Estou procurando algo baseado em linha de comando e estou bem em ter que passar por algumas passagens.
Estou menos interessado em ferramentas baseadas em GUI.
Responder1
Você provavelmente já encontrou uma solução, mas como este foi o primeiro resultado da pesquisa para 'ffmpeg ocr dvdsub srt', aqui está uma ferramenta que eu uso.
https://github.com/ruediger/VobSub2SRT
Não é perfeito e pode exigir alguma edição.
Eu estava tentando encontrar um recurso no ffmpeg que fizesse isso melhor do que o meu método, mas encontrei isso e me lembrei da toca do coelho que tive que descer, então espero que isso ajude alguém.
Aqui está meu processo
Para extrair dvdsub de um .mkv
Usando mkvextract de mkvtoolnix-cli
mkvextract video.mkv tracks 2:video.idx
- arg 1 - O nome do arquivo de vídeo contendo dvdsub
- arg 2 - O tipo de extração
- arg 3 - [Stream # contendo dvdsub]:[Nome do arquivo desejado dos arquivos extraídos].idx
Meu exemplo teria produzido um arquivo video.idx e um arquivo video.sub
Gerando subrip de arquivos .idx e .sub
Usando vobsub2srt
vobsub2srt usa tesseract e descobri que usar o modo legado do tesseract funciona melhor.
vobsub2srt --tesseract-oem 0 video
- arg 1 - Modo Tesseract Engine (
tesseract --help-oem
para modos) - arg 2 - Modo Legado
- arg 3 - Nome do arquivo deAMBOS.idx e .subSEMextensão
Meu exemplo teria produzido video.srt
Inspecione e edite o arquivo subrip
Erros que experimentei
- '|' em vez de 'I', o modo legado do tesseract não parece cometer esse erro com frequência.
- ` em vez de '
- Espaçamento, quando uma linha começa com '-', pode não haver espaço entre '-' e a primeira palavra.
- Ausente ' & "
- 'Eu' ou '|' em vez de '[', o legado não parece cometer esse erro com frequência.
Edite-o
Se você não estiver familiarizado com arquivos subrip, eles podem simplesmente ser lançados em um editor de texto.
grep, vim e sed são seus amigos.
A maioria dos erros do modo legado pode ser facilmente ignorada.
Substituindo dvdsub por subrip(srt)
Usando ffmpeg
ffmpeg -i video.mkv -i video.srt -c copy -c:s subrip -map 0:v -map 0:a -map 1 final-video.mkv
- arg 1 e 2 - Entrada #1 - Arquivo de vídeo contendo dvdsub
- arg 3 e 4 - Entrada # 2 - Arquivo Subrip
- arg 5 - Codec usado para todos os streams
- arg 6 - Copia todos os streams (somente vídeo e áudio são copiados)
- arg 7 - Codec de legenda (substitui o argumento 5 para legendas)
- arg 8 - Seleciona subrip como codec de legenda (pode ser redundante, mas seguro>desculpe)
- arg 9 e 10 - Mapeia o fluxo de vídeo da 1ª entrada para o 1º fluxo na saída
- arg 11 e 12 - Mapeia o fluxo de áudio da 1ª entrada para o 2º fluxo na saída
- arg 13 e 14 - Mapeia o fluxo de legendas da 2ª entrada para o 3º fluxo na saída
- arg 15 - Nome do arquivo de saída
E pronto, espero que não haja limite de caracteres aqui.