Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
tutoriels:conversion_par_lot_avec_vlc [2015/05/06 17:00] – [Conversion par lot] luc | tutoriels:conversion_par_lot_avec_vlc [2015/05/06 20:19] (Version actuelle) – luc |
---|
* les fichiers sources sont au format AAC (extension de fichier ''.m4a''). Plus d'informations [[http://fr.wikipedia.org/wiki/Advanced_Audio_Coding|ici]]. | * les fichiers sources sont au format AAC (extension de fichier ''.m4a''). Plus d'informations [[http://fr.wikipedia.org/wiki/Advanced_Audio_Coding|ici]]. |
* les fichiers de sorties sont au format WAV (extension de fichier ''.wav''). Plus d'informations [[http://fr.wikipedia.org/wiki/WAVEform_audio_format|ici]]. | * les fichiers de sorties sont au format WAV (extension de fichier ''.wav''). Plus d'informations [[http://fr.wikipedia.org/wiki/WAVEform_audio_format|ici]]. |
| * les commandes de script utilisent l'interpréteur CMD de Windows. Plus d'informations [[http://ss64.com/nt/|ici]]. |
| |
Le script est écrit en batch. Le code est disponible ci-dessous. | Le script est écrit en batch. Le code est disponible ci-dessous. |
<code DOS> | <code DOS convert_m4a_wav.bat> |
@ECHO OFF | @ECHO OFF |
CLS | CLS |
SET _count=0 | SET /A _count=0 |
FOR %%G IN (*.m4a) DO SET /A _count+=1 | FOR %%G IN (*.m4a) DO SET /A _count+=1 |
SET /A _num=1 | SET /A _num=1 |
CALL SET _newnm=%%_firstbit:%_qt%=%% | CALL SET _newnm=%%_firstbit:%_qt%=%% |
SET _commanm=%_newnm:,=_COMMA_% | SET _commanm=%_newnm:,=_COMMA_% |
REM ECHO %_commanm% | 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 |
CALL "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" --intf dummy -vvv %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 | ECHO fichier %_num%/%_count% converti |
SET /A _num+=1 | SET /A _num+=1 |
:eof | :eof |
</code> | </code> |
=== Explications du code === | ==== Explications du code ==== |
Un minimum de connaissance en batch est nécessaire pour appréhender | 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. |
| |
| <code>SET /A _count=0</code> initialise une variable qui va contenir le nombre de fichiers à traiter. |
| <code>FOR %%G IN (*.m4a) DO SET /A _count+=1</code> 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. |
| <code>SET /A _num=1</code> initialise une variable qui va indiquer la position du fichier en cours de traitement. |
| <code>FOR %%G IN (*.m4a) DO (CALL :SUB_VLC "%%G")</code> 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. |
| <code>IF NOT EXIST cdda MKDIR cdda</code> crée le répertoire ''cdda'' s'il n'existe pas déjà. |
| <code>FOR %%G IN (*.m4a.wav*) DO (CALL :SUB_RENAME "%%G")</code> 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. |
| <code>GOTO :eof</code> pour sortir du fichier de commandes à la fin du traitement. |
| === Routine pour convertir === |
| <code>SET _firstbit=%1 |
| SET _qt="</code> récupère le paramètre passé à la routine et le place dans une variable. La deuxième variable contient un guillemet double. |
| <code> CALL SET _newnm=%%_firstbit:%_qt%=%%</code>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%''. |
| <code>SET _commanm=%_newnm:,=_COMMA_%</code> 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. |
| <code>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</code> 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 **128**kbit/s, en stéréo et une fréquence d'échantillonnage de **44100**Hz. |
| * '':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é. |
| |
| <code>ECHO fichier %_num%/%_count% converti |
| SET /A _num+=1</code> pour afficher la progression de la conversion. Puis la variable indiquant le numéro de fichier est incrémentée. |
| |
| === Routine pour renommer === |
| <code>SET _origfnm=%1</code> récupère le paramètre passé à la routine et le place dans une variable. |
| <code>SET _origfpath=%~dp1</code> ne conserve que le lecteur et le chemin du fichier du paramètre ((<code>%~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</code>)). |
| <code>SET _endbit=%_origfnm:*.m4a=%</code> ne garde que la partie du nom de fichier après //m4a//. |
| <code>CALL SET _newfilenm=%%_origfnm:.m4a%_endbit%=.wav"%%</code> remplace l'extension du fichier par ''.wav'' et ajoute un guillemet double. |
| <code>CALL SET _newfilenm=%%_newfilenm:%_origfpath%=%%</code> supprime le chemin pour ne garder que le nom de fichier. |
| <code>SET _newfilenm=%_newfilenm:_COMMA_=,%</code> remplace le texte ''_COMMA_'' par une '','' (virgule) pour obtenir le nom de fichier d'origine. |
| <code>COPY %1 .\cdda\%_newfilenm% |
| DEL %1</code> 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 [[https://wiki.videolan.org/Documentation:Command_line/|ici]].\\ |
| Conversion vers le format **wav** avec VLC [[https://wiki.videolan.org/WAVE|ici]]. |