Ayer estaba filmando una escena con mi teléfono, pero de repente la aplicación se bloqueó y cuando trato de abrir el m4v generado, dice que está dañado.
He descargado los archivos de video (alrededor de 36 MB) en mi PC y estoy tratando de abrirlos y repararlos. ¿Me puede sugerir una forma de hacerlo?
Información de FFMPEG
Como se sugiere en los comentarios, trato de verificar lo que FFMPEG me dice sobre ese archivo con este comando
ffmpeg.exe -i VID_20120425_144739.m4v -c:v copy -c:a copy out.mp4 2> log.txt
Aquí está el resultado:
ffmpeg version N-40126-ga4b58fd Copyright (c) 2000-2012 the FFmpeg developers
built on Apr 26 2012 03:29:50 with gcc 4.6.3
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 51. 47.100 / 51. 47.100
libavcodec 54. 15.100 / 54. 15.100
libavformat 54. 3.100 / 54. 3.100
libavdevice 53. 4.100 / 53. 4.100
libavfilter 2. 72.100 / 2. 72.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 11.100 / 0. 11.100
libpostproc 52. 0.100 / 52. 0.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 003fc940] moov atom not found
VID_20120425_144739.m4v: Invalid data found when processing input
Las últimas dos líneas se muestran en rojo.
Respuestas:
Es posible reparar el archivo mp4 o m4v roto usando Untrunc .
Para este método, necesita otro archivo de video del mismo dispositivo que no esté roto.
Cómo instalar
untrunc
Para la compilación, necesita una instalación de Linux (idealmente Ubuntu) y la capacidad básica de usar una línea de comandos. También puede omitir esta parte y ejecutar a
untrunc
través de Docker (consulte la respuesta a continuación ), si tiene eso.Esto es lo que hay que hacer:
Instale algunas bibliotecas de requisitos previos con este comando:
sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
Obtenga el código fuente de Untrunc del repositorio de GitHub (elija un método):
wget https://github.com/ponchio/untrunc/archive/master.zip && unzip master.zip && cd untrunc-master
git clone https://github.com/ponchio/untrunc.git && cd untrunc
Compile el código fuente usando este comando (todas 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 listo para usar, pero no funcionó para mí)
Entonces puedes arreglar el video. Necesita tanto el video roto como un video de trabajo de ejemplo.
Como arreglar el video
Encuentre otro video de trabajo, idealmente de la misma cámara y preferiblemente al menos tan largo como el roto; También la misma resolución si es posible (creo que esto puede ayudar, aunque no es esencial).
Ejecute este comando en la carpeta donde descomprimió y compiló Untrunc, pero reemplace los
/path/to/...
bits con sus 2 archivos de video:Entonces debería desaparecer y, con suerte, producir un archivo reproducible llamado
broken-video_fixed.m4v
¡Eso es todo!
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 este problema, vuelva a codificar el video a través de otro programa.
[Gracias al comentario de slhck por la sugerencia de probar Untrunc.]
[Muchas gracias a Federico Ponchio por codificar Untrunc en primer lugar, para resolver este problema exacto.]
fuente
untrunc-master
. Luego, ejecute: ./untrunc goodfile.mp4 badfile.mp4 Un archivo de 2 gb tardó aproximadamente 3 minutos y solo tuve que volver a sincronizar el audio. Todo lo demás estuvo bien.Si alguien más tropieza con esto, también probé el gorrión de la aplicación del que hablaba, pero no funcionó para mí (vea algunos informes de errores que creé en el repositorio de desarrolladores). Tal vez esto fue porque no era un archivo mp4 sino un archivo MOV ...
Lo que me ayudó fue esta publicación: http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found
Se vinculan a un programa llamado "HD Video Repair Utility" ( http://grauonline.de/cmsimple2_6/en/?Solutions:HD_Video_Repair_Utility ), que es mucho más barato que Treasured ( http://aeroquartet.com/movierepair/repair ) . ¡Incluso señalaron que había una versión anterior (versión 1.5) que no costaba nada ( http://nagasoft.cn/download/videorepair1.5.zip )!
Intenté reparar el archivo con la versión 1.5 y lo conseguí en parte. Después de volver a codificar con ffmpeg (obtuve algunos errores allí), me di cuenta de que una parte del audio había desaparecido. En los registros (con mucho gusto la utilidad Video Repair Utility tiene algunos), no hubo más mención de audio después de un tiempo determinado. Lo tomaré como está ...
fuente
Puede instalar
docker
(disponible para todos los principales sistemas operativos) y ejecutar:La sintaxis es para Bash en Linux o macOS. Aquí,
GOOD-reference-file.MP4
yBAD-corrupt-file.md5
ambos deben estar en su directorio actual, y el directorio se montará/vol
en el contenedor Docker.Lea los otros comentarios para obtener una explicación más detallada.
¡Esto fue lo más rápido para mí!
fuente
Dockerfile
está disponible aquí si alguien quiere ver lo que se ejecutará antes de ejecutarlo en su computadora: github.com/synctree/docker-untrunc También hay un repositorioDockerfile
real en esteuntrunc
momento, no lo he probado ni comparado en detalle, pero menciónelo@sparrowt Sus instrucciones actuales no funcionaron en mi instalación reciente de Ubuntu 16.10. Recibí el siguiente error al compilar untrunc:
Como se explica en el repositorio no trunc , es posible que deba descargar libav por separado en lugar de utilizar la versión en el repositorio de Ubuntu. El siguiente código funcionó para mí:
Esto creó un archivo llamado broken-video_fixed.mp4 que funcionó para mí. Muchas gracias por iniciar este hilo.
fuente
h264dec.h
? porquetrack.cpp
está tratando de incluirlo y no puedo encontrarlo en ningún lado: /sudo apt-get install yasm
,sudo apt-get install libbz2-dev
y, para superar una referencia indefinida a 'clock_gettime', añadir-lrt
al final de lag++
línea de comandos (ver stackoverflow.com/a/2418175/550712 ). Convirtió aproximadamente 2/3 de mi video.En caso de que untrunc no sea compatible con el códec dentro de su archivo, puede intentar solucionarlo con un editor hexadecimal:
mdat
sección en el archivo "ok" con lamdat
sección en el archivo "roto", sin el encabezado (es decir, copie solo los bytes después de 'mdat')mdat
sección, el valor actual será el tamaño anterior (mdat
tamaño de la sección del archivo "ok" ), reemplácelo con el nuevo tamaño (" roto "mdat
tamaño de sección del archivo )Terminé codificando un programa simple para hacerlo: https://github.com/golimarrrr/fix-3gp
Tanto el programa como a mano usando el editor hexadecimal deberían crear el mismo archivo fijo
fuente
¿Has intentado abrir el archivo con VLC Player ? Por lo general, es bastante bueno para reparar archivos dañados.
fuente