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

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의 경우 위의 첫 번째 링크 참조)?

답변1

다음 .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

@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"이전에 언급한 것과 동일한 오류로 인해 from이 실패합니다...

1.제거 n하고.flac

for %%A in (*.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
  • 관찰: 1루프 For변수는 "%%~A"입력 파일의 전체 경로를 제공하므로 이름을 자르거나 명시적으로 추가할 필요가 없습니다.
"%~Drive\\Path\\Name.Flac"
"%%~dpn.Flac"
"%%~N.Flac"

rem :: use
ffmpeg -i  "%%#~A" ...

2.사용 For /R:

For /R %%i in (*.flac)do ...

삼.drive:\folder\다음과 같은 경우에는 이름뿐만 아니라 대상 인코딩 파일을 저장하기 위해 정의/추가를 고려하십시오 .~ 아니다박쥐가 있는 것과 동일한 작업 디렉토리에 저장합니다.

 ... (...)do.... ffmpeg ... "%%~dpni.mp3"
  • 관찰: 2.mp3현재/작업 디렉토리에 저장하려면 다음을 사용할 수 있습니다.
 ... (...)do.... ffmpeg ... "%%~ni.mp3"
 ... (...)do.... ffmpeg ... ".\%%~ni.mp3"
 ... (...)do.... ffmpeg ... "%CD%\%%~ni.mp3"
  • 관찰:: 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
  • 관찰:: 4를 사용하는 구분선의 경우 ^아무 것도 사용하지 마십시오.공백/문자캐럿 뒤:

여기에 이미지 설명을 입력하세요


추가 리소스:

관련 정보