2012-06-20 4 views
0

저는 홈 비디오 용 .tbn 파일을 생성하기위한 스크립트 작업을하고 있습니다. 스크립트를 실행하면 다른 모든 파일 만 처리하는 것처럼 보입니다.다른 모든 파일을 처리하는 Bash 루프 만

#!/bin/bash 

find ~/Movies/Home\ Movies/Canada\ Trip -type f | egrep '\.mp4$|\.avi$|\.mkv$' | while read file ; do 

    if [ ! -f "${file:0:${#file}-3}tbn" ]; then 
     # .tbn not found 
     echo "$file" 
     ffmpeg -itsoffset -13 -i "$file" -vcodec mjpeg -vframes 1 -s 400x224 -an -f rawvideo "${file:0:${#file}-3}tbn" 
    fi 

done 

그리고 여기 내 데이터 집합은 다음과 같습니다

Canada.Trip.S01E01.avi 
Canada.Trip.S01E02.avi 
Canada.Trip.S01E03.avi 
Canada.Trip.S01E04.avi 
Canada.Trip.S01E05.avi 
Canada.Trip.S01E06.avi 
Canada.Trip.S01E07.avi 
Canada.Trip.S01E08.avi 
Canada.Trip.S01E09.avi 
Canada.Trip.S01E10.avi 
Canada.Trip.S01E11.avi 
Canada.Trip.S01E12.avi 
Canada.Trip.S01E13.avi 
Canada.Trip.S01E14.mp4 
Canada.Trip.S01E15.mp4 
Canada.Trip.S01E16.mp4 
Canada.Trip.S01E17.mp4 
Canada.Trip.S01E18.avi 
Canada.Trip.S01E19.mkv 
Canada.Trip.S01E20.mp4 

그래서 내가 그것을 처음 실행할 때, 그것은 1,3,5,7 등을 위해 TBN 년대를 생성 .. 짝수 파일은 vies/Canada Trip/Canada.Trip.S01E16.mp4: No such file or directory 실패 (파일 이름의 잘림 시작 부분을 참고하십시오)

스크립트를 다시 실행하면 짝수 번째 파일 인 .tbn 파일이 생성됩니다. 전 Bash를 사용 해본 적이 없기 때문에 전체 상황이 혼란 스럽습니다!

+0

스크립트가 제대로 작동합니다. 출력을 게시 할 수 있습니다 : find ~/Movies/Home \ Movies/Canada \ Trip-type f | egrep '\ .mp4 $ | \ .avi $ | \ .mkv $' – Jerome

+1

'egrep'을 사용할 필요가 없습니다 : find ~/Movies/Home \ Movies/Canada \ Trip -type f \ ('*. mp4 '-o'* .avi '-o'* .mkv '\)'또는'find ~/Movies/Home \ Movies/Canada \ Trip -t f -regex '. * \. \ (mp4 \ | avi \ | mkv \) '' –

답변

1

ffmpeg reads stdin. 또한 항상 read -r을 사용해야합니다.

+0

그것은 아름답게 작동했습니다. 고맙습니다. – squarefrog

관련 문제