비디오를 읽고 정보를 출력하는 스크립트

비디오를 읽고 정보를 출력하는 스크립트

저는 영화 폴더 내의 모든 폴더를 읽고 파일의 각 비디오에 대한 정보를 출력하는 스크립트를 작성 중입니다.

내가 현재 가지고 있는 것은 다음과 같습니다.

movies=0
rm movielist
for dir in Movies/*
do
  (cd "$dir" && pwd|cut -d \/ -f5|tr -s '\n' ', ' >> ../../movielist &&
  >> ../../movielist )
echo "Movie $movies - $dir ADDED!"
let movies=movies+1
done

rm moviefinal
cat movielist | while read MovieName;
do 
    echo "$MovieName" | cut -d ',' -f2 | cut -d 'x' -f2 | sort | uniq | while read MovieRes;
    do
        case $MovieRes in
        [461-660]*)
            echo "$MovieName,480p" >> moviefinal
        ;;
        [661-890]*)
            echo "$MovieName,720p" >> moviefinal
        ;;
        [891-1200]*)
            echo "$MovieName,1080p" >> moviefinal
        ;;
        *)
            echo "$MovieName,DVD" >> moviefinal
        ;;
        esac
    done    
done

읽혀지는 것은영화각 영화에 대한 폴더(예: Movies/The Matrix/Matrix.mkv)를 만들어 Movies 폴더 내의 movieex라는 파일로 보냅니다. 파일에 포함된 정보는 다음과 같습니다.

The Matrix, 1920x1080, MKV
The Matrix 2, 1280x720, AVI
....

지금 추가할 것은 높이와 너비(예: Exiftool을 사용한 SourceImageHeight 및 SourceImageWidth)를 읽고 높이가 X이고 너비가 Z인 경우 출력 파일에 다른 변수를 추가하는 CASE 또는 IF를 수행하는 방법입니다. 품질( 예: 720p, 1080p, DVD...). 위의 내용은 다음과 같습니다.

The Matrix, 1920x1080, MKV, 1080p
The Matrix 2, 1280x720, AVI, 720p

업데이트 - 스크립트는 이제 품질(720p, 1080p)을 표시하지만 CASE 부분이 잘못되었습니다. 예를 들어, 때때로 720개의 비디오를 가져와서 DVD 품질을 제공하지만 실제로는 스크립트에서 720개를 명시적으로 언급했습니다.

답변1

미래에도 같은 일을 하고 싶은 사람이 있다면 최종 스크립트는 다음과 같습니다.

movies=0
rm movielist
for dir in Movies/*
do
  (cd "$dir" && pwd|cut -d \/ -f5|tr -s '\n' ', ' >> ../../movielist &&
    exiftool * -t -s3 -ImageSize -FileType|tr -s '\t' ',' >> ../../movielist )
echo "Movie $movies - $dir ADDED!"
let movies=movies+1
done

rm moviefinal
cat movielist | while read MovieName;
do 
    echo "$MovieName" | cut -d ',' -f2 | cut -d 'x' -f2 | sort | uniq | while read MovieRes;
    do
        if (($MovieRes>=461 && $MovieRes<=660))
        then
            echo "$MovieName,480p" 
        elif (($MovieRes>=661 && $MovieRes<=890))
        then
            echo "$MovieName,720p" 
        elif (($MovieRes>=891 && $MovieRes<=1200))
        then
            echo "$MovieName,1080p"
        else
            echo "$MovieName,DVD" 
        fi >> moviefinal
    done    
done

관련 정보