MP4 corrupto [grabación interrumpida]

Estaba grabando un archivo MP4 usando PlaysTV, y mi computadora tuvo una falla de energía a la mitad de la grabación. Estoy seguro de que el archivo contiene datos válidos, es solo que ningún reproductor multimedia lo reconocerá.

Para solucionarlo, probé Avidemux, probé numerosos programas enumerados en otras preguntas en stackexchange. Y hasta ahora nada ha funcionado.

La salida ffmpeg -i es la siguiente:

  libavutil      55. 24.100 / 55. 24.100
  libavcodec     57. 43.100 / 57. 43.100
  libavformat    57. 37.100 / 57. 37.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 46.100 /  6. 46.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000262d040] moov atom not found
2016_05_27_20_08_12-ses.mp4: Invalid data found when processing input

Salida de información multimedia:

General
Complete name                            : F:\vids\2016_05_27_20_08_12-ses.mp4
Format                                   : MPEG-4
Format profile                           : Base Media / Version 2
Codec ID                                 : mp42 (mp41/isom)
File size                                : 1.21 GiB

Probablemente existan servicios pagos que arreglarán este archivo para mí, sin embargo, dado que es un archivo (bastante) grande, cuestan demasiado.

¿Puede alguien ayudarme aquí?

Ocasionalmente tuve éxito con mplayer cuando ffmpeg no se preocupó por un archivo. Sea como fuere, no estoy tan seguro como usted de que el archivo contenga suficientes datos válidos para ser de alguna utilidad.
Preguntas similares sobre superusuario: superuser.com/q/1033251/514709 y superuser.com/q/417100/514709 .

Respuestas (3)

Recientemente encontré este problema exacto y pude reparar el archivo usando Untrunc , un programa creado específicamente para resolver este problema, como lo sugirió sparrowt en SuperUser :

Para este método necesitas:

  • otro archivo de video que no está roto

  • una instalación de linux (utilicé Ubuntu 12.04) y capacidad básica para usar una línea de comando.

Esto es lo que hay que hacer:

  1. Instale algunas bibliotecas de requisitos previos con este comando:

    sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev

  2. Descargue el código fuente de Untrunc del repositorio de github:

    wget https://github.com/ponchio/untrunc/archive/master.zip

  3. Descomprimir el código fuente:

    unzip master.zip

  4. Vaya al directorio donde se ha descomprimido:

    cd untrunc-master

  5. Compile el código fuente usando este comando (todo en una línea):

    g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil

    (puede intentar omitir este paso y usar el ejecutable ya provisto, pero no funcionó para mí)

  6. Entonces puedes arreglar el video. Necesita tanto el video roto como un video de trabajo de ejemplo.

    Idealmente, el video debería ser de la misma cámara y tener la misma resolución (el mío lo era, pero podría funcionar sin él). Además, si es al menos tan largo como el roto (preferiblemente más o menos igual), esto puede ayudar.

    Ejecute este comando en la carpeta donde descomprimió y compiló Untrunc, pero reemplace los bits /path/to/... con sus 2 archivos de video:

    ./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v

    Luego debería funcionar y, con suerte, producir un archivo reproducible llamadobroken-video_fixed.m4v

Eso es todo lo que has hecho!

VLC Media Player ahora debería poder reproducir el archivo. Sin embargo, puede estar informando la información de longitud incorrecta (Untrunc intenta adivinar/resolver esto, pero no siempre lo hace bien). Para solucionar esto, intente volver a codificar el video a través de otro programa.

Tengo este error al intentar construir:track.cpp:60:32: fatal error: libavcodec/h264dec.h
@unfa Tengo el mismo problema, así que utilicé el puerto de untrunc creado por @anthwlock, que es mucho más fácil de construir e instalar.

Actualizado : esta herramienta ahora puede recuperar archivos de más fuentes.

Prueba con recovery_mp4_to_h264 . Es un programa de línea de comandos y requerirá un buen archivo de referencia.

Uso como se indica:

recover_mp4 in_good_similar.mp4 --analyze
recover_mp4 in_corrupted.mp4 {out_video.h264 | out_video.hevc | --novideo} [out_audio.aac | out_audio.wav | out_audio.mp3 | out_audio.raw | --noaudio] [options]
Probé eso antes, decía que el formato no era compatible.
Restore.media , la empresa que fabrica recover_mp4, ya no ofrece esa descarga y, en cambio, solo repara archivos en línea a través de su sitio (por una tarifa). Todavía puede obtener una versión anterior de esa herramienta (legalmente; Restore.media incluso proporciona el enlace directo para la descarga ). Lamentablemente, es de código cerrado y solo está disponible para Windows (32/64 bits)...

También puede, para ahorrarse problemas, verificar que los datos estén allí primero. El tamaño del archivo es de 1,21 GB, ¿suena correcto para el tiempo hasta que se quedó sin energía?

Menciono esto porque algunos programas escriben los datos primero en la memoria... a veces fragmentos de datos muy grandes, antes de enviarlos al disco.

Con un MP4, el video debería reproducirse, si tiene encabezados válidos, hasta el último paquete correcto que contenga los fotogramas clave/i correctos.

Lo que me viene a la cabeza es que es posible que los datos no estén allí, ya que se habían guardado en la memoria, pero no en el disco: haría un registro de prueba (factorizando el tiempo que "debería estar" y compararía el archivo tamaños). Antes de saltar a través de aros.

El átomo MOOV, que contiene la información del flujo y las posiciones de las muestras, se escribe en el momento de finalizar el archivo, es decir, cuando todos los datos del flujo multimedia se han enviado al disco. Puede tener un MP4 con un átomo MOOV por adelantado con solo la información de transmisión, lo que hace que el archivo se pueda reproducir pero no buscar. Sin embargo, muy pocas aplicaciones o dispositivos escriben MP4 de esta manera.
Bandicam, una aplicación de captura de pantalla muy popular, tiene una opción en cuanto a la frecuencia con la que envía los datos capturados en la RAM al disco, por eso lo mencioné, solo para verificar. Hay tantas aplicaciones de software por ahí. Un archivo que no se puede buscar también se puede arreglar usando ffmpeg, y VLC también puede hacerlo insertando los fotogramas clave adecuados. Otro ejemplo de reescrituras de caché más grandes son los productos AJA, algunos de los cuales no escribirán en el disco hasta que hayan pasado 60 segundos.
Intenté usar una pieza de software freemium para ver si podía recuperarse, y sí, definitivamente los datos están ahí. Los datos de video son al menos. Sin embargo, como dije, realmente no quiero ir a comprar software para un archivo de video que no necesito tanto.