À la recherche des .mp3 corrompus...
Dernièrement, j’ai voulu retagguer tous mes mp3 pour que les tags soient tous codés en UTF-8. En effet, j’ai un lecteur mp3 Sony qui utilise normalement l’affreux logiciel Sonic Stage pour le transfert des mp3 dessus. J’utilise à la place le logiciel JSymphonic qui est très bien mais qui se mélange quelque peu les pinceaux entre l’encoding utilisé par le système d’exploitation, celui utilisé par Java, celui utilisé dans les tags…
Par exemple, sur 3 albums de Bénabar, je me retrouvais sur le lecteur avec 3 écritures différentes : Bénabar, B?nabar, B-nabar (avec un carré à la place du -).
J’ai utilisé EasyTag pour “corriger” les tags mais au final, certains mp3 ont été corrompus :(
Comme j’ai une bonne partie des CD correspondants, ce n’est pas trop gênant, le problème c’est de retrouver lesquels sans passer des heures à chercher à la main ;)
Avec la commande file
, j’ai pu trouver la différence entre les bons et les mauvais fichiers.
$ file perso/music/Albums\\ FR/Junior\\ Tshaka/La\\ Jungle/01\\ -\\ Dada\\ Wa.mp3
perso/music/Albums FR/Junior Tshaka/La Jungle/01 - Dada Wa.mp3: Audio file with ID3 version 2.4.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, Stereo
$ file perso/music/Albums\\ FR/Grégoire/Toi_+_Moi/01_-_Ta_main.mp3
perso/music/Albums FR/Grégoire/Toi_+_Moi/01_-_Ta_main.mp3: Audio file with ID3 version 2.4.0, contains:
Ne restait plus qu’à scripter
[bash]
#!/bin/sh
files=`find "$1" -name "*.mp3"`
IFS=$'\
'
for f in $files; do
media=`file $f | grep -o 'contains: .*' | cut -d: -f2`
if [ "$media" == "" ] || [ "$media" == " " ]; then
echo "$f";
fi
done
La modification de la variable IFS est nécessaire pour qu’il ne coupe pas les noms de fichiers sur les espaces.