Table des matières

Conversion par lot avec VLC media player

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 :

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.

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.

1)
%~I         - étend %I en supprimant les guillemets (")
%~fI        - étend %I en nom de chemin d'accès reconnu
%~dI        - étend %I en lettre de lecteur uniquement
%~pI        - étend %I en chemin d'accès uniquement
%~nI        - étend %I en nom de fichier uniquement
%~xI        - étend %I en extension de fichier uniquement
%~sI        - chemin étendu contenant uniquement des noms courts
%~aI        - étend %I en attributs du fichier
%~tI        - étend %I en date/heure du fichier
%~zI        - étend %I en taille du fichier

Vous pouvez combiner les modificateurs pour obtenir des résultats composés :
%~dpI       - étend %I en lettre de lecteur et chemin d'accès uniquement
%~nxI       - étend %I en nom de fichier et extension uniquement
%~fsI       - étend %I en nom de chemin complet avec noms courts uniquement
%~ftzaI     - étend %I en DIR comme ligne en sortie