Was ist eine M2TS-Datei?
Eine M2TS-Datei enthält einen BDAV-MPEG-2-Transportstrom, die bei Blu-ray Disc und AVCHD verwendete Variante des MPEG-2-Transportstroms. Darin steht ein Header mit 4 Bytes vor jedem Transportpaket mit 188 Bytes. Sie kann Video, Audio, Untertitelgrafiken und andere Elementarströme in einer Datei multiplexen.
So funktionieren M2TS-Dateien
Das schreibgeschützte Blu-ray-Disc-Format speichert Audio und Video jedes Clips als BDAV-MPEG-2-Transportstrom in einer Datei mit der Endung .m2ts. Der Stream besteht aus Quellpaketen mit jeweils 192 Bytes: Auf einen 4 Bytes großen TP_extra_header folgt jeweils ein standardmäßiges MPEG-2-Transportpaket mit 188 Bytes. Diese Pakete sind in ausgerichteten Einheiten mit 6144 Bytes aus jeweils 32 Paketen gruppiert. Innerhalb der Transportpakete gelten die üblichen Regeln von MPEG-2 Systems: Die Program Association Table verweist auf eine Program Map Table, die die Elementarströme des Programms anhand ihrer Paketkennung identifiziert. Auf einer Disc ist die Datei mit der Endung .m2ts nur die Hälfte eines Clips. Eine gleich nummerierte Datei mit der Endung .clpi speichert die Zeitstempel der Zugriffspunkte im Stream. Playlist-Dateien mit der Endung .mpls beschreiben den Wiedergabeinhalt als Liste von Wiedergabeelementen, die jeweils einen Ein- und Ausstiegspunkt auf der Zeitachse eines Clips festlegen. AVCHD-Camcorder zeichnen im selben Container auf. Die Formatbeschreibung der Library of Congress nennt mts als zweite Dateiendung dafür.
Wichtige Fakten
- Jedes Quellpaket umfasst 192 Bytes: einen 4 Bytes großen
TP_extra_header, gefolgt von einem standardmäßigen MPEG-2-Transportpaket mit 188 Bytes. Ein Parser, der die Datei in Paketen mit 188 Bytes durchläuft, verliert die Ausrichtung, weil das Synchronisationsbyte des Transportstroms in jedem Quellpaket am Offset 4 liegt. Der MPEG-TS-Demuxer von FFmpeg löst dies, indem er die Paketgröße ermittelt und die ersten 4 Bytes jedes Pakets mit 192 Bytes überspringt. - Eine einzelne Datei mit der Endung
.m2tsenthält den Stream eines Clips, keinen Titel. Auf einer Blu-ray-Disc wählen die Playlists mit der Endung.mplsinBDMV/PLAYLISTClip-Abschnitte und deren Reihenfolge aus. Die Clip-Informationsdateien mit der Endung.clpiinBDMV/CLIPINFenthalten die Zeitstempel der Zugriffspunkte, anhand derer ein Player den Lesebeginn bestimmt. Titel liegen eine Ebene darüber: Die Indextabelle der Disc verweist für jeden Titel auf ein Movie Object oder BD-J Object. Movie Objects sind inBDMV/MovieObject.bdmvgespeichert und starten die Playlist-Wiedergabe. Werden die Dateien inBDMV/STREAMeinzeln geöffnet, erhält man daher die Streams jedes Clips, jedoch ohne die Wiedergabereihenfolge und die Ein- und Ausstiegspunkte, die die Playlists festlegen. - Blu-ray-Untertitel können an zwei Stellen liegen. Bitmapbasierte Presentation-Graphics-Streams werden zusammen mit Video und Audio in den BDAV-Transportstrom gemultiplext. Textuntertitel bilden einen separaten Clip außerhalb dieses Multiplexes, den eine Playlist über einen Unterpfad einbindet. Sie befinden sich daher nicht in der Datei
.m2tsdes Hauptclips. Die Stream-Datei des Untertitelclips liegt zusammen mit den Audio- und Videoclips inBDMV/STREAM. Die Untertitelschriften sind separate Dateien mit der Endung.otfim VerzeichnisAUXDATA. - Beim Umpacken von M2TS in einen anderen Container per Stream-Kopie bleiben codiertes Video und Audio unverändert, da nichts decodiert oder erneut codiert wird. FFmpeg weist darauf hin, dass eine Stream-Kopie dennoch scheitern kann, wenn der Zielcontainer Informationen benötigt, die die Quelle nicht bereitstellt. Blu-ray-Clips können MPEG-2-, H.264/AVC- oder VC-1-Video enthalten. Prüfen Sie daher für jeden Stream, ob der Zielcontainer ihn akzeptiert. Untertitel zeigen die Grenze: Im Quellcode von FFmpeg 8.0 hat der MP4-Muxer für keinen der beiden Blu-ray-Untertitelcodecs ein Codec-Tag und weist diese Streams zurück. Clips von kommerziellen Discs sind ein eigener Fall: Die Library of Congress weist darauf hin, dass M2TS selbst keine Verschlüsselung unterstützt, Blu-ray-Discs aber häufig durch AACS geschützt sind.
Wann M2TS-Dateien relevant sind
Medienpipelines begegnen M2TS beim Einlesen von AVCHD-Camcorder-Aufnahmen oder den Clip-Dateien im Verzeichnis BDMV/STREAM einer Blu-ray-Disc-Struktur. Entscheidend ist, ob eine Datei als eigenständiger Stream oder als ein Clip einer Disc behandelt wird: Eine einzelne Datei mit der Endung .m2ts lässt sich für sich demultiplexen. Wiedergabereihenfolge und Zugriffspunkttabellen sind jedoch in den zugehörigen Playlist- und Clip-Informationsdateien definiert, die Titel der Disc in deren Indextabelle.
Arbeiten mit M2TS-Dateien
Der MPEG-TS-Muxer von FFmpeg hat einen m2ts-Modus, der vor jedes Transportpaket ein Präfix mit 4 Bytes schreibt und feste Paketkennungen verwendet. Im Quellcode von FFmpeg 8.0 aktiviert die automatische Einstellung diesen Modus, wenn der Ausgabename auf .m2ts endet. In diesem Modus lässt der Muxer nicht mehr als ein Programm zu. Der Wert, den FFmpeg in das Präfix schreibt, ist ein Zeitstempel mit 30 Bit aus dem Programmtakt des Streams.
Eine Datei aus Paketen mit 192 Bytes zu schreiben, ist nicht dasselbe wie das Authoring einer Disc. Eine Blu-ray-Struktur namens BDMV benötigt zusätzlich Index-, Movie-Object-, Playlist- und Clip-Informationsdateien. Player navigieren über diese statt über die Stream-Dateien. Um eine Playlist statt eines einzelnen Clips zu lesen, bietet FFmpeg das Eingabeprotokoll bluray, das eine Playlist aus einer eingebundenen Disc-Struktur liest.
Quellen
- Library of Congress: Formatbeschreibung des MPEG-2-Transportstroms für Blu-ray Discs (BDAV) und AVCHD (M2TS)
- Blu-ray Disc Association: Whitepaper, schreibgeschütztes Blu-ray-Disc-Format, 2.B Spezifikationen des audiovisuellen Anwendungsformats für BD-ROM Version 2.5 (2011, archivierte Kopie), Abschnitte 2.1 bis 2.3, 3.1 bis 3.6 und 4.1.3
- ITU-T H.222.0 (08/2018) | ISO/IEC 13818-1: MPEG-2 Systems (Transportstrompakete, Program Association Table und Program Map Table)
- FFmpeg-Formatdokumentation: mpegts-Demuxer und mpegts-Muxer (Optionen des m2ts-Modus)
- Quellcode von FFmpeg 8.0: libavformat/mpegts.c (Ermittlung der Paketgröße, Verarbeitung von Quellpaketen mit 192 Bytes und Blu-ray-Untertitelstreamtypen)
- Quellcode von FFmpeg 8.0: libavformat/movenc.c (Codec-Tags des MP4-Muxers)
- FFmpeg-Protokolldokumentation: bluray (Lesen einer Blu-ray-Playlist)
- Dokumentation des FFmpeg-Werkzeugs: Stream-Kopie