ffmpeg는 파일에서 읽은 변수 이름을 허용하지 않습니다.

ffmpeg는 파일에서 읽은 변수 이름을 허용하지 않습니다.

ffmpeg를 사용하여 여러 비디오를 일괄 다운로드하려고 합니다. 사이트 주소 및 저장 이름 목록은 다음 형식의 텍스트 파일에 저장됩니다.

"site",filename.mp4

내 코드가 파일을 반복하면서 한 줄씩 다운로드하려고 합니다.

#!/bin/bash

while IFS=, read dl nm
do
    echo $dl
    echo $nm
    /usr/bin/ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -i  $dl -c copy $nm
done < $1

예상되는 출력은 각 루프에서 ffmpeg가 각 줄에 표시된 파일을 다운로드한 후 루프의 다음 반복을 계속하는 것입니다.

대신 ffmpeg는 오류 메시지를 인쇄합니다.

"site": No such file or directory

터미널에서 동일한 명령을 직접 실행하고 사이트 이름과 저장 이름을 명령에 직접 삽입하면 제대로 작동합니다.

이 내용과 관련이 있을 것 같은 다른 글을 보다가 첨부해 보았습니다.

< /dev/null

ffmpeg 호출이 끝날 때까지 실행되지만 여전히 동일한 효과가 있습니다.

답변1

파일의 다운로드 URL/위치에 따옴표를 사용하고 있기 때문에 스크립트에 문제가 있습니다.

즉, 원하는 대로 파일이 있을 때 $nm`은 $dl여전히 "site" and​​예상한 대로 작동합니다.

이렇게 하려면 사이트 다운로드 위치에 따옴표가 없도록 파일을 변경한 다음 $dl스크립트에서 따옴표를 설정해야 합니다.

그래서 당신은 다음과 같이 끝납니다 :

입력 파일 목록:

site,foobar.baz

스크립트:

#!/bin/bash

while IFS=, read dl nm
do
    echo $dl
    echo $nm
    /usr/bin/ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -i "$dl" -c copy $nm
done < $1

파일 이름에 공백이 포함된 경우 따옴표로 묶을 수도 있지만 $nm결정은 사용자의 몫입니다.

관련 정보