Was ist eine MPO-Datei?
Eine Multi-Picture-Object-Datei speichert mehrere JPEG-Bilder in einem Container. Die Bilder stellen häufig verschiedene Ansichten einer stereoskopischen Fotografie dar, der Container kann aber auch andere zusammengehörige Bilder enthalten.
So funktionieren MPO-Dateien
MPO ist die Dateiform des Multi-Picture Format, des Standards DC-007 der Camera and Imaging Products Association (CIPA), der erstmals 2009 veröffentlicht und seither überarbeitet wurde. Die Datei beginnt wie eine gewöhnliche JPEG-Datei. Ihr erstes Bild enthält ein APP2-Anwendungssegment mit der Kennung MPF. Darin liegt ein Index in Form eines TIFF-Verzeichnisses: die Anzahl der Bilder und für jedes Bild ein Typ, eine Größe in Bytes und ein Datenoffset. Die übrigen Bilder sind vollständige JPEG-Streams, die an das erste Bild angehängt werden. Ein Programm, das nur JPEG liest, sieht dort lediglich nachgestellte Daten. Deshalb zeigen Anzeigeprogramme ohne MPO-Unterstützung ein plausibles Bild an und ignorieren den Rest. Bekannt ist das Format vor allem von 3D-Kameras, deren Dateien ein Bild pro Blickpunkt enthalten. Der Index kennzeichnet Bilder aber auch als große Thumbnails oder als Einzelbilder eines Panoramas oder einer Serie aus mehreren Blickwinkeln.
Wichtige Fakten
- Lesen Sie den Index, um die eingebetteten Bilder zu finden, statt nach JPEG-Markern zu suchen. Das APP2-Segment mit der Kennung
MPFenthält die Bildanzahl und einen Eintrag pro Bild mit dessen Größe und Offset. Pillow berechnet beispielsweise jeden Offset relativ zum Beginn des MPF-Headers innerhalb dieses Segments, nicht zum Dateianfang, und behandelt das erste Bild als Offset 0. Für eine sichere Aufteilung der Datei werden sämtliche Indexwerte benötigt, da jedes Bild eigene eingebettete Thumbnails enthalten kann. - Bei der Konvertierung über einen Codepfad, der nur JPEG unterstützt, gehen die zusätzlichen Bilder ohne Fehlermeldung verloren. ExifTool beschreibt sie als Daten im JPEG-Trailer hinter dem ersten Bild. Pillow lädt beim Öffnen einer MPO-Datei nur das primäre Bild und greift über
seekauf die anderen zu. Beim Schreiben einer MPO-Datei behältsavenur das erste Einzelbild, sofern nichtsave_allgesetzt oderappend_imagesangegeben wird. Eine einfache JPEG-Ausgabe enthält ein Bild. Um beide Ansichten eines Stereopaars als JPEG zu erhalten, muss daher jede Ansicht in eine eigene Datei geschrieben werden. - Die Dateiendung ist in beiden Richtungen unzuverlässig. Pillow meldet für jedes JPEG, dessen MPF-Index mehr als ein Bild aufführt, das Format
MPO. Das hat Nutzer überrascht, deren Kameradateien mit der Endung.jpgein zusätzliches großes Thumbnail enthalten. Die Verantwortlichen schlossen den Fehlerbericht, weil die Datei ein gültiges MPO war. Code, der anhand des erkannten FormatsJPEGverzweigt, sollte bei solchen Dateien mitMPOrechnen. Pillow macht eine Ausnahme und behandelt Ultra-HDR-Dateien weiterhin als einfache JPEG-Dateien. - Die eingebetteten Bilder sind keine austauschbaren Ansichten. Lesen Sie daher den Typ jedes Eintrags, bevor Sie ihn extrahieren oder verwerfen. Zu den Typen gehören das primäre Bild, große Thumbnails in mehreren Größen, Einzelbilder für Panoramen, Disparitätsbilder und Bilder aus mehreren Blickwinkeln sowie eine Gain-Map. Ein Typ kann auch Undefined sein. Ein nicht erkannter Typ bedeutet daher nicht, dass ein Bild entbehrlich ist. Das Ultra-HDR-Format von Android speichert seine Gain-Map als zusätzliches MPF-Bild. Die Bibliothek libultrahdr von Google schreibt diesen Eintrag jedoch mit einem undefinierten Typ, und die Spezifikation von Android lokalisiert die Gain-Map stattdessen über XMP-Metadaten. Eine Gain-Map ist keine Fotografie: Sie hält fest, wie stark jedes Pixel des primären Bildes für eine HDR-Anzeige aufgehellt werden soll. Wird nur das primäre Bild behalten, bleibt das Bild mit Standarddynamikumfang erhalten und die HDR-Variante geht verloren. Jedes Bild ist ein vollständiges JPEG, das eigene Exif-Daten enthalten kann. Wenden Sie daher die Ausrichtung und andere Metadaten für jedes fotografische Bild einzeln an. Die Gain-Map ist die Ausnahme: Die Spezifikation von Android verlangt, dass ihre Ausrichtung der des primären Bildes entspricht, und ignoriert ihre eigene Exif-Ausrichtung und ihr Farbprofil.
Wann MPO-Dateien relevant sind
Erkennen Sie beim Import von Fotos aus 3D-Kameras oder anderen Geräten, die verknüpfte Bilder speichern, die Mehrbildstruktur. Extrahieren Sie jedes Bild, wenn alle benötigt werden, denn reine JPEG-Software macht nur das erste zugänglich. Suchen Sie auch in Dateien mit der Endung .jpg nach dieser Struktur: Sie wird ebenso für eingebettete große Vorschaubilder und für die Gain-Map von Ultra-HDR-Fotos verwendet.
Quellen
- CIPA-Standardliste: DC-007 Multi-Picture Format (Ausgaben, Download, MP-Typenregister)
- ExifTool-Tag-Namen: MPF-Tags und MP-Bildtypen
- Pillow-Handbuch: MPO lesen, zwischen Bildern wechseln und speichern
- Pillow JpegImagePlugin.py: Parsen des MPF-Segments und die JPEG- oder MPO-Factory
- Pillow MpoImagePlugin.py: Offsetbehandlung und Exif pro Einzelbild
- Pillow-Issue #4603: als MPO erkannte JPEGs
- Ultra-HDR-Bildformat von Android: Zweck, MPF-Speicherung, Speicherort und Ausrichtung der Gain-Map
- libultrahdr multipictureformat.cpp: für eine Ultra-HDR-Datei geschriebene MPF-Einträge