Estoy usando Windows y ffmpeg para convertir video mp4 en audio mp3. Se me ocurrió la siguiente línea de lote que hará el trabajo:
for %f in (*.mp4); do ffmpeg -i %f -vn -ar 44100 -ac 1 -b:a 32k -f mp3 %f.mp3
Sin embargo, la %f
variable captura el nombre de archivo completo con la extensión, por lo que mi salida se parece a filename.mp4.mp3
. Prefiero que se parezca filename.mp3
.
He probado todo tipo de corchetes y métodos de truncamiento que conozco, pero no puedo hacer que nada funcione.
¿Cómo puedo cambiar los nombres de archivo en una conversión por lotes de ffmpeg en Windows?
Puede extraer el nombre del archivo directamente del for
parámetro de reemplazo. No es necesario establecer una nueva variable en absoluto.
for %f in (*.mp4) do ffmpeg -i "%f" -vn -ar 44100 -ac 1 -b:a 32k -f mp3 "%~nf.mp3"
Si desea hacer un munging de cadenas más complicado , es mucho más intuitivo en Powershell:
ls *.mp4|foreach{
ffmpeg -i $_ -vn -ar 44100 -ac 1 -b:a 32k -f mp3 $_.name.replace("mp4", "mp3")
}
set was unexpected at this time.
%outfile.mp3
. Se ejecuta, lo que sin duda está más cerca, pero el nombre del archivo de salida no funciona.cmd.exe
, también conocido como "línea de comando". sale el archivo %outfile%
. No tienes que seguir trabajando en esto si no quieres; Estoy contento con la solución de Powershell. Si tuviera que adivinar, la outfile
variable no se está configurando o llamando correctamente, o ambas cosas. O, %f
en este contexto, no es una cadena del nombre, que es como estamos tratando de usarlo. Es un puntero al archivo.for %f in (*.mp4) do ffmpeg -i "%f" -vn -ar 44100 -ac 1 -b:a 32k -f mp3 "%~nf.mp3"
funciona.Para agregar a la respuesta de stib , también puede poner este comando en un archivo por lotes simple. Simplemente guarde el código a continuación en un .bat
archivo, mueva el archivo a la carpeta en la que desea trabajar, luego haga doble clic para ejecutarlo. Esto supone que ha descargado y configurado ffmpeg.
@echo off
title Extract MP3 from MP4 with FFMPEG.
rem Mono Channel, 32kbps.
for %%f in (*.mp4) do ffmpeg -i "%%f" -vn -ar 44100 -ac 1 -b:a 32k -f mp3 "%%~nf.mp3"
pause
Observe que las %f
variables ahora son %%f
. Esta es una convención de archivos por lotes y es obligatoria. El script no se ejecutará si esto no se modifica. title
Es exactamente eso: el título del guión. rem
es la abreviatura de "comentario": es un comentario y también puede cambiarlo. Ninguna línea es realmente necesaria.
llogan