반복적으로 ffmpeg를 호출합니다.

반복적으로 ffmpeg를 호출합니다.

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.

관련 정보