Windows : ffmpeg를 사용하여 FLAC를 MP3로 재귀 적으로 변환

Dec 09 2020

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 용 첫 번째 링크 참조)?

답변

5 harrymc Dec 14 2020 at 17:28

다음 .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를 파일 이름으로 만 확장합니다.
2 ItWasn'tMe Dec 14 2020 at 21:09
@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] 스크립트 구문 분석 방법