ffmpeg 쉘 스크립트 경로에 공백이 있습니다

ffmpeg 쉘 스크립트 경로에 공백이 있습니다

입력 및 출력 이름 목록을 한 줄씩 가져와 변환을 위해 ffmpeg에 공급하는 빠른 쉘 스크립트가 있습니다. 일부 출력 경로에는 공백이 포함되어 있으며 공백이 포함된 경로를 어떻게 이스케이프하거나 큰따옴표로 묶어도 두 가지 오류 중 하나가 발생합니다.

입력 파일

file1.avi "output path"/file1.mp4
file1.avi "output\ path"/file1.mp4
file1.avi "output path/file1.mp4"
file1.avi output\ path/file1.mp4

변환.sh

while read -r file1 file2; do ffmpeg -i "$file1" -c copy -bsf:a aac_adtstoasc $file2; done <list

내가 겪는 오류 중 하나는 다음과 같습니다.

'출력 경로'/file1.mp4: 해당 파일이나 디렉터리가 없습니다.

내가 겪는 또 다른 오류는 다음과 같습니다.

'출력'에 적합한 출력 형식을 찾을 수 없습니다.

입력 파일 행의 변경 사항은 공백을 탈출하려고 시도한 내용을 보여주기 위한 것입니다. 나는 또한 주위에 큰 따옴표를 추가하려고 시도했습니다.파일 2쉘 스크립트에서.

답변1

파일 이름에 리터럴 백슬래시 문자가 포함되어 있지 않다고 가정하면 파일에서 백슬래시 이스케이프를 사용하는 경우(따옴표 제외 list)

file1.avi output\ path/file1.mp4

그럼 넌 할 수 있어소홀히 하다-r~하도록 하다read 하다리터럴 문자 시퀀스 대신 이스케이프 시퀀스(공백으로 해석됨)를 해석합니다 \. 그런 다음 일반적인 방법으로 확장을 큰따옴표로 묶을 수 있습니다.

while read file1 file2; do 
  ffmpeg -i "$file1" -c copy -bsf:a aac_adtstoasc "$file2"
done <list

표시하려면:

$ cat list
file1.avi output\ path/file1.mp4

그 다음에

$ while read file1 file2; do 
    printf '==%s==\n==%s==\n' "$file1" "$file2"
  done <list
==file1.avi==
==output path/file1.mp4==

관련 정보