Я использую Windows и ffmpeg для преобразования видео mp4 в аудио mp3. Я придумал следующую пакетную строку, которая выполнит эту работу:
for %f in (*.mp4); do ffmpeg -i %f -vn -ar 44100 -ac 1 -b:a 32k -f mp3 %f.mp3
Однако %f
переменная фиксирует полное имя файла с расширением, поэтому мой вывод выглядит как filename.mp4.mp3
. Я предпочел бы, чтобы это выглядело так filename.mp3
.
Я пробовал всевозможные скобки и методы усечения, которые я знаю, но ничего не могу заставить работать.
Как я могу изменить имена файлов при пакетном преобразовании ffmpeg в Windows?
Вы можете извлечь имя файла непосредственно из for
параметра замены. Нет необходимости устанавливать новую переменную вообще.
for %f in (*.mp4) do ffmpeg -i "%f" -vn -ar 44100 -ac 1 -b:a 32k -f mp3 "%~nf.mp3"
Если вы хотите выполнить более сложную работу со строками , в 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
. Запускается, что конечно ближе, но именование выходного файла не работает.cmd.exe
, она же "командная строка". Выходит файл %outfile%
. Вам не нужно продолжать работать над этим, если вы этого не хотите; Я доволен решением Powershell. Если бы я предположил, outfile
переменная не устанавливается или не вызывается правильно, или и то, и другое. Или %f
в этом контексте это не строка имени, как мы пытаемся ее использовать. Это указатель на файл.for %f in (*.mp4) do ffmpeg -i "%f" -vn -ar 44100 -ac 1 -b:a 32k -f mp3 "%~nf.mp3"
работает.Чтобы добавить к ответу stib , вы также можете поместить эту команду в простой пакетный файл. Просто сохраните приведенный ниже код в .bat
файл, переместите файл в папку, с которой вы хотите работать, затем дважды щелкните его, чтобы запустить. Предполагается, что вы загрузили и настроили 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
Обратите внимание, что %f
переменные теперь %%f
. Это соглашение о пакетном файле, и оно является обязательным. Скрипт не запустится, если это не изменить. title
именно это: название сценария. rem
сокращение от «замечание»: это комментарий, который вы тоже можете изменить. Ни одна из строк на самом деле не нужна.
Логан