異なるPCから同じファイルを編集する可能性があるならば,サイドカーを優先的に読みこむように設定します。それには,以下の設定をします。
1. 画像が表示されている中央のペインの右上にある,「グローバルな設定を表示」を押して設定を表示。
2. 「内部オプション」タブを選択
3. 「起動時に更新されたxmpファイルを探します。」にチェックを入れる
4. 「閉じる」を押して終了
これで起動時により新しいサイドカーがあればそちらを読み込むようになります。
実際には,起動して新しいxmpファイルがあればそれをリストアップした小ウィンドウが表示されて,読み込みたいかどうか確認されます。読み込みをしたいxmpファイルにチェックを入れて左下の読み込みボタンを押すと新しいxmpファイルの内容が読み込まれてその設定が反映される,という動作をします。
オールドレンズを使っていると当然ですが,絞りやレンズの情報がexifに記録されません。そのため,rawファイルの段階で絞りやレンズの情報を書き込んでおいて,それをjpegにエクスポートするときにあわせて書き出すようにできると便利です。ところが,darktableではexifのデータの編集機能は基本的にはありません。メタデータの追加をしたりGPS情報を追加したりすることはできるのですが,例えばF値を編集する,ということはできないのです。
これは仕様だからしょうがないとしてもちょっと不便で困ってしまいました。そこで目をつけたのがサイドカーで,このヘッダ部分にはexif情報をメタデータとして記入することができます。なので,xmpファイルを編集して無理やり必要な情報を追加すればよい,と考えました。となると,xmpファイルの仕様を知らなくてはなりません。それほど情報が多いわけではありませんが,調べてみるといくつかでてきました。基本的な仕様はXMP SPECIFICATION PART 2 STANDARD SCHEMASというドキュメントがありました。なんでpart 2なのかよくわからないのですが,とりあえずstandard schemasとタイトルにあるとおり基本的なスキーマについて記載されています。この文書の3章にSpecialized Schemasという章が設けられていてそのなかのEXIF schemasという節が知りたい情報です。
EXIFスキーマにはtiff, exif-specific, additional exifの3つのプロパティが定義されています。それぞれの名前空間を定義するhttpで始まるアドレスを引用することでtiff:..., exif:..., aux:....といった変数を定義することができます。これらの棲み分けがどういうふうになされているのかはイマイチわかりませんが,変数の定義に従って使い分けるしかないので気にしたら負けです。GPSの情報もexif:GPS...という変数で定義すればよさそうですので,位置情報が書き込まれていない画像ファイルに位置情報を付加したい場合は,xmpファイルのなかでこの変数を設定しておけばよさそうです。
ところが,この文書に記載されている変数だけではレンズの製造メーカー名やレンズのシリアル番号などを設定することができません。これにはだいぶ悩んだのですが,photo Media EditというソフトのユーザーガイドのなかのXMPメタデータというところに変数の一覧が示されていて,EXIFスキーマにはExifEXというプロパティも定義されていることがわかりました。ExifEXのなかにレンズのシリアル番号などを定義する変数が含まれています。
というわけで,darktableで編集できないメタデータはxmpファイルに以下のような変数の値を追加すればよい,ということがわかりました(ここまで来るのにだいぶ時間がかかりました)。
1. F値の設定
F値は有理数で定義する,ということなので,F4ならば
exif:FNumber="40/10"
とでも定義しておけば良さそうです。
2. レンズの焦点距離
レンズの焦点距離に関する変数は,2つあって,一つは焦点距離そのもの,もう一つは35mm (フルサイズ)センサーに換算したときの画角に相当する焦点距離です。後者はフルサイズセンサーであれば焦点距離そのものを書いておけばよいのですが,APS-Cサイズのセンサーの場合は1.5 (または1.6)倍した数字を書いておきます。どういうわけか,焦点距離は有理数で,35mm換算版値は整数で設定するようです。50mmレンズをフルサイズセンサーで撮影した場合は,以下のように設定します。
exif:FocalLength="100/2"
exif:FocalLengthIn35mmFilm="50"
3. レンズ情報の設定
exifには冗長な情報がたくさんありますが,レンズの情報もそのようなスタイルであちこちの変数に冗長に書き込まれています。関係するのは以下の変数で,例えば東京光学のTopcor-S 5cm F2というレンズであれば以下のように書けばよさそうです。
exifEX:LensMake="Tokyo Kogaku"
exifEX:LensModel="Topcor-S 1:2 f=5cm"
exifEX:LensSerialNumber="220089"
aux:Lens="Tokyo Kogaku Topcor-S 1:2 f=5cm"
最後のaux:Lensというのはある意味何を書いておいてもよさそうですが,本来は最初の2つのexifEXから自動的に生成されるべきもののような気もします。ここでは手動で編集しているので手で書いちゃう感じですが。
あとは,名前空間を定義するurlを指定しておけばOKです。名前空間の定義はxmlnsです。これらを書くのはrdf:Descriptionというタグの中です。GPSの緯度経度は数字を伏せ字(xとy)に置き換えていますが,以下のような感じでdarktableが書き出したxmpファイルに足りない情報を追記します。
<rdf:Description rdf:about=""
xmlns:exif="http://ns.adobe.com/exif/1.0/"
xmlns:exifEX="http://cipa.jp/exif/1.0/"
xmlns:aux="http://ns.adobe.com/exif/1.0/aux/"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:darktable="http://darktable.sf.net/"
exif:DateTimeOriginal="2020:08:09 09:27:30"
exif:GPSVersionID="2.2.0.0"
exif:GPSLongitude="139,xx.xxxxxxxE"
exif:GPSLatitude="35,yy.yyyyyyN"
exif:GPSAltitudeRef="1"
exif:GPSAltitude="877/10"
exif:FNumber="40/10"
exif:FocalLength="100/2"
exif:FocalLengthIn35mmFilm="50"
aux:Lens="Tokyo Kogaku Topcor-S 1:2 f=5cm"
exifEX:LensMake="Tokyo Kogaku"
exifEX:LensModel="Topcor-S 1:2 f=5cm"
exifEX:LensSerialNumber="220089"
xmp:Rating="0"
xmpMM:DerivedFrom="L1000277.DNG"
darktable:xmp_version="3"
darktable:raw_params="0"
darktable:auto_presets_applied="1"
darktable:history_end="6"
darktable:iop_order_version="5">
このようにしてxmpファイルを手動で編集したあと,改めてdarktableを起動して更新されたxmpファイルを読み込ませたのちに,現象した結果をjpegにエクスポートすればOKなはずなのですが,追記した情報がexifに反映されない,というワナにはまりました。
darktabledでjpegとしてエクスポートするにはライトテーブルの右側のペインの「選択画像をエクスポート」から行います。これを開くと一番下に「エクスポート」というボタンが現れますが,その右に歯車のマークがあってエクスポートする情報を設定をすることができます。右下の+ボタンを押すと大量にメタデータ名が表示されますが,そのなかから必要なものを追加します。今やりたいことは,レンズのF値と焦点距離,レンズ名情報を出力することですので以下のメタデータを追加します。
Exif.Photo.FocalLength
Exif.Photo.LensMake
Exif.Photo.LensModel
Exif.Photo.LensSerialNumber
なぜか,FocalLengthIn35mmFilmは設定しなくても勝手に出力するようです。よくわからん...。
エクスポートするときのjpegの品質は99%にするとカメラ(Leica M246)が出力するjpegファイルと同じくらいのサイズになりました。
これでなんとかやりたいことができるようになりました。もっとうまい方法があるのかもしれませんが,ずいぶんとはまりました。