Windows : ffmpeg를 사용하여 FLAC를 MP3로 재귀 적으로 변환
ffmpeg를 설치하고 배치 파일을 사용하여 MP4 h.264를 MKV x.265로 성공적으로 변환했지만 FLAC 파일을 메타 데이터없이 320kbps MP3로 변환하는 데 문제가 있습니다. 많은 게시물 이 Linux에서이 작업을 수행 하는 방법을 설명 하지만 Windows의 명령 프롬프트에서 실행할 때 해당 스크립트가이 문제를 해결하지 못합니다.
MP3로 변환하기 위해 만든 명령 줄 스크립트에는 다음 줄이 있습니다.
for %%A in (*.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
Powershell에 익숙하지 않아 명령 줄 솔루션을 찾고 있습니다. 메타 데이터가 살아 있는지 여부는 상관 없습니다.
현재 디렉토리와 그 아래의 모든 하위 디렉토리에있는 모든 FLAC 파일을 변환하도록 수정하려면 어떻게해야합니까 (위의 Linux 용 첫 번째 링크 참조)?
답변
다음 .bat
파일이이를 수행해야합니다.
for /R %%A in (*.flac) do ffmpeg -i "%%A" -c:v copy -b:a 320k "%%~dpnA.mp3"
이 스크립트를 사용하여 먼저 테스트 할 수 있습니다.
for /R %%A in (*.flac) do echo ffmpeg -i "%%A" -c:v copy -b:a 320k "%%~dpnA.mp3"
위의 대체에 대한 설명 (위의 스크립트에서 결합 됨) :
%~dA
-% A를 드라이브 문자로만 확장합니다.%~pA
-% A를 경로로만 확장합니다.%~nA
-% A를 파일 이름으로 만 확장합니다.
@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
- 변수를 정의 / 사용하지 않아도 동일합니다.
@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
.Flac을 두 번 사용해야 합니까?
그리고 변환 된 모든 파일을 항상 같은 폴더 (작업 디렉토리)에 저장 하시겠습니까?
for %%A in (.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
for /R %% A in (
.flac)
으로부터는ffmpeg -i "%%~pI%%~nA.flac" -b:a 320k "%%~nA.mp3"
전술 한 바와 같은 에러 실패 ...
1. 제거 n
및.flac
for %%A in (*.flac) do ffmpeg -i "%%~
n
A
.flac
" -c:v copy -b:a 320k "%%~nA.mp3"
- 1 OBS :
For
루프 변수가"%%~A"
당신에게 입력 파일의 전체 경로를 제공, 당신은 작물 이름으로 필요 및 / 또는 명시 적으로 추가하지 마십시오 :
"%~
Drive\\
Path\\
Name
.Flac"
"%%~dpn.Flac"
"%%~N.Flac"
rem :: use
ffmpeg -i "%%#~A" ...
2. 사용 For /R
:
For /R %%i in (*.flac)do ...
3. 박쥐가있는 동일한 작업 디렉토리에 저장 하지 않으 려면 drive:\folder\
이름뿐 아니라 대상 인코딩 파일을 저장하기 위해 a 를 정의 / 추가하는 것을 고려하십시오 .
... (...)do.... ffmpeg ... "%%~dpni.mp3"
- Obs .: 2
.mp3
현재 / 직장 디렉토리에 저장하려면 다음 을 사용할 수 있습니다.
... (...)do.... ffmpeg ... "%%~ni.mp3"
... (...)do.... ffmpeg ... ".\%%~ni.mp3"
... (...)do.... ffmpeg ... "%CD%\%%~ni.mp3"
- Obs. :: 3 모든 메타 데이터가 살아남습니다 !!
하나는 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 를
^
사용하는 줄 바꿈의 경우 캐럿 뒤에 공백 / 문자를 사용하지 마십시오 .

추가 리소스 :
- Set /?
- For /?
- For /F
- For /R
- Where /?
- Timeout /?
- 리디렉션
|
,<
,>
,2>
, 등
- 조건부 실행
- || 과 &&
- Local Environment | Function| 참조 :Goto :EOF
- Setlocal & Endlocal
- Windows 배치 파일을 통해 긴 명령을 여러 줄로 분할
- Windows 명령 해석기 [ cmd.exe] 스크립트 구문 분석 방법