Windows: convertir récursivement FLAC en MP3 avec ffmpeg
J'ai installé ffmpeg et j'utilise des fichiers batch pour convertir avec succès MP4 h.264 en MKV x.265, mais j'ai un problème avec la conversion de fichiers FLAC en MP3 320 kbps sans métadonnées nécessaires. Bien que de nombreux articles expliquent comment faire cela sous Linux, leurs scripts ne résolvent pas ce problème lorsqu'ils sont exécutés dans l'invite de commande de Windows.
Le script de ligne de commande que j'ai créé pour convertir en MP3 a cette ligne:
for %%A in (*.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
N'étant pas adepte de Powershell, je recherche une solution en ligne de commande. Je me fiche de savoir si les métadonnées survivent ou non.
Comment puis-je modifier cela pour convertir tous les fichiers FLAC dans le répertoire actuel et tous les sous-répertoires en dessous (comme indiqué dans le premier lien ci-dessus pour Linux)?
Réponses
Le .bat
fichier suivant devrait le faire:
for /R %%A in (*.flac) do ffmpeg -i "%%A" -c:v copy -b:a 320k "%%~dpnA.mp3"
Vous pouvez d'abord le tester avec ce script:
for /R %%A in (*.flac) do echo ffmpeg -i "%%A" -c:v copy -b:a 320k "%%~dpnA.mp3"
Explication des substitutions ci-dessus (elles sont combinées dans le script ci-dessus):
%~dA
- étend% A à une lettre de lecteur uniquement%~pA
- étend% A à un chemin uniquement%~nA
- développe% A en un nom de fichier uniquement
@echo off
cd /d "%~dp0" & setlocal
set "_flag1=-c:v copy -b:a 320k"
set "_flag2=-hide_banner -v error -stats"
set "_ffmpeg="C:\Program Files\FFmpeg\Bin\FFmpeg.exe" -i"
for /r %%i in (*.Flac)do %_ffmpeg% "%%~i" %_flag1% "%%~dpni.mp3" %_flag2%
%__AppDir__%timeout.exe /t 5 /nobreak |echo=Is Done! & endlocal & goto :eof
- La même chose sans définir / utiliser de variables:
@echo off & setlocal & cd /d "%~dp0"
for /r %%i in (*.Flac)do "C:\Program Files\FFmpeg\Bin\FFmpeg.exe" -i ^
"%%~i" -c:v copy -b:a 320k "%%~dpni.mp3" -hide_banner -v error -stats
%__AppDir__%timeout.exe /t 5 /nobreak |echo=Is Done! & endlocal & goto :eof
Avez-vous vraiment besoin d'utiliser .Flac deux fois?
Et vous allez toujours enregistrer tous les fichiers convertis dans le même dossier (répertoire de travail)?
for %%A in (.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
for /R %% A in (
.flac)
deffmpeg -i "%%~pI%%~nA.flac" -b:a 320k "%%~nA.mp3"
échoue avec la même erreur que celle indiquée précédemment ...
1. Retirez n
et.flac
for %%A in (*.flac) do ffmpeg -i "%%~
n
A
.flac
" -c:v copy -b:a 320k "%%~nA.mp3"
- Obs .: 1 La
For
variable de boucle"%%~A"
vous fournit le chemin complet du fichier d'entrée, vous n'avez pas besoin de recadrer le nom et / ou d'ajouter explicitement:
"%~
Drive\\
Path\\
Name
.Flac"
"%%~dpn.Flac"
"%%~N.Flac"
rem :: use
ffmpeg -i "%%#~A" ...
2. Utilisez For /R
:
For /R %%i in (*.flac)do ...
3. Tenir compte de définir / l' ajout d' un drive:\folder\
pour enregistrer le fichier codé cible, non seulement un nom, si pas à enregistrer dans le même répertoire de travail de votre chauve - souris sont en.
... (...)do.... ffmpeg ... "%%~dpni.mp3"
- Obs .: 2 Pour sauvegarder votre
.mp3
dans le répertoire courant / work, vous pouvez utiliser:
... (...)do.... ffmpeg ... "%%~ni.mp3"
... (...)do.... ffmpeg ... ".\%%~ni.mp3"
... (...)do.... ffmpeg ... "%CD%\%%~ni.mp3"
- Obs. :: 3 Toutes les métadonnées survivent !!
On suggère d'utiliser For /F + where /R
@echo off
setlocal & cd /d "%~dp0"
for /f delims^= %%i in ('
2^>nul %__AppDir__%where.exe /r . *.flac
')do "C:\Program Files\FFmpeg\Bin\FFmpeg.exe" -i "%%~i" -c:v ^
copy -b:a 320k "%%~dpni.mp3" -hide_banner -v error -stats
%__AppDir__%timeout.exe 5 /nobreak |echo=Is Done! & endlocal & goto :eof
- Obs. :: 4 Pour utiliser la ligne de rupture
^
, n'utilisez aucun espace / caractère après le signe d'insertion:

Ressources additionnelles:
- Set /?
- For /?
- For /F
- For /R
- Where /?
- Timeout /?
- Redirection
|
,<
,>
,2>
, Etc.
- Exécution conditionnelle
- || et &&
- Local Environment | Function| Référez-vous également:Goto :EOF
- Setlocal & Endlocal
- Diviser les longues commandes en plusieurs lignes via le fichier de commandes Windows
- Comment l’interpréteur de commandes Windows [ cmd.exe] analyse les scripts