動画を読み、情報を出力するスクリプト

動画を読み、情報を出力するスクリプト

私は映画フォルダ内のすべてのフォルダを読み、ファイル内の各ビデオに関する情報を出力するスクリプトを書いています。

私が現在持っているものは次のとおりです。

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

おすすめ記事