面倒なのでずっと後回しにしていた、ACDSeeで付けた画像のメタデータをdigiKamに移行した。実際にはメタデータは画像ファイルに埋め込んだので、正確にはdigiKamに移した訳ではなく、「ACDSeeから脱却した」と書くのが正しい。

いろいろ検討して、以下のような手順にした。

  1. ACDSeeで、ACDSeeのDBの全画像情報をXMLファイルにエクスポートする。全画像の情報をエクスポートするため、検索で全画像を一覧に出し、全部を選択して右クリックのメニューでエクスポートする。(もっとまともな方法はなかったのだろうか?)
  2. XMLファイルから以下の情報を抽出する。→ 抽出するプログラムを作った(XMLファイルはPHPのSimpleXMLでデコードできた)。
    • ファイル名 → FolderとName要素より
    • キャプション → Caption要素より
    • カテゴリ → AssetCategoryList要素より
  3. キャプションまたはカテゴリの付いたファイルに対して、exiftoolを使って画像にタグを設定する(埋め込む)。設定前にファイルの更新日時を保存しておき、設定後に戻す(exiftoolは更新日時を変えないのかも知れないから、実際には不要だったかも)。→ 上の抽出と同じプログラムで実施した。
    • キャプション → Descriptionタグに設定する。
    • カテゴリ → Categoriesタグに設定する。
      • 例: AssetCategoryが”Albums\日常の光景”の場合、以下のようなコマンドになる。
        • exiftool -Categories=’<Categories><Category Assigned="0">Albums<Category Assigned="1">日常の光景</Category></Category></Categories>' IMG_0333.JPG

なお、メタデータの埋め込みはACDSeeでも可能なのだが、埋め込み後にファイルの更新日時を戻す必要があり、必ずしもすべての画像に日時が入っている訳ではなく、戻らない可能性があるので自作した。

1は検討のために実施済みだったので、今日は2と3を実施した。以下に気付いた点を書く。

  • 当然ながら、XMLファイルには画像ファイルのファイル名がWindowsのパスで書かれているので、Linuxのパスに変換する必要がある。これは先日のショートカットの変換と同様に、XMLファイル中に現れるWindowsのトップディレクトリを、Linuxのに置換するようにした。
  • XMLファイル中の画像ファイルのパスの先頭には、ドライブ名の代わりにボリューム識別子(例: "<Local\1234ABCD>")が付いているので、削除した(この無駄な物のおかげで、HDDを交換するたびに何度も「DBメンテ」の手間を掛けさせられた)。
  • XMLファイルは10MB近くあったが、問題なく読み込めた。
  • digiKamでは、キャプションはEXIFのCommentタグではなくXMPのDescriptionタグを参照するようだ。ただ、それはdigiKamでは”Caption"(または「キャプション」)と表示されるのでややこしい。
  • キャプションとカテゴリを埋め込む時に、ショートカットに対応する必要があると思って、ショートカットの実体(正確には、先日変換したシンボリックリンクの実体)を探して埋め込む処理を作ったが、実際には、XMLにはショートカットは登録されていなかった。
  • ファイルにEXIF情報がない場合でもファイルの更新日時が戻せるように、(EXIF情報の日付を更新日時に設定するのでなく)あらかじめファイルの更新日時を保存しておいて、埋め込み後に再設定するようにした。
  • 音楽ファイルのUSBメモリへの同期プログラムと同様、ファイル名の特殊文字('など)で結構ハマった。結局、その同期プログラムのエスケープ処理をそのまま使った。
  • 同様に、カテゴリやキャプションもエスケープ処理した。やはり、特殊文字を特別扱いしないsystem関数が欲しくなった。
  • BMPファイルにはメタデータは埋め込めなかったが、数個しかなかったので諦めた。
  • digiKamの日本語訳もイマイチで、却って混乱するので、英語で使うことにした。

全約3万ファイル(メタデータを埋め込んだのは約1.8万個)を処理するのに約1.5時間掛かった。もちろん、何度もバグを直しては再実行したので、実際にはほぼ1日(昼間)掛かった。

キャプションやカテゴリが画像ファイルに埋め込まれたので、今では、ACDSeeで設定したキャプションなどの情報が、以下のようにdigiKamで表示できるようになった(右側のタブだけでなく、サムネイルの下にも出る)。もちろん、PixやXnViewMPなど、他のソフトでも表示される。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88_2016-11-23_21-55-01_v2

digiKamでキャプションとカテゴリが表示される。(懐かしい写真...)

これで、メタデータが特定のプログラムに依存しなくなったので、自由に付けられる。今までは、「付けてもACDSeeだけだから、無駄になるかも・・・」と、若干躊躇していたのだ。また、処理手順が分かったので、今後新たな状況になっても移行は容易だ。

(23:02 加筆, 11/24 0:14, 6:12 若干加筆・修正)

PS. 着々と減っているLinux移行のTODO。次は、MusicBeeに入れたビデオのメタデータの移行でもやろうか。今日のとちょっと似ているので楽ではあるが、面倒は面倒だ。キーワードは"nfo"。フォーマット非公開のDBを使うプログラムなんてクタバレ!

  •   0
  •   1

2件のコメント

  1. naoki:

    へえー,こういうことができるんですね。こんな風に写真を整理できたら楽しそうだなあ……。
    (日付でしか管理してないです)

    •   1
    •   0
  2. PiuLento:

    ●ええ、ちゃんとやると整理に便利ですよ。ただ、面倒で、今はカテゴリは1個(「日常の光景」)しか使ってませんがw

    そしてこれ、技術的にはなかなかおもしろかったです。できないと思い込んで諦めかけていたのですが、しつこく調べたら、方法が見つかったのです。

    •   1
    •   0

コメントを書く

名前    

メール 

URL