darktableとxmpファイル(サイドカーファイル)

darktableではrawデータには変更を加えることなく,その処理のプロセスを~/.config/darktable/以下にデータベースとして格納するとともにrawファイルと同じディレクトリにxmpという拡張子をもつXMLファイル(サイドカーファイルと呼ぶらしい)を出力します。同じ情報が別のファイルに分散して書き込まれるのは冗長に思われますが,現象の過程を他の人や他のPC上のdarktableと共有する,といった目的にはサイドカーが有効です。rawファイルにdarktableから一度でもアクセスすればxmpファイルは自動的に出力されます。

異なる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ファイルと同じくらいのサイズになりました。

これでなんとかやりたいことができるようになりました。もっとうまい方法があるのかもしれませんが,ずいぶんとはまりました。

darktableで現象

モノクロ写真はちょっと調整をするのがよさそうですので,rawで撮って現象をしたくなってきます。AdobeのLightroomを使えばよいのかもしれませんが,いかんせん高いのでフリーの現像ソフトを探しました。モノクロ写真がなんとかねればよい,という考えのもとではカメラはLeica M Monochrom Typ 246だけが対象なので,DNGフォーマットのファイルが扱えればよいことになります。

探してみて見つかったのが,Fotor Photo Editorとdarktableです。

fortorはかなりお手軽な感じで自動で現像するならこれでよさそうです。しかし,自動でやるんだったらカメラ内現像でもよいわけで,なんだか目的と噛み合っていません。一方のdarktableはWindowsやmacOSだけでなく,LinuxやFreeBSDにも対応していてunix環境でも使えると云うのは,日常生活にFreeBSDを使っている私の場合はとても魅力的です。しかしfortorとは正反対で設定パラメータが多くて何をどう手をつけて良いのかよくわからん,という感じです。

まずは,darktableの使い方を探してみました。version 3.0から,画像処理の考え方が根本から変わったと云うことなので古い情報はあまり役に立たないのかもしれませんが,設定ファイルがどこに書かれているか,といった基本的な情報は,ここ3ページ目の情報が有用です。

要するに
1. 元画像のファイルはread onlyで読み込む。
2. 画像編集の情報は全て~/.config/darktable/以下にデータベースとして格納されている。
3. 同時に元画像のあるディレクトリにデータベースと同じ情報がxmpファイルとして保存される。
ということのようです。データベースには元画像のファイルの絶対パスが書かれているらしく,元画像を別のディレクトリに移動させたりするとなんだかわからなくなってしまいます。また,~/.config/darktable/のデータベースファイルがxmpファイルに優先される,ということなので,異なる複数のPCで編集をするとその編集過程が互いに反映されない,ということになります。

そこで,画像の右上にある歯車のアイコン(macOS版の場合)をクリックして設定メニューを表示し,「内部オプション」タブの「起動時に更新されたxmpファイルを探します」にチェックをいれておけば複数のPCで編集してもそれぞれの編集結果が引き継がれると思われます(同時に編集をしているdarktableは1つだけ,ということが前提です。確認していないのでなんともいえませんが)。

使い方については,ここにdarktable version 3.0についてその考え方と作業手順についての懇切丁寧な説明があります。この解説によると,

1. 露光
2. ホワイトバランス
3. カラーバランス
4. フィルミックRGB
の4段階でワークフローの80%ができる

のだそうです。

モノクロ画像であれば,2と3はどうでもよいので1と4だけでほぼ完結することになります。4のフィルミックRGBはダークルームのモジュールのリストがある右側ペインの下にある「他のモジュール」というところに入っているので,それを探して立ち上げます。そうすると,「トーンモジュール」の中に勝手に追加されるので次からは「他のモジュール」から探す必要はなくなります。

フォトミックRGBの理論がよくわかっていないので何をどのように編集すると何が変わるのかよくわからないというところもあるのですが,いろいろ触って体で覚えるしかないのかもしれません。画像の露光の調整では,露光のオーバーを赤,アンダーを青で表示するボタンをonにしておくと便利です。このボタンは画像の下にいくつか並んでいるボタンの一つで,正方形の右下半分の三角形が白,左上半分の三角形が黒のアイコンで表示されています。

これで適切に編集ができるか,というとなかなか難しかったりします。でも,パラメータを触って画像の変化を見ながら体で覚えるのが手っ取り早いのかもしれません。

実践的な方法についてはこちらが詳しいです。自分でパラメータを触るのが難しい場合は,最初は「スタイル」を適用して気に入るように微修正する,というのがよいかもしれません。スタイルはここからダウンロードしてライトテーブルのスタイルというメニューからインポートしたうえで,ライトテーブルで写真を選んだ後,スタイルをダブルクリックすると適用されます。膨大なスタイルから好みのものを探す方がたいへんかもしれません。

Carl Zeiss Sonnar 50mm F2 (Lens #015)

Carl Zeiss Sonnar 1:2 f=50mm
マウント:Contax C
焦点距離:50mm
開放F値:2
絞り羽根:11枚
レンズ構成:3群6枚
最短撮影距離:0.9m
フィルター径:40.5mm
質量:135.64g (実測値)

IMG_5917.JPG

Hexanonレンズを順調に(?)連載してきたのに,なぜか突如としてContaxレンジファインダー用(Contax Cマウント)レンズの乱入です。

Sonnarといえばベルテレと脊髄反応してしまうくらい有名な設計者による有名なレンズです。1931年にベルテレが写真機用(Contax)用Sonnarとしてはじめて設計したレンズは5cm F2でした。Sonnarの特許そのものは1929年にとっており,その後すぐに,映画撮影機用のSonnarが設計されています。ベルテレは1900年生まれだそうですので30歳前後で後世まで残る発明を世に送り出したことになります。もちろん時代背景が異なるので,現在の我々と同列で比較することは難しいことは言うまでもありませんが,それにしてもたいへんな仕事をした人物だったと想像に難くありません。

収差の補正には多くのレンズを用いた方が有利ですが,レンズのコーティングが十分ではなかった時代には出来る限り空気とガラスの境界面を少なくすることが求められました。そのような要請に巧みに応えたのがSonnarだったといえます。最初に設計された開放F2のレンズは3群6枚,その後に設計された開放F1.5,いわゆる「イチゴのゾナー」は3群7枚です。3枚貼り合わせのレンズがSonnarの特徴だと認識していますが(とても短絡的です),後世のレンズでSonnar銘のものはあまりそのような構成に拘らずに名前がつけられているものもあるようです。

手元にあるSonnar 50mm F2のレンズはシリアルナンバーが149万番台ですので,1953年から1959年の間の比較的早い時期にCarl Zeiss, Oberkochen, West Germanyにおいて生産された個体であると想像されます。ベルテレがSonnarを設計したときにはまだカラーフィルムは開発途上だったはずですし,この個体が世に出た時はカラーフィルムは存在していたけれどもまだ一般的ではなく,黒白フィルムを使うのが普通だった時代です。ネット上ではこってりした色のりのレンズだというようなコメントも見られますが,どうせならモノクロ時代のレンズはモノクロで撮ってみたい,と思います。

また,この個体はフィルター枠に当たりがあってフィルターがねじ込めないので,被せ式のコダックの(かなり無骨な)フードにシリーズ6のUVフィルタを挟んでいます。アメリカ風味のごついフードとちょっと繊細なイメージのSonnarは完全にミスマッチです。見た目的には全然ダメですが,古いレンズをフードなしで使うのはやや無理がありますから,実をとったということで自分的には納得しています。

IMG_5921.JPG
IMG_5920.JPG
IMG_5918.JPG

このレンズによる作例をこちらにおいています。よろしかったらご覧ください。