68 votes

Comment ouvrir et réparer un fichier vidéo m4v ou mp4 ?

Hier, j'étais en train de filmer une scène avec mon téléphone mais soudainement l'application a planté et quand j'essaie d'ouvrir le m4v généré il dit qu'il est corrompu.

J'ai téléchargé les fichiers vidéo (environ 36MB) sur mon PC et j'essaie de les ouvrir et de les réparer. Pouvez-vous me suggérer un moyen de le faire ?

FFMPEG info

Comme suggéré dans les commentaires, j'essaie de vérifier ce que FFMPEG me dit à propos de ce fichier avec cette commande

ffmpeg.exe -i VID_20120425_144739.m4v -c:v copy -c:a copy out.mp4 2> log.txt

Voici le résultat :

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

Les deux dernières lignes sont affichées en rouge.

66voto

sparrowt Points 2233

Il est possible de réparer le fichier mp4 ou m4v cassé à l'aide des outils suivants Untrunc .

Pour cette méthode, vous avez besoin d'un autre fichier vidéo du même appareil qui n'est pas brisé.

Comment installer untrunc

Pour la compilation, vous devez disposer d'une installation Linux (idéalement Ubuntu) et savoir utiliser une ligne de commande. Vous pouvez également sauter cette partie et exécuter untrunc via Docker (voir la réponse ci-dessous ), si vous en disposez.

Voilà ce qu'il faut faire :

  1. Installez certaines bibliothèques pré-requises avec cette commande :

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

  2. Obtenez le code source d'Untrunc depuis le dépôt GitHub (choisissez une méthode) :

    • wget https://github.com/ponchio/untrunc/archive/master.zip && unzip master.zip && cd untrunc-master
    • ou git clone https://github.com/ponchio/untrunc.git && cd untrunc
  3. Compilez le code source en utilisant cette commande (sur une seule ligne) :

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

    (vous pouvez essayer de sauter cette étape et utiliser l'exécutable fourni, mais cela n'a pas fonctionné pour moi)

  4. Ensuite, vous pouvez vraiment réparer la vidéo. Vous avez besoin à la fois de la vidéo cassée et d'un exemple de vidéo qui fonctionne.

Comment réparer la vidéo

Trouvez une autre vidéo qui fonctionne, idéalement de la même caméra et de préférence au moins aussi longue que celle qui est cassée ; également la même résolution si possible (je pense que cela peut aider mais ce n'est pas essentiel).

Exécutez cette commande dans le dossier où vous avez dézippé et compilé Untrunc, mais remplacez la balise /path/to/... bits avec vos 2 fichiers vidéo :

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

Ensuite, il devrait s'activer et produire, avec un peu de chance, un fichier jouable appelé broken-video_fixed.m4v

C'est ça, vous avez terminé !

VLC Media Player devrait maintenant être en mesure de lire le fichier. Cependant, il se peut que les informations sur la longueur du fichier soient erronées (Untrunc essaie de le deviner, mais ne le fait pas toujours). Pour résoudre ce problème, essayez de ré-encoder la vidéo avec un autre programme.

[Merci au commentaire de slhck pour la suggestion d'essayer Untrunc].

(Merci à Federico Ponchio pour avoir codé Untrunc en premier lieu, pour résoudre ce problème exact).

9voto

Netty Points 1

Si quelqu'un d'autre tombe sur ce sujet, j'ai aussi essayé l'application dont sparrowt parlait, mais elle n'a pas fonctionné pour moi (voir les rapports de bogue que j'ai créés dans le dépôt des développeurs). Peut-être que c'était parce que ce n'était pas un fichier mp4 mais un fichier MOV ...

Ce qui m'a aidé, c'est ce post : http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found

Ils renvoient à un programme appelé "HD Video Repair Utility" ( http://grauonline.de/cmsimple2_6/en/?Solutions:HD_Video_Repair_Utility ), qui est bien moins cher que Treasured ( http://aeroquartet.com/movierepair/repair ). Ils ont même fait remarquer qu'il existait une version antérieure (version 1.5) qui ne coûtait rien ( http://nagasoft.cn/download/videorepair1.5.zip ) !

J'ai essayé de réparer le fichier en utilisant la version 1.5 et j'ai réussi à le faire fonctionner partiellement. Après avoir ré-encodé avec ffmpeg (j'ai eu quelques erreurs), j'ai réalisé qu'une partie de l'audio avait disparu. Dans les journaux (heureusement que l'utilitaire de réparation vidéo en a), il n'y avait plus de mention de l'audio après un certain temps. Je vais le prendre tel quel ...

9voto

Vous pouvez installer docker (disponible pour tous les principaux systèmes d'exploitation) et exécutez :

docker run -v $(pwd):/vol -it synctree/untrunc /vol/GOOD-reference-file.MP4 /vol/BAD-corrupt-file.mdt

La syntaxe est pour Bash sous Linux ou macOS. Ici, GOOD-reference-file.MP4 y BAD-corrupt-file.md5 doivent tous deux être dans votre répertoire courant, et le répertoire sera monté sur /vol dans le conteneur Docker.

Lisez les autres commentaires autour pour une explication plus approfondie.

C'était le plus rapide pour moi !

7voto

freeseek Points 171

@sparrowt Vos instructions actuelles n'ont pas fonctionné sur ma récente installation Ubuntu 16.10. J'ai obtenu l'erreur suivante en compilant untrunc :

track.cpp: In member function ‘int Codec::getLength(unsigned char*, int)’:
track.cpp:204:40: error: ‘avcodec_alloc_frame’ was not declared in this scope
   AVFrame *frame = avcodec_alloc_frame();

Comme expliqué dans le sans troncature vous devrez peut-être télécharger libav séparément plutôt que d'utiliser la version du dépôt Ubuntu. Le code suivant a fonctionné pour moi :

sudo apt-get install unzip yasm g++ zlib1g-dev libbz2-dev
cd /tmp/
wget https://github.com/ponchio/untrunc/archive/master.zip
unzip master.zip
cd untrunc-master
wget http://libav.org/releases/libav-12.2.tar.xz
tar xvf libav-12.2.tar.xz
cd libav-12.2
./configure
make
cd ..
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -I./libav-12.2 -L./libav-12.2/libavformat -lavformat -L./libav-12.2/libavcodec -lavcodec -L./libav-12.2/libavresample -lavresample -L./libav-12.2/libavutil -lavutil -lpthread -lz -lbz2
./untrunc /path/to/working-video.mp4 /path/to/broken-video.mp4

Cela a créé un fichier appelé broken-video_fixed.mp4 qui a fonctionné pour moi. Merci beaucoup d'avoir lancé ce sujet.

3voto

golimar Points 1172

Dans le cas où untrunc ne supporte pas le codec présent dans votre fichier, vous pouvez essayer de le corriger avec un éditeur hexagonal :

  1. prenez un autre fichier avec le même format, j'en ai un plus grand mais n'importe quelle longueur peut fonctionner.
  2. ouvrir les deux fichiers dans un éditeur hexagonal
  3. remplacer le mdat dans le fichier "ok" avec la section mdat dans le fichier "cassé", sans l'en-tête (c'est-à-dire en ne copiant que les octets après 'mdat').
  4. cela fonctionne probablement déjà comme cela, sinon, les 4 octets avant 'mdat' spécifient la taille du fichier mdat la valeur actuelle sera l'ancienne taille (fichier "ok"). mdat de la section), le remplacer par la nouvelle taille (fichier "cassé"). mdat taille de la section)

J'ai fini par coder un programme simple pour le faire : https://github.com/golimarrrr/fix-3gp

Le programme et l'utilisation manuelle de l'éditeur hexagonal devraient créer le même fichier fixe.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X