Arregle archivos y transmisiones defectuosos con ffmpeg para que VLC y otros jugadores no se bloqueen

17

Me sucedió muchas veces que podría terminar en archivos de video corruptos:

  • video descargado de fuentes oficiales pero con torrent y por alguna razón no todas las piezas están en .mkv, .ts o .mp4
  • registros en formato .ts donde en cierto punto faltan los datos
  • videos copiados de un disco duro viejo con sectores dañados

Cuando reproduzco estos videos con VLC u otros jugadores, se reproducen hasta cierto punto y luego salen instantáneamente. A veces puedo intentar omitir la parte mala, pero podría encontrarme con otro sector malo y volver a tener una interrupción instantánea.

La pregunta es:

¿Puedo solucionar estos problemas (supongo que están relacionados con secuencias y fotogramas clave) con ffmpeg y tal vez en una copia -c, así que no tengo que volver a comprimir todo?

Lo que quiero lograr es un video completo donde se omitan las partes faltantes, prefiero un error en lugar de que mis videos se bloqueen.

usuario3450548
fuente

Respuestas:

26

Si partes del archivo residen en sectores físicamente defectuosos, o por alguna razón, el sistema operativo no puede enviar el archivo completo a FFmpeg, entonces, naturalmente, FFmpeg no puede hacer nada al respecto. Debería obtener una utilidad que pueda ignorar esas partes y escribir las partes recuperables en un nuevo archivo, como ddrescue .

Ahora, si el protocolo del archivo no es la causa de los errores, puede intentar

ffmpeg -err_detect ignore_err -i video.mkv -c copy video_fixed.mkv
Gyan
fuente
1
Esto funciona, pero falla sin él -c copy. Sorprendente que no funciona durante la recodificación.
intuido
Incluso con eso, todavía estoy recibiendo Invalid data found when processing input, y ffmpeg se rinde.
Mikhail T.
Buena solución ... si el átomo de moov (en un archivo MP4) todavía está presente en alguna parte. ¿Qué pasa si ni siquiera está allí?
Gwyneth Llewelyn
Funciona a mi fin con sorprendente bondad :)
Shirish
5

En la búsqueda de una mejor respuesta, una posible forma podría ser:

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

Sin embargo, estoy bastante seguro de que hay algunas opciones adicionales que pueden hacer que el resultado sea aún mejor ...

usuario3450548
fuente
1
Funciona para mí cada vez que tengo algún tipo de problema con los metadatos, las marcas de tiempo o la información del contenedor. Y es muy rápido, generalmente más rápido que la velocidad de reproducción de 400x.
user24601
Este comando salvó mi trasero, para ser sincero.
neverMind9