ffmpegで動画からJPEGフレームを抽出し、後続のCOLMAPで読み込んで処理する。ffmpegは標準的なツールであり、特別な設定なしで相互運用できることを前提としていた。
ffmpeg 8.1.1が出力するJPEGに 0xFFFE マーカーが含まれており、COLMAPが内部的に使用するFreeImageライブラリがこのマーカーを認識できずクラッシュ。
JPEG(正確にはEXIF-JPEG)は、2000年前後に日本のカメラメーカーが中心となって策定された規格(JEITA CP-3451 / CIPA DC-008)であり、現在はCIPA(一般社団法人カメラ映像機器工業会、Camera & Imaging Products Association)が維持・管理している。デジタルカメラで撮影した画像を保存・交換するための共通基盤として普及し、カメラメーカー各社はこの規格に準拠したJPEGを出力するため、長年にわたり高い互換性が保たれていた。
しかし近年は、カメラ以外のソフトウェア(ffmpegや画像処理ライブラリなど)がJPEGを生成することが増えており、これらが厳密なフォーマット仕様を満たさない場合がある。特にffmpegのような多目的エンコーダーは、カメラ向けに最適化されたEXIF-JPEGのサブセットではなく、より自由度の高いJPEGストリームを出力するため、結果として0xFFFEのような非標準マーカーが含まれることがある。
ffmpeg 8.1.1のLavc MJPEGエンコーダーが 0xFFFE(アプリケーションデータマーカー)を書き込むが、これは標準的なJFIF形式(0xFFE0)ではないため、FreeImageが非対応。
ffmpeg抽出後にOpenCVで全JPEGを再保存し、JFIF形式(0xFFE0 マーカー)に強制変換。
恒久対策済み