Le logiciel
Le logiciel utilisé pour la conversion est VLC media player. C'est un logiciel libre et gratuit.
Il est disponible sur le site officiel du projet VideoLAN ici. Le télécharger puis l'installer.
Conversion par lot
Pour effectuer la conversion par lot (sous Windows), il convient d'utiliser un script en ligne de commande, le logiciel VLC media player n'étant pas capable d'une telle opération nativement.
Pour cet exemple :
les fichiers sources sont au format AAC (extension de fichier
.m4a
). Plus d'informations
ici.
les fichiers de sorties sont au format WAV (extension de fichier
.wav
). Plus d'informations
ici.
les commandes de script utilisent l'interpréteur CMD de Windows. Plus d'informations
ici.
Le script est écrit en batch. Le code est disponible ci-dessous.
- convert_m4a_wav.bat
@ECHO OFF
CLS
SET /A _count=0
FOR %%G IN (*.m4a) DO SET /A _count+=1
SET /A _num=1
FOR %%G IN (*.m4a) DO (CALL :SUB_VLC "%%G")
IF NOT EXIST cdda MKDIR cdda
FOR %%G IN (*.m4a.wav*) DO (CALL :SUB_RENAME "%%G")
GOTO :eof
:SUB_VLC
SET _firstbit=%1
SET _qt="
CALL SET _newnm=%%_firstbit:%_qt%=%%
SET _commanm=%_newnm:,=_COMMA_%
CALL "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" --intf dummy %1 --sout=#transcode{acodec="s16l",ab="128",channels="2",samplerate="44100"}:standard{access="file",mux="wav",dst="%_commanm%.wav"} vlc://quit
ECHO fichier %_num%/%_count% converti
SET /A _num+=1
GOTO :eof
:SUB_RENAME
SET _origfnm=%1
SET _origfpath=%~dp1
SET _endbit=%_origfnm:*.m4a=%
CALL SET _newfilenm=%%_origfnm:.m4a%_endbit%=.wav"%%
CALL SET _newfilenm=%%_newfilenm:%_origfpath%=%%
SET _newfilenm=%_newfilenm:_COMMA_=,%
COPY %1 .\cdda\%_newfilenm%
DEL %1
GOTO :eof
:eof
Explications du code
Un minimum de connaissance en batch est nécessaire pour appréhender la suite.
Par convention, les noms de variables commencent par le caractère _ (tiret bas, underscore) pour les différencier des variables du système.
SET /A _count=0
initialise une variable qui va contenir le nombre de fichiers à traiter.
FOR %%G IN (*.m4a) DO SET /A _count+=1
est une boucle qui va incrémenter la variable précédemment créée pour chaque fichier trouvé. Ici seuls les fichiers avec l'extension .m4a
sont pris en compte. Le modificateur /A
de la commande SET
permet d'utiliser des expressions arithmétiques.
SET /A _num=1
initialise une variable qui va indiquer la position du fichier en cours de traitement.
FOR %%G IN (*.m4a) DO (CALL :SUB_VLC "%%G")
est une boucle qui va appeler la routine de conversion SUB_VLC
pour chaque fichier avec l'extension .m4a
. La routine reçoit un paramètre lors de son appel.
IF NOT EXIST cdda MKDIR cdda
crée le répertoire cdda
s'il n'existe pas déjà.
FOR %%G IN (*.m4a.wav*) DO (CALL :SUB_RENAME "%%G")
est une boucle qui va appeler la routine qui va renommer les fichiers créés et les mettre dans le répertoire cdda
. La routine reçoit un paramètre lors de son appel.
GOTO :eof
pour sortir du fichier de commandes à la fin du traitement.
Routine pour convertir
SET _firstbit=%1
SET _qt="
récupère le paramètre passé à la routine et le place dans une variable. La deuxième variable contient un guillemet double.
CALL SET _newnm=%%_firstbit:%_qt%=%%
L'appel à SET
par l'intermédiaire de CALL
autorise l'analyse de sous-chaîne dans une variable.
Ici, la variable _newnm
va contenir le contenu de la variable _firstbit
dans lequel les occurrences du contenu de la variable _qt
seront remplacées par rien. La syntaxe est %variable:ChaineATrouver=NouvelleChaine%
.
SET _commanm=%_newnm:,=_COMMA_%
remplace les caractères ,
(virgule) par le texte _COMMA_
afin de ne pas perturber la commande de conversion, le caractère ,
(virgule) ayant une signification particulière.
CALL "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" --intf dummy %1
--sout=#transcode{acodec="s16l",ab="128",channels="2",samplerate="44100"}
:standard{access="file",mux="wav",dst="%_commanm%.wav"}
vlc://quit
appelle le programme externe VLC. Le chemin d'accès est à modifier en fonction du système.
L'option –intf dummy
démarre VLC avec l'interface dummy c'est à dire aucune.
Le paramètre %1
ouvre le fichier dont le chemin est contenu dans la variable %1
c'est à dire celle passée en paramètre à la routine.
L'option –sout=
définit la chaîne de sortie du flux.
#transcode{acodec=“s16l”,ab=“128”,channels=“2”,samplerate=“44100”}
indique que VLC va transcoder le flux d'entrée en utilisant le codec audio s16l (celui utilisé pour le wav), avec un débit de 128kbit/s, en stéréo et une fréquence d'échantillonnage de 44100Hz.
:standard{access=“file”,mux=“wav”,dst=“%_commanm%.wav”}
indique à VLC d'utiliser une sortie standard en utilisant la méthode de sortie file (pour écrire un fichier), en utilisant le multiplexeur wav et la destination sera %_commanm%.wav. Le script remplace à la volée %_commanm%
par le contenu de la variable.
vlc://quit
indique à VLC de fermer son programme lorsque le travail est terminé.
ECHO fichier %_num%/%_count% converti
SET /A _num+=1
pour afficher la progression de la conversion. Puis la variable indiquant le numéro de fichier est incrémentée.
Routine pour renommer
SET _origfnm=%1
récupère le paramètre passé à la routine et le place dans une variable.
SET _origfpath=%~dp1
ne conserve que le lecteur et le chemin du fichier du paramètre 1).
SET _endbit=%_origfnm:*.m4a=%
ne garde que la partie du nom de fichier après m4a.
CALL SET _newfilenm=%%_origfnm:.m4a%_endbit%=.wav"%%
remplace l'extension du fichier par .wav
et ajoute un guillemet double.
CALL SET _newfilenm=%%_newfilenm:%_origfpath%=%%
supprime le chemin pour ne garder que le nom de fichier.
SET _newfilenm=%_newfilenm:_COMMA_=,%
remplace le texte _COMMA_
par une ,
(virgule) pour obtenir le nom de fichier d'origine.
COPY %1 .\cdda\%_newfilenm%
DEL %1
copie le fichier dans le sous-répertoire cdda
en lui affectant un nouveau nom puis efface le fichier transcodé.
Pour aller plus loin
Documentation de VLC pour l'utilisation en ligne de commande ici.
Conversion vers le format wav avec VLC ici.