いくつかの異なるカメラとカムコーダーを使用してキャプチャされた、整理されていない大きなメディアファイルのグループを扱っています。bashスクリプトでexiftoolを使用して、各ファイルの名前を作成日時、メーカー、モデルに変更したいと思います。
このコマンドを使用すると、画像の名前が必要に応じて変更されます。
exiftool -m -P '-filename<${DateTimeOriginal}_${Make}_${Model}.%e' myfile.jpg
-d FMTオプションを使用して日付と時刻をフォーマットできることはすでに知っていますが、わかりやすくするために省略しています。
代わりに、DSLR「*。mov」ビデオで直面している問題は次のとおりです。
Exiftoolに元の.mov拡張子を使用するように「強制」する方法を知っている人はいますか?
Exifタグが存在するかどうかを確認するようにexiftoolに指示する方法はありますか?最初のタグがない場合は、別のタグを使用しますか?
私は次のようなもので試しました
if [ -n `exiftool -m -p '$DateTime' filename]
then
...
しかし、exiftoolがエラーをドロップしているため、空の文字列チェックは常に失敗します。ヒントはありますか?
Exiftoolの開発者であるPhilHarveyからのフィードバックのおかげで、exiftool9.30で動作する私の問題に対する本当に簡単な解決策を見つけました。
フィルはここで言います( http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5079.msg24483.html#msg2448 ):
最後の有効な割り当てが他の割り当てに優先します。
したがって、1つのコマンドですべてを実行できます。最終的なコードは次のとおりです。
#!/bin/bash
exiftool -P -d '%Y-%m-%d %H.%M.%S' \
'-filename<${CreateDate}_${Model;}.%e' \
'-filename<${DateTimeOriginal}_${Make;}.%e' \
'-filename<${DateTimeOriginal}_${Make;}_${Model;}.%e' \
$@
セミコロンは、上記の拡張機能の欠落の問題に対処するための回避策です(実際には、Modelタグの末尾のnullが原因でした)。
このアプローチの良い点の1つは、-m
オプションを使用していないことです。そのため、たとえば、ほとんどのビデオのように、exifタグを持たない* .movファイルを台無しにすることはありません。ネットからダウンロードできます(無視されます)。
私の知る限り、exiftoolは.mov形式の記述をサポートしていません。名前を変更しただけでも、その拡張子のファイルを作成したくない理由を説明している可能性があります。
代替タグの1つが空の場合、それらを覗くためのロジックが必要なため、exiftoolを使用して必要な情報を抽出することをお勧めします。次に、ファイルの名前を自分で変更します。これは、アイデアを開始するためのbashスクリプトです。そのままでは機能しません。それがどのように行われるかを見るためだけにあります:)
#!/bin/bash
# Scan the files you need
for i in *jpg *mov; do
# Get the extension of the previous file
extension=${i##*.}
# Extract metadata from the file
model=$( exiftool -f -s3 -"Model" "${i}" )
make=$( exiftool -f -s3 -"Make" "${i}" )
datetime=$( exiftool -f -s3 -"DateTimeOriginal" "${i}" )
# If the datetime value is empty (returned '-' because of the '-f' option)
# then read another tag
if [ "${datetime}" = '-' ]; then
datetime=$( exiftool -f -s3 -"MediaCreateDate" "${i}" )
fi
# Construct the new filename from the metadata gathered above
newfilename="${datetime}-${make}-${model}.${extension}"
# Check if the destination filename already exists, and if not,
# create the file
if [ ! -e "${newfilename}" ]; then
echo mv "${i}" "${newfilename}"
else
echo "${i} would get renamed to ${newfilename} but that file already exists."
fi
done