
Linux에서 실행하고 싶은 Windows 배치 스크립트가 있는데 이를 쉘 스크립트로 변환하는 데 문제가 있습니다.
누구든지 도움을 줄 수 있는지 궁금합니다.
:start
for /r %%F in (*.mkv) do (
C:\Python27\Scripts\ffmpeg\bin\ffmpeg.exe -y -i "%%F" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "%%~dpnF.mp4"
if not errorlevel 1 if exist "%%~dpnF.mp4" del /q "%%F"
)
TIMEOUT /T 60
goto start
쉘 스크립트로 변환하려고 시도했지만 문제가 있습니다. 나는 이것에 능숙하지 않습니다.
for f in {*.mkv,*/*.mkv,*/*/*.mkv,*/*/*/*.mkv}; do
ffmpeg -i "$f" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "${f%mkv}mp4";
rm "$f";
루프하는 방법을 잘 모르므로 지속적으로 확인합니다.
답변1
(bash를 가정하면) 더 비슷합니다:
shopt -s globstar
for f in **/*.mkv
do
ffmpeg -i "$f" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "${f%mkv}mp4";
[[ $? -eq 0 ]] && rm "$f";
done
실제로:
done
루프를 나타내는 문이 누락되었습니다.- 패턴
{*.mkv,*/*.mkv,*/*/*.mkv,*/*/*/*.mkv}
이 올바르지는 않지만 ffmpeg는 일치하지 않는 각 패턴에 대해 오류 메시지를 발행합니다.globstar
와 함께**
단일 패턴이 디렉터리 수준에서 작동하도록 만듭니다. - mp4로 트랜스코딩할 때 오류가 없는 경우에만 .mkv를 지우는 테스트를 마지막에 추가했습니다.