2014-04-15 3 views
4

많은 비디오 파일을 변환하고 파일 이름에 추가 된 것으로 저장하는 쉘 스크립트를 작성했습니다. 스크립트는 작동하지만 무작위로 파일을 건너 뛰는 것처럼 보입니다.FFmpeg 스크립트는 파일을 건너 뜁니다.

스크립트를 다시 실행하면 이전에 건너 뛴 파일이 변환됩니다. 파일을 건너 뛰는 것을 멈추게하려면 어떻게해야합니까?

workingDir=/home/user/Videos 

# get list of files to convert 
find /video/folder -iname "*.mp4" > $workingDir/file_list 

# convert files 
cat $workingDir/file_list | while read LINE; do 
    # FFmpeg often cuts off the beginning of this line 
    echo "$(dirname "$LINE")/$(basename "$LINE")" 
    if /usr/bin/ffmpeg -n -loglevel panic -v quiet -stats -i "$LINE" \ 
     -c:v libx264 -vf scale="trunc(oh*a/2)*2:320" \ 
     -pix_fmt yuv420p -preset:v slow -profile:v main -tune:v animation -crf 23 \ 
     "$(dirname "$LINE")/$(basename "$LINE" \.mp4)"_reencoded.mp4 2>/dev/null; then 
      echo "Success: $(dirname "$LINE")/$(basename "$LINE")" >> $workingDir/results 
    else 
     echo "Failed: $(dirname "$LINE")/$(basename "$LINE")" >> $workingDir/results 
    fi 
done 

하나의 문제는 FFmpeg가 스크립트를 방해한다는 것입니다. FFmpeg 출력은 출력이 표시되지 않더라도 다음 명령의 시작 부분을 잘립니다. 이것은 자주 중단되는 if 문 앞에 echo 행에 의해 증명됩니다. 그러나 차단되지 않은 회선에 대해서도 대부분의 경우 분명한 이유없이 건너 뜁니다.

답변

2

ffmpeg 표준 입력에서 읽음으로써 while read을위한 입력을 소비합니다. 추가로 stdin을 ffmpeg에 추가하면됩니다. < /dev/null

+0

감사합니다. – ucq52ose

관련 문제