Nachdem ich meine Daten von einer Festplatte retten konnte, bei der aber teilweise allerdings schon Sektoren überschrieben worden waren, wollte ich die geretteten MP3s auf Fehler testen. Dazu fand ich drei Programme – mp3check, checkmp3 und mp3val. Unter Ubuntu lassen sich diese mit
sudo apt-get install mp3check checkmp3 mp3val
installieren.
Ich wollte nun alle mp3s finden, bei denen keines der Programme einen Fehler meldete. Mit checkmp3 habe ich zunächst alle Dateien prüfen lassen und das Resultat in die Datei checkmp3.log schreiben lassen:
find /path/to/mp3s -type f -name '*.mp3' -print0 | xargs -0 -r -n 1 -i sh -c 'checkmp3 -p -a -e "{}" 2>/dev/null | grep FILE_NAME | tee -a checkmp3.log || /bin/true'
Anschließend kann man mit
cat checkmp3.log | grep -v 'BAD_FRAMES 0' | awk -F '\t' '{print $1}' | sed 's/FILE_NAME //g' > checkmp3_bad_frames.log
diejenigen Dateien filtern und in die Datei checkmp3_bad_frames.log schreiben, die fehlerhafte Frames aufweisen.
Analog bin ich mit mp3check und mp3val verfahren und habe die fehlerhaften Dateien in mp3check.log bzw. mp3val.log schreiben lassen:
find /path/to/mp3s -type f -name '*.mp3' -print0 | xargs -0 mp3check -e -g mp3check.log > /dev/null
find /path/to/mp3s -type f -name '*.mp3' -print0 | xargs -0 mp3val -si -lmp3val.log
Analog zu checkmp3.log habe ich mittels
awk -F '"' '!/No supported tags in the file/ {print $2}' mp3val.log > mp3val_filenames.log
aus der mp3val.log noch die Dateinamen herausgefiltert und in mp3val_filenames.log gespeichert. Für MP3-Dateien ohne Tags wird von mp3val eine Warnung ausgegeben, deswegen habe ich die Dateien ohne MP3-Tag herausgefiltert.
Nachdem man nun 3 Dateien mit fehlerhaften Dateiennamen hat, wollte ich diese konsolidieren und als Resultat die Datei failed_mp3s erhalten. Das habe ich so geschafft:
cat mp3val_filenames.log mp3check.log checkmp3_bad_frames.log | sort | uniq > failed_mp3s
Durch ein
find /path/to/mp3s -type f -name '*.mp3' > mp3files
erzeugt man eine Datei mit allen MP3s, die überprüft wurden und durch ein
cat mp3files failed_mp3s | sort | uniq -u > correct_mp3s
erhält man schließlich mit der Datei correct_mp3s eine Liste derjenigen Dateien, die von keinem der Testprogramme als fehlerhaft erkannt wurden.
Wenn man die fehlerfreien Dateien nun in ein Verzeichnis kopieren möchte kann man das am einfachsten mit
cd path/to/mp3s
cat /path/to/correct_mp3s | sed 's/\/path\/to\/mp3s/./g' | tr '\n' '\00' | cpio -0 -p -d /path/to/healthy_mp3s/
erledigen.
Mit dem Checkmate Tool mpck kann man übrigens auch noch fehlerhafte MP3-Dateien finden und auf bonzoli.com ist ebenfalls eine Anleitung zur „Reinigung“ der MP3-Sammlung.
Leave a Reply