Mac 터미널에서 다음과 같이 ffmpeg를 호출합니다.
$ find . -type f -name *.webm | while IFS= read -r f; do echo "$f"; ffmpeg -i "$f" "${f%.webm}".mp4 2> ~/Desktop/err; done
find에서 반환된 첫 번째 파일만 처리합니다.
./artist/moody blues/_vid/whitenightsatin_lyrics.webm
오류 발췌:
다음 명령을 입력하십시오: |all|-1 [ ]
구문 분석 오류입니다. 매개변수가 3개 이상 필요하지만 '[360p].webm' 문자열에 매개변수가 1개만 제공되었습니다.
입력 명령: |all |-1 [ ] 구문 분석 오류, 최소 3개의 매개변수가 필요합니다. 'hannel/Ash Wainman/_Inbox/BOHEMIAN RHAPSODY - ASH WAINMAN[HD,1280x720].webm' 문자열에는 1개만 제공됩니다. 매개변수
"채널" 대신 "채널"이 있어야 합니다.
답변1
셸 루프를 잘못 사용 find
하고 불필요하게 생성하고 있습니다(읽기 어렵습니다!). ffmpeg
내부에서 실행할 수 있기 때문입니다 find
.
find . -type f -name *.webm \
-exec sh -c 'echo "$1"; ffmpeg -nostdin -i "$1" "${1%.webm}".mp4 2>> ~/Desktop/err' sh {} ';'
LordNeckBeard를 존경하세요. (저는 확실히 털복숭이입니다.)
답변2
LordNeckBeard가 제안한 대로 add는 상호작용(또는 상속된 표준 입력 읽기)을 -nostdin
중지합니다 .ffmpeg
매뉴얼 페이지에는 다음과 같이 언급되어 있습니다.
-stdin
Enable interaction on standard input. On by default unless standard input is used as an input. To explicitly disable interaction you need to specify "-nostdin".
Disabling interaction on standard input is useful, for example, if ffmpeg is in the background process group. Roughly the same result can be achieved with "ffmpeg ... <
/dev/null" but it requires a shell.