Corrija arquivos e fluxos ruins com o ffmpeg para que o VLC e outros players não travem

17

Aconteceu-me muitas vezes que eu poderia acabar em arquivos de vídeo corrompidos:

  • vídeo baixado de fontes oficiais, mas com torrent e, por algum motivo, nem todas as peças existem em .mkv, .ts ou .mp4
  • registros no formato .ts onde, em um determinado momento, os dados estão ausentes
  • copiou vídeos de um disco rígido antigo com setores danificados

Quando reproduzo esses vídeos com o VLC ou outros players, eles são reproduzidos até um certo ponto e, em seguida, saem instantaneamente. Às vezes, posso tentar pular a parte ruim, mas poderia encontrar outro setor ruim e ter um recomeço de novo.

Questão é:

Posso corrigir esses problemas (suponho que o fluxo e os quadros-chave estejam relacionados) com o ffmpeg e talvez na forma de cópia -c, para que eu não tenha que recomprimir tudo?

O que eu quero alcançar é um vídeo completo, onde as partes ausentes são ignoradas. Prefiro uma falha do que travar meus vídeos.

user3450548
fonte

Respostas:

26

Se partes do arquivo residem em setores fisicamente ruins ou por qualquer motivo, o SO não pode servir o arquivo inteiro para o FFmpeg, então naturalmente o FFmpeg não pode fazer nada sobre isso. Você deve obter um utilitário que possa ignorar essas partes e gravar as partes recuperáveis ​​em um novo arquivo, como o ddrescue .

Agora, se o protocolo do arquivo não for a causa dos erros, você pode tentar

ffmpeg -err_detect ignore_err -i video.mkv -c copy video_fixed.mkv
Gyan
fonte
11
Isso funciona, mas falha sem -c copy. Surpreendente que não funcione durante a recodificação.
intuited
Mesmo com isso, ainda estou conseguindo Invalid data found when processing input- e o ffmpeg desiste.
22419 Mikhail T.
Solução agradável ... se o átomo de moov (em um arquivo MP4) ainda estiver presente em algum lugar. E se nem estiver lá?
Gwyneth Llewelyn
Funciona no meu final com bondade surpreendente :)
shirish 06/01
5

Na busca de uma resposta melhor, uma maneira possível poderia ser:

ffmpeg -i video.mkv -c copy video_fixed.mkv

No entanto, tenho certeza de que existem algumas opções extras que podem tornar o resultado ainda melhor.

user3450548
fonte
11
Funciona para mim sempre que tenho algum tipo de problema com os metadados, registros de data e hora ou informações do contêiner. E é muito rápido, geralmente mais rápido que a velocidade de reprodução de 400x.
user24601
Este comando salvou minha bunda, para ser francamente.
neverMind9