web-dev-qa-db-fra.com

Récupération d’enregistrements m4a corrompus

J'utilise Ubuntu sur mon ordinateur à l'école cette année. J'enregistre généralement les conférences que je ne peux pas espérer suivre, mais j'ai l'autorisation de le faire. J'utilisais l'enregistreur audio par défaut que vous pouvez installer avec Sudo apt-get install audio-recorder parce que c'était le plus facile à utiliser. Plus tôt dans le semestre, les enregistrements étaient bons. Mais maintenant, ils sont corrompus dès que l'enregistrement est terminé. Ils sont au format .m4a.

J'ai essayé de nombreux tutoriels, y compris l'édition des données hexadécimales de l'enregistrement, sans succès. Je ne sais pas où l'enregistrement commence car lorsque j'essaie de créer un nouvel enregistrement, il est corrompu dès le départ. J'ai essayé d'utiliser ffmpeg pour obtenir cette erreur, moov atom not found, dont la recherche ne permet pas de résoudre le problème. Ou j'obtiens une erreur en disant protocol not found. Did you mean in.m4a? qui est le nom du fichier, que j'ai tapé correctement. ffmpeg renvoie une erreur "protocole introuvable". Ensuite, il est indiqué que vous voulez dire le fichier que j'ai mis dans. Faad renvoie cette erreur: Unable to find correct AAC sound track in the MP4 file. J'ai également essayé un service de réparation mp4 et cela fonctionne, le fichier devrait pouvoir être corrigé. . Mais cela coûterait 86 $ pour cela, et je dois corriger 6 enregistrements.

J'ai essayé de désinstaller et de réinstaller les codecs restreints.

Toute aide serait grandement appréciée.

4
KeenanKer

Voir ici , au bas de la page.
Installer la façade si nécessaire Sudo apt install faad
dd ibs=1 skip=44 if=yourfilename.m4a of=raw.m4a
faad -a newname.m4a raw.m4a
Tous les remerciements à l'auteur du lien que je pointe, car je ne sais pas ce que je fais, mais je l'ai testé sur votre fichier plus volumineux, et cela fonctionne. La première commande prend du temps. Sois patient. Essayé sur Ubuntu 16.04.

Comme indiqué dans les commentaires, le résultat peut être ouvert dans VLC, mais pas dans Audacious. Mais nous pouvons utiliser vlc pour le transcoder ou le réécrire dans un autre format. Le script ci-dessous convertit tous les fichiers * .m4a du répertoire actuel en * .mp3.
#!/bin/bash

quote=\"  
executable="/usr/bin/vlc"
argument3=vlc://quit

#transcoding parameters
acodecvalue=mp3
bitratevalue=128
accessvalue=file
muxvalue=raw

for x in *.m4a; do
    inputname="${x}"
    strippedname=${x%.m4a}
    outputname=${strippedname}.mp3
    quote_outputname=${quote}./${outputname}${quote}
    echo ${inputname}
    echo ${quote_outputname}
    qtranscode=#transcode{vcodec=none,acodec=$acodecvalue, # continue line !
    ab=$bitratevalue,channels=$channelsvalue}              # continue line !
    :standard{access=$accessvalue,mux=$muxvalue,dst=${quote_outputname}}
    argument1="$inputname"
    argument2=--sout=$qtranscode
    "$executable" -I dummy "$argument1" "$argument2" "$argument3"
done
4
oscar1919

Cela fonctionne, mais les valeurs utilisées dans dd ne conviennent pas à tous les cas. Ici l'auteur du post original explique pourquoi: Post original de cette solution

En gros, vous supprimez l'en-tête du fichier en sautant 44 octets avec dd, mais cette valeur varie d'un fichier à l'autre, comme cela m'est arrivé.

La solution consiste à utiliser un éditeur hexadécimal (je suggère sur une copie du fichier cassé) et de tout supprimer du début à la fin du mot "mdat". Dans mon cas, c'était 28 octets au lieu de 44.

J'utilise 0xED comme éditeur hexadécimal sur mac (c'est gratuit et fonctionne sur le dernier système d'exploitation Mac, Mojave, à la date de cette écriture). En outre, pour mac, vous pouvez installer faad avec Homebrew en lançant

brew install faad2

Vous devrez peut-être spécifier la fréquence d'échantillonnage du fichier si elle diffère de 44,100Hz lors de l'utilisation de la façade avec les commutateurs

Si faad renvoie cette erreur Error: Maximum number of bitstream elements exceeded, cela peut vouloir dire que vous avez supprimé trop d'octets depuis le début du fichier, comme cela m'est arrivé au début.

Enfin, une fois que vous avez traité le fichier raw avec faad, vous souhaiterez réencoder le fichier m4a pour vous assurer que vous avez un fichier correct et compatible. Cela peut facilement être fait avec ffmpeg.

ffmpeg -i newfile.m4a -c:a aac output.m4a
1
Diego Alifano