Bash 루프의 ffmpeg 문제

Bash 루프의 ffmpeg 문제

여러 .mkv 파일을 .mp4 파일로 변환하기 위해 다음 명령줄을 실행할 때 문제가 발생합니다. 이는 마치 스크립트가 모든 명령을 동시에 실행하려고 시도하는 것과 같습니다. 아니면 명령이 서로 얽혀서 출력이 왜곡되는 것과 같습니다. 잘 모르겠습니다. 지금 실행해보니 첫 번째 파일만 변환되었습니다. 때로는 예상치 못한 또는 무작위 결과가 나오는 것 같습니다.

ls -1 *.mkv | while read f; do ffmpeg -i "$f" -codec copy "${f%.*}.mp4"; done

그러나 다음을 수행하면 예상대로 작동합니다.

ls -1 *.mkv | while read f; do echo ffmpeg -i \"$f\" -codec copy \"${f%.*}.mp4\"; done > script; bash script

그런데 왜? 그것은 무엇과 관련이 있습니까 ffmpeg? bash 루프 및 기타 명령에서는 이런 일이 발생하지 않습니다 ffmpeg. 따옴표를 이스케이프 처리하거나 스크립트 파일로 파이프하는 등의 작업을 수행하지 않고 이 작업을 수행할 수 있는 간단한 방법을 원합니다.

답변1

ffmpeg또한 표준 입력에서 읽고 read.redirects에서 입력을 사용합니다 /dev/null.

... | while read f; do ffmpeg -i "$f" -codec copy "${f%.*}.mp4" < /dev/null; done

즉, 이와 같은 출력을 읽지 마십시오 ls. 간단한 for 루프로 충분합니다(그리고 원래 문제를 제거합니다).

for f in *.mkv; do
    ffmpeg -i "$f" -codec copy "${f%.*}.mp4"
done

관련 정보