とあるビデオグラファーの備忘録的ブログ

ビデオグラファーsumizoonのブログ 一眼動画に関する機材や撮影方法を中心に情報を発信していきます。

ExifToolを使い動画素材からF値やISO、SSを自動抽出して動画に貼り込む

レンズのレビューをする場合、作例の左下に各種撮影情報(ISO/F値/SS)を載せた方が作例として相応しいと思ったことは無いでしょうか?少なくとも私は、先日受けたとある案件で、これが必要になりました。

 

なお、イメージとしては下記の動画のようなものです。

[LUMIX S5]北野天満宮 令和3年 梅苑ライトアップ

数カットだったら手作業でも良いのですが、万が一、これを手作業でやろうとするとおそらくとんでもない手間がかかるはずです。ですが、実際はこの部分に関して私は手入力を今回は一切行っていません。というか手入力した場合を想像するとゾッとします。

ちなみに、上記動画をご覧になった方は、どうやって情報を得ているんですか?という質問が結構ありましたので種明かしをしたいと思います。

また以前も紹介していますが動画のExif確認(正確にはExifではなくメタデータだと思います)は動画撮影のクオリティと技術向上に大きく役立つものと思います。静止画と違って後からじっくりと設定が編集ソフト上で確認出来ないので、私は普段Exiftoolを使って美味しい画質設定を確認する事が有ります。

※今回はこのブログのタイトルにあるように本人の備忘録を兼ねて書いています。なお、半自動化を進めるにあたってはMacの環境で行っていますが、Windowsでも可能なはずです。また、LUMIXのMOVファイルで動作を確認していますが、SONYのαシリーズでは動画の素材ファイルには撮影データは埋め込まれておらずxmlファイルで別途管理されているという認識です。暇があったらα用に同じ環境を作ってみたいと思います。

なお、下記情報を元に発生したいかなる事故も当ブログでは責任を負いません。必ず安全に作業できるようにPCとは切り離した状態での素材バックアップをお願いいたします。(お約束ですが、すいません。)

なお、Windowsを使って動画のメタデータだけを見たい、という方は下記の過去記事をご覧ください。

sumizoon.hatenablog.com

インストールが必要なもの

ExifTool

ExifToolは本来はスチルデータに埋め込まれたexif情報を見るためのツールですが、動画ファイルからメタデータF値/ISO/SS/その他諸々)を取り出すためのツールとして使えます。

ExifTool本家よりダウンロード

2021.2.28現在で最新バージョンは12.21です。上記サイトからディスクイメージをダウンロードしてダブルクリックするとパッケージアイコンが現れますので、さらにダブルクリック。

f:id:sumizoon:20210228210658p:plain

ですが、大概の環境の場合はセキュリティ警告が出るのでシステム環境設定から「このまま開く」を押します。

f:id:sumizoon:20210228210233p:plain

でそのまま進んでいくと、インストールが完了します。

f:id:sumizoon:20210228210521p:plain

このツール(exiftool)は/user/local/bin/exiftoolに実行体がインストールされます。ver確認は

exiftool -verで確認することができます。(下図はver 12.21インストールされた場合のもの)

f:id:sumizoon:20210228210539p:plain

手始めにexiftool <動画ファイル>としてツールを実行してみましょう。

 

f:id:sumizoon:20210228212503p:plain

恐ろしいほどの情報量が分かります。例えば

・カメラ機種名及びシリアルNO
・レンズの機種名及びシリアルNO
・露出モード(Manual/絞り優先/プログラムオート/SS優先)
・ホワイトバランスの設定情報
・動画解像度、フレームレート、
・コーデック、クロマサンプリング方式、ビット深度、色域(ガマット)
・絞り、ISO、シャッタースピード
・カメラの傾き(Roll/Pitch)
・35mm換算焦点距離
・撮影ガンマ(Portrait、CineLikeDやV-Logなど)
・手ぶれ補正のON/OFF

あたりは序の口で撮影時の加速度センサの状態まで記録されています。(おそらく撮影開始時もしくは終了時のいずれかだと思いますが)また、ファームウェアのバージョンも当然ながらここには表示されます。

 

Camera Model Name : DC-S5
Serial Number : XXXXXXX
Lens Type : 35mm F2 DG DN | Contemporary 020
Lens Serial Number:XXXXXXX
Exposure Program:Manual
ISO:640
Shutter Speed:1/60
F Number:4.0
Codec:H265_420_LongGOP
FrameRate:59.94p
Image Size:3840x2160

などなど、一部記載

ここまではコマンドライン上で出力されますので、あとはちょっとシェルを扱える人であればどうにかこれらを自動生成するためのスクリプトを作成できると思います。
なお、今回はExifTool上のオプションを使わずに全て情報を出力した上でシェルスクリプトでどうにか下記の画像生成をボタンポンで生成する所までが目標です。

f:id:sumizoon:20210228233142p:plain

生成されるPNGファイル(黒い部分は透明)

ImageMagick

ImageMagickメタデータを取得するためには必須のツールではありませんが、ExifToolで取得した情報(文字列)をpngファイルに変換するために必要です。他に方法はあるかもしれないけど、私は昔からこの手の方法しか知りません。

ImageMagickをパッケージでインストールするのも手ではあるのですが、brewmacOS用パッケージマネージャー)を使ってインストールするのが確実の様です。

brewのページにある様に下記コマンドをターミナル常に打ち込みます。

f:id:sumizoon:20210228221522p:plain brewがインストールできたらターミナルから

brew install imagemagick

を叩けばImageMagickがインストールされます。一点注意なのはImageMagickは結構脆弱性が指摘されているツールの様です。今回はImageMagickを使いましたが、代替品がある様でしたら教えてください。(まあ、大概のLinuxディストリビューションに含まれるImageMagickなのでそこまで心配はしていませんが)

f:id:sumizoon:20210228222311p:plain

実際に使うのはImageMagicの中のconvertという実行体で、これはありとあらゆるファイルフォーマットを自由自在に画像フォーマット変換するツールです。今回はExifToolで取得したテキストファイルを任意の解像度を持つPNGファイル(背景透明、白文字)を生成するために使用します。convertは/usr/local/bin以下にインストールされます。

スクリプトを組む

お断りしておきますが、私はプログラムが苦手で全くと言ってプログラム脳を持ち合わせていません。なので死ぬほど恥ずかしいコードになりますのでご了承ください。というかプログラムじゃなくてベタなシェルスクリプトです。

基本的な動きを書くと下記の様な記述です。

・foreachでディレクトリ内のMOVファイルを全て処理するループを回します。

・exiftoolを実行して中間テキストファイル($1_tmp.txt)を出力

・上記に対してさらにgrepで抽出したい文字列を検索して中間ファイル($1_tmp2.txt)に順次書き込む

・最後にImageMagick(convert)でテキストファイルをPNGに変換して次のMOVファイルの処理を行い、ファイルを全部処理したらループを抜けます。

 

#!/bin/csh

 

foreach  file (*MOV) 

exiftool $file > $1_tmp.txt

 

#カメラ機種の取得

set CAMERA = `cat $1_tmp.txt | grep 'Camera Model Name'`

> $1_tmp2.txt

echo $CAMERA >! $1_tmp2.txt

 

#レンズ情報の取得

set LENS   = `cat $1_tmp.txt | grep 'Lens Type  '`

echo $LENS >> $1_tmp2.txt

 

#絞り情報の取得

set FNUM   = `cat $1_tmp.txt | grep 'F Number'`

echo $FNUM >> $1_tmp2.txt

 

#SSの取得

set SS   = `cat $1_tmp.txt | grep 'Shutter Speed '`

echo $SS >> $1_tmp2.txt

 

#ISOの取得

set ISO   = `cat $1_tmp.txt | grep 'ISO  '`

echo $ISO >> $1_tmp2.txt

 

#WBの取得

set WB   = `cat $1_tmp.txt | grep 'White Balance    '`

echo $WB >> $1_tmp2.txt

 

 

#焦点距離の取得

set FOCAL   = `cat $1_tmp.txt | grep 'Focal Length'| grep 'equivalent'`

echo $FOCAL >> $1_tmp2.txt

 

#動画解像度の取得

set RESO   = `cat $1_tmp.txt | grep 'Image Size'`

echo $RESO >> $1_tmp2.txt

 

#ガンマプロファイルの取得

set GAMMA    = `cat $1_tmp.txt | grep Semi-Pro | perl -pe 's/. / /g' |

grep CaptureGamma | uniq | sed 's/ //g'|sed 's/</ /g'|sed 's/>/ /g'  |

awk '{print "Caprure Gamma : " $2}'`

 

echo $GAMMA >> $1_tmp2.txt

 

#コーデックの取得

set CODEC    = `cat $1_tmp.txt | grep Semi-Pro | perl -pe 's/. / /g' |

grep Codec | uniq | sed 's/ //g'|sed 's/</ /g'|sed 's/>/ /g' |

awk '{print "Codec : "  $2}'`

 

echo $CODEC >> $1_tmp2.txt

 

#ビット深度の取得

set BIT      = `cat $1_tmp.txt | grep Semi-Pro | perl -pe 's/. / /g' |

grep BitDepth | uniq | sed 's/ //g'|  sed 's/</ /g'|sed 's/>/ /g' |

awk '{print "BitDepth : "$2"Bit"}'`

 

echo $BIT >> $1_tmp2.txt

 

## TEXTファイルのPNG変換

convert -density 600 -units PixelsPerInch  -fill "#FFFFFF" -background "#000000"  -pointsize 15  text:$1_tmp2.txt  -transparent black $file.png

 

rm $1_tmp.txt

rm $1_tmp2.txt

 

end

上記をテキストエディタに保存してhoge.shとでもしてテキトーに名前をつけておきます。

chmod +x hoge.sh

としてファイルの実行権を与えます。で先程のhoge.shをメタデータを取得したいフォルダに入れます。ターミナルを開いてドラックします。(右がそのフォルダで左のターミナルにドラックしている図です。)

f:id:sumizoon:20210301002217p:plain

すると、下記の様に新しいファイルが2つ生成されます。f:id:sumizoon:20210301002244p:plain

 

試しにダブルクリックして生成されたPNGファイル開けると下記の様な画像ファイルが生成されている事が分かります。

f:id:sumizoon:20210301002127p:plain

とまあ、以上です。というかhoge.shをダブルクリックして起動できたら一番楽なんですが、どうもディレクトリがhomeディレクトリで実行されたかのように振る舞ってしまいうまいこと行来ませんでした。なので現状はコマンドラインで変換したいファイルがある所にhoge.shを配置してコマンド実行するか、上記方法で実行してください。

で、得られたファイル(透過PNG)を例えば動画編集ソフトのタイムラインに並べます。この際に大きさは調整する必要がありますが、一つポジションを決めればあとは設定をコピペするだけです。

f:id:sumizoon:20210301003615p:plain

上の例では左下に透過PNGを配置しています。少し上記スクリプトを改造したものを使っています。

f:id:sumizoon:20210301011514p:plain

 

改善の余地はいっぱいある。

問題はこの透過PNGファイルのタイムライン配置作業が現状ではいちいち手作業な事です。

おそらく一旦映像を配置をした後にXMLファイルを吐き出してこれを元にスクリプトで新たなPNGファイルを配置するためのXMLを生成すれば自動化できるとは思います。また、ファイルの再接続をツールを騙して使えば楽に配置作業ができるかもしれませんが現状実現できていません。

それに、おそらく汎用性はかなり低いです。現状はS5/S1Hでしか試していませんがおそらくLUMIX全般には使えるものの、他のメーカーでは動くかどうかは不明です。特にαではこの方法は現状は使えません。

 

てな訳で、今回は誰得な話でしたが、興味のある方はお試しを。できれば、この方法で作例動画を制作した場合は、当ブログのリンク及びSTUDIO SUMIZOONの紹介を貼って頂ければと思います。

 

 

筆者:SUMIZOON

Facebookグループ一眼動画部主宰 お陰様でメンバー3000人到達間近

Youtubeチャンネル STUDIO SUMIZOON の人

 

 

f:id:sumizoon:20200713234902p:plain