以下を実行する簡単なスクリプトを作成したいと思います。
- オーディオファイル(WAV、FLAC、MP3、AIFF)からメタデータを読み取る
- ビットレートがしきい値を下回ると、エラーメッセージが返されます。
- アーティスト - タイトル - 年などの特定の形式にファイル名を変更します。
- 別のフォルダに移動
私のシェルスクリプトの私の経験は非常に限られていますが、特にメタデータの読み取りに関して誰かが私に正しい方向を伝えることができるかどうか疑問に思います。誰かがシェルスクリプトを書く別の方法を提案することができれば、それも役に立ちます!
答え1
私はあなたの態度が好きです。あなたは誰にも「宿題をせよ」と聞かず、賑やかに答えをしてくれるからだ。
exiftool
ファイルメタデータを読み書きするプログラムなどのプログラムを使用する必要があります。この場合、exiftool
出力するメタデータタグを選択できます(例:)exiftool -maxbitrate filename
。オプションなしでサンプルファイルからプログラムを実行して起動すると、利用可能なタグを参照して興味のあるタグを選択できます。ラベルはスペースを含む大文字で表示できますが、スペースなしで大文字と小文字を区別せずにプログラムで使用できます。メタデータタグ「最大ビットレート」はコマンドラインオプションで指定されます-maxbitrate
。
を選択すると、多くの手順を節約でき、必要な形式にファイル名を変更するためのメタデータ要素を取得するのに役立つように出力をカスタマイズするexiftool
オプションを利用できます。-printFormat
この機能の使用例は次のとおりですexiftool -Bitdepth -MaxBitRate -p 'blah $Bitdepth blah $Maxbitrate' your_file.mp3
。man
詳しくはページをご覧ください。
他のメタデータプログラムの場合は、2番目のプログラムを使用して結果を解析する必要があります。たとえば、awk
関心のあるデータフィールド(あなたのビットレート)のみを取得し、シェルの山水-lt
または、-gt
フラグエラーなどのテストを比較します。
スクリプトの残りの要件については、名前変更と移動操作を1つの手順で実行できます。問題は、あなたが探している情報を取得することです。今回も、あなたが選択したメタデータプログラム(例えばexiftool
)はこの情報を提供します。
答え2
bash
ソリューションメディア情報ツール(ビデオとオーディオファイルに最も関連性の高いテクノロジとタグデータを簡単に統合して表示):
#!/bin/bash
dest="/path/to/dir" # path to destination directory
trsh=256 # threshold
IFS='|' # input field separator
while read -r author title year bitrate; do
if [[ "$((bitrate/1000))" -lt $trsh ]]; then
echo "Bitrate is below $trsh Kbps"
exit 1
fi
mv "$1" "${dest}/${author}-${title}-${year}.${1##*.}"
done < <(mediainfo --Inform="General;%Performer%|%Track%|%Recorded_Date%|%BitRate%" "$1")