Aujourd’hui, je me suis retrouvé devant une vidéo (un rush de Les Autres) qu’aucun lecteur de vidéo n’acceptait de lire. Et pour le coup, l’interface graphique de VLC n’affichait aucune erreur. Grâce à quelques quarts d’heure de recherche sur le Web j’ai réussi à trouver une solution. Voyons ça de suite !
L’avant-propos
Le premier problème rencontré a été de faire remonter une erreur significative afin d’avoir la possibilité de faire une recherche efficace.
Pour cela je me suis tourné vers VLC que j’ai lancé via un terminal.
Ce qui donne :
sox@SoX-Desktop:~$ vlc 20171207_151323.mp4 VLC media player 2.2.7 Umbrella (revision 2.2.7-0-g6e32381286) [0000561a9c193148] core libvlc: Lancement de vlc avec l'interface par défaut. Utilisez « cvlc » pour démarrer VLC sans interface. [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f61fcc49640] moov atom not found [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f61c4c01f60] moov atom not found [00007f61c4c01878] avcodec demux error: Could not open /home/sox/20171207_151323.mp4: Unknown error 1094995529 QObject::~QObject: Timers cannot be stopped from another thread
Les recherches
J’ai d’abord commencé par chercher Unknown error 1094995529
mais les retours étaient surtout axés autour du débuggage de VLC lui-même.
Et il me semblait peu probable que l’erreur vienne de là. J’ai donc cherché avec moov atom not found
.
Un
atom
est une unité de données autonomes qui contient des informations sur le fichier vidéo. Lemoov atom
, également connu sous le nom demovie atom
, définit l’échelle de temps, la durée, les caractéristiques d’affichage du film […] .
— Maxim Levkov
Traduit de l’anglais avec www.DeepL.com/Translator
Ok donc ça peut expliquer, s’il est manquant, pourquoi les lecteurs n’arrivent pas à lire ma vidéo.
Je me suis dit qu’il était peut-être possible de générer cet atom
.
La solution
Finalement, la solution viendra de recover_mp4, un utilitaire en ligne de commandes pour Windows dont l’objectif est justement de récupérer des vidéos corrompues.
La première étape est de faire analyser une vidéo fonctionnelle filmée dans les mêmes conditions que celle corrompue (même résolution et le même bitrate) afin de générer les fichiers d’en-tête :
recover_mp4.exe good_similar.mp4 --analyze
Une fois ceci fait, l’étape 2 consiste à récupérer la vidéo et le son séparément :
recover_mp4.exe 20171207_151323.mp4 recovered.h264 recovered.aac
Vous vous retrouvez donc avec la vidéo dans le fichier H264 et l’audio dans le fichier AAC. Vous pouvez alors utiliser un autre utilitaire pour les réassembler au sein d’un MP4. Pour ma part, j’ai utilisé FFmpeg :
ffmpeg.exe -r 30 -i recovered.h264 -i recovered.aac -bsf:a aac_adtstoasc -c:v copy -c:a copy recovered.mp4
Et voilà 🙂
La conclusion
Bon, à vrai dire ce n’est pas parfait car l’image et le son sont décalés. Et comme je n’ai besoin que de l’image car j’ai une prise de son tiers, je ne vais pas creuser plus.
Ça a donc bien sauvé mon rush !
Si le cas se présente à vous, n’hésitez pas à me dire ce que ça a donné dans les commentaires.
Mes sources :
Bonjour,
J’ai essayé ta solution , mais ça n’a pas fonctionné.
Mais je garde quand même l’utilitaire “recover_mp4” qui est très intéressant en le combinant avec “ffmpeg”…
Par contre, j’ai changé ma SD micro-card pour une Kingston classe 10 et là, miracle, tout fonctionne !
Il semblerait donc que le Raspberry PI soit très (trop ?) sensible à la qualité de la SD Card…
La 1ère carte était une 64 Go classe 10 mais sans aucune marque.
La 2nde une 32 Go classe 10 de marque Kingston Ultra.
Avec un peu de chance, ça évitera à d’autres de s’arracher les cheveux.
Bonjour,
Erf dommage.
Merci pour ton retour et ton partage d’info 🙂