Hier, j'étais en train de filmer une scène avec mon téléphone mais soudainement l'application s'est effondrée et lorsque j'essaie d'ouvrir le fichier m4v généré, il indique que celle-ci est corrompue.
J'ai téléchargé les fichiers vidéo (environ 36 Mo) sur mon PC et j'essaie de l'ouvrir et de le réparer. Pouvez-vous me suggérer un moyen de le faire?
FFMPEG info
Comme suggéré dans les commentaires, essayez 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
Ici c'est 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.
Il est possible de réparer le fichier MP4 ou M4V endommagé à l’aide de Untrunc .
Pour cette méthode, vous avez besoin de:
un autre fichier vidéo qui n'est pas cassé
une installation linux (j'ai utilisé Ubuntu 12.04) et la capacité de base d'utiliser une ligne de commande.
Voici ce qu'il faut faire:
Installez certaines bibliothèques pré-requises avec cette commande:
Sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
Téléchargez le code source de Untrunc à partir du dépôt github:
wget https://github.com/ponchio/untrunc/archive/master.Zip
Décompressez le code source:
unzip master.Zip
Allez dans le répertoire où ça a été décompressé:
cd untrunc-master
Compilez le code source en utilisant cette commande (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 d'utiliser l'exécutable prêt à l'emploi, mais cela n'a pas fonctionné pour moi)
Ensuite, vous pouvez réellement réparer la vidéo. Vous avez besoin à la fois de la vidéo cassée et d'un exemple de vidéo de travail.
Idéalement, la vidéo devrait provenir de la même caméra et avoir la même résolution (la mienne l'était, mais cela pourrait fonctionner sans). De plus, s’il est au moins aussi long que celui brisé (de préférence à peu près le même), cela peut aider.
Exécutez cette commande dans le dossier où vous avez décompressé et compilé Untrunc, mais remplacez les bits/path/to/... par vos 2 fichiers vidéo:
./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v
Ensuite, il devrait abandonner et produire, espérons-le, un fichier lisible appelé broken-video_fixed.m4v
Ça y est tu es fait!
VLC Media Player devrait maintenant pouvoir lire le fichier. Cependant, il se peut qu’il signale des informations de longueur erronée (Untrunc essaie de deviner/résoudre ce problème, mais ne le fait pas toujours correctement). Pour résoudre ce problème, essayez de ré-encoder la vidéo via un autre programme.
[Merci au commentaire de slhck pour la suggestion d'essayer Untrunc.]
[Merci beaucoup à Federico Ponchio pour avoir codé Untrunc en premier lieu, pour résoudre ce problème précis.]
Si quelqu'un d'autre tombe sur cette question, j'ai également essayé l'application dont Sparrow parlait, mais cela n'a pas fonctionné pour moi (voir les rapports de bugs que j'ai créés dans le référentiel de développeurs). Peut-être était-ce dû au fait qu'il ne s'agissait pas d'un fichier mp4, mais d'un fichier MOV ...
Ce qui m'a aidé est ce post: http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not- a trouvé
Ils renvoient à un programme appelé "HD Video Repair Utility" ( http://grauonline.de/cmsimple2_6/en/?Solutions:HD_Video_Repair_Utility ), qui est beaucoup moins cher que Treasured ( http: // aeroquartet. com/movierepair/réparation ). 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 je l'ai fait fonctionner partiellement. Après avoir ré-encodé avec ffmpeg (j'ai eu quelques erreurs), je me suis rendu compte qu'une partie de l'audio avait disparu. Dans les journaux (volontiers, l'utilitaire de réparation vidéo en contient), il n'y avait plus aucune mention de l'audio après un moment donné. Je vais le prendre tel quel ...
@sparrowt Vos instructions actuelles ne fonctionnaient pas sur ma récente installation de Ubuntu 16.10. J'ai eu 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 répertoire untrunc , vous devrez peut-être télécharger libav séparément plutôt que d'utiliser la version du référentiel 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 fil.
Si vous avez une distribution Ubuntu récente, vous pouvez installer docker
et exécuter:
docker run -v `pwd`:/vol -it synctree/untrunc /vol/GOOD-reference-file.MP4 /vol/BAD-corrupt-file.mdt
Lisez les autres commentaires pour plus d'explications.
C'était le plus rapide pour moi!
Si untrunc ne prend pas en charge le codec dans votre fichier, vous pouvez essayer de le réparer avec un éditeur hexadécimal:
mdat
dans le fichier "ok" par la section mdat
dans le fichier "cassé", sans l'en-tête (c.-à-d. copier uniquement les octets après "mdat")mdat
, la valeur actuelle sera l'ancienne taille (fichier "ok" mdat
section), remplacez-la par la nouvelle taille (fichier "cassé" taille de la section mdat
)J'ai fini par coder un programme simple pour le faire: https://github.com/golimarrrr/fix-3gp
Le programme et manuellement à l’aide de l’éditeur hexadécimal doivent créer le même fichier fixe