Lorsque j’ ajoute des CDs audio à ma collection, je les encode systématiquement au format FLAC afin de les stocker, sans perte, sur mon NAS (en partie car je les écoute essentiellement depuis un ampli réseau qui me permet d’ y accéder facilement). La qualité des fichiers FLAC stockés est identique à celle des CDs originaux, mais chaque fichier FLAC occupe bien plus de place que s’ il était encodeé en OGG (ou MP3) même avec peu de perte de qualité. Or, la qualité OGG (ou MP3) me suffit largement pour la voiture. Et justement, je voudrais m’ embarquer toute ma collection de musique sur une mini clé USB dans la voiture… mais convertie en OGG (ou MP3).
Les données du problème:
- une collection existante de fichiers FLAC dans une arborescence sur un NAS Synology
- la volonté de convertir chaque fichier FLAC en OGG (ou MP3)
- la volonté de conserver l’arborescence originale et les fichiers FLAC
- la volonté que chaque OGG (ou MP3) généré se trouve au même endroit que le FLAC correspondant dans l’arborescence
- la volonté de ne pas avoir à copier l’arborescence originale sur aucun support avant de faire la conversion
- une fois tous les OGG (ou MP3) générés, la volonté de les déplacer, tout en gardant l’arborescence originale sur un support externe
Pour éviter de copier l’intégralité de la collection de FLAC sur un support, j’ai décidé d’utiliser mon système Ubuntu et d’y monter l’arborescence du NAS. L’autre intérêt est que ce sera mon système Ubuntu qui se chargera de la conversion en OGG avec oggenc (et en MP3 avec ffmpeg) ce qui s’avère fort utile dans le cas de l’utilisation de oggenc, puisque cette commande n’est par défaut par disponible sur un NAS Synology.
Pour cela, il est nécessaire d’activer sur le NAS, le service ssh, et le sous-système sftp (sur le port 2325 dans mon cas), et d’autoriser un utilisateur à s’en servir. Une fois fait, sur le système hôte Ubuntu, il suffit d’utiliser sshfs pour monter l’arborescence /volume1/music du NAS dont l’ip est ici 192.168.1.100:
mkdir ~/nas && sshfs -p 2325 utilisateur@192.168.1.100:/music ~/nas
Maintenant, on a toute l’arborescence /volume1/music du NAS accessible dans le dossier ~/nas sur le système hôte Ubuntu.
Pour une conversion en OGG:
On peut maintenant lancer la commande de conversion, qui va, pour chaque fichier FLAC rencontré, en convertir une copie en un fichier OGG en y conservant les données (titre, album, artiste, etc.). Ici on choisi une qualité de 6, mais vous pouvez bien sûr modifier ce paramètre ainsi que bien d’autres (oggenc –help):
find ~/nas -type f -iname *.flac -exec oggenc -q 6 "{}" \;
Dans mon cas, cette commande a pris plus de 48h car le nombre de fichiers présent sur le NAS est assez conséquent… Mais une fois terminée, j’avais bien autant de fichiers OGG que de FLAC, dans la bonne arborescence, avec les bons titres et les bonnes infos, du moins pour ceux que j’ai vérifié :).
Pour une conversion en MP3:
On peut maintenant lancer la commande de conversion, qui va, pour chaque fichier FLAC rencontré, en convertir une copie en un fichier MP3 en y conservant les données (titre, album, artiste, etc.). Iici on choisi une qualité de au top (-q:a 0) , mais vous pouvez bien sûr modifier ce paramètre ainsi que bien d’autres (ffmpeg –help):
find ~/nas -type f -iname "*.flac" -exec bash -c 'd=$(dirname "{}"); b=$(basename "{}") && ffmpeg -i "{}" -q:a 0 "$d/${b%.*}.mp3"' \;
Copie des fichiers obtenus sur support externe :
Reste à copier l’arborescence sur un support externe, une clé USB (montée dans /media/utilisateur/key) dans mon cas, sans détruire l’arborescence originale, mais sans y embarquer les FLAC, trop volumineux (remplacer ogg par mp3 pour les fichiers MP3):
rsync -av --remove-source-files --include='*.ogg' --include='*/' --exclude='*' ~/nas/ /media/utilisateur/key/
L’option –remove-source-files permet de supprimer les fichiers OGG (ou MP3) de la source après la copie vers la clé. Reste plus qu’à démonter la clé et à la brancher dans la voiture!
Alternative
On pourrait effectuer les 2 opérations (conversion et copie) en une. On suppose toujours que le dossier de destination est /media/utilisateur/key/. La commande suivante traite chaque fichier flac, construit le chemin de destination à partir du dossier source, et le converti en ogg (ou mp3) dans le dossier destination (adapter options et chemins selon vos besoins):
Conversion et copie ogg:
find ~/nas -type f -iname "*.flac" -exec bash -c 'd=$(dirname "{}"| sed "s/\/home\/utilisateur\/nas/\/media\/utilisateur\/key/g"); b=$(basename "{}") && mkdir -p "${d}" && oggenc -q 6 "{}" -o "$d/${b%.*}.ogg"' \;
Conversion et copie mp3
find ~/nas -type f -iname "*.flac" -exec bash -c 'd=$(dirname "{}"| sed "s/\/home\/utilisateur\/nas/\/media\/utilisateur\/key/g"); b=$(basename "{}") && mkdir -p "${d}" && ffmpeg -n -i "{}" -q:a 0 "$d/${b%.*}.mp3"' \;
Voilà.