DE  |  FR  |  IT

Containerwechsel ohne Transcodierung

Wie können wir nach einem Containerwechsel zuverlässig erkennen, dass keine Transcodierung stattgefunden hat?

[09-03-2020] Beim Umgang mit Videomaterial rät die KOST grundsätzlich von einer flächendeckenden Formatkonvertierung ab. Es kann jedoch dennoch sinnvoll sein, das erhaltene Material in ein archivtaugliches Format oder jedenfalls in ein gängigeres Format zu konvertieren.

Im konkreten Fall geht es um die Konvertierung von Blu-Ray Disc.

Folgende Video-Codecs sind bei Blu-Ray erlaubt: H.262/MPEG-2 Part 2, H.264/MPEG-4 AVC und SMPTE VC-1. Das Containerformat ist M2TS, abgeleitet von MPEG2; im Archiv verwenden wir bevorzugt MPEG4 oder MOV. Wegen möglicher Qualitätsverluste möchten wir aber den Container wechseln, ohne den Video-Codec zu transcodieren.

Post-Processing-Formate

Viele Video-Schnittprogramme, die wir zur Konvertierung einsetzen könnten, wie etwa Adobe Premiere, Apple Final Cut, Cyberlink PowerDirector etc., verwenden bei der Bearbeitung des Videomaterials ein internes Post-Processing-Format, in das das zu bearbeitende Material als erstes konvertiert wird (z.B. ProRes bei Final Cut). Nach dem Containerwechsel kann wiederum der Ursprungs-Codec vorliegen, aber möglicherweise nach zweimaligem Umcodieren. Bei einem Containerwechsel mit ffmpeg sollten wir davor relativ sicher sein, dennoch würden wir gerne wissen, ob der Video-Codec unverändert geblieben ist.

Transcodierung erkennen

(Untersucht und zusammengestellt vom Staatsarchiv des Kantons Zürich StAZH)

Ein Indiz, ob eine Transcodierung stattfindet, ist die Verarbeitungszeit. Ein reiner Containerwechsel ohne Transcodierung müsste sehr viel schneller vonstattengehen als ein Containerwechsel mit Transcodierung, aber das ist natürlich nur ein unscharfer Hinweis.

Es gibt zudem in QC-Tools gewisse Möglichkeiten, Videos zu vergleichen, aber ob sich damit allfällige Transcodierungen nachweisen lassen, hängt offensichtlich von der Art der Transcodierung ab. Versuche mit QC-Tools und MediaInfo haben jedenfalls gezeigt, dass sich mit diesen Werkzeugen bezüglich Transcodierung kaum verlässliche Aussagen machen lassen.

Am sichersten ist folgender Ansatz: ffmpeg erlaubt es, Prüfsummen für die einzelnen Frames zu bilden, die in eine Textdatei geschrieben werden. Die Prüfsummen der einzelnen Frames von Ursprungsdatei und der Datei mit dem neuen Container können nach einer Bereinigung miteinander verglichen werden. Bei einem Containerwechsel ohne Transcodierung müssen diese identisch sein. Das Vorgehen wurde vom StAZH und der KOST-Geschäftsstelle getestet und funktioniert.

Es gibt auch die Möglichkeit, mit ffmpeg Bilddifferenzen zwischen verschiedenen Filmen wieder als Film zu erzeugen (ähnlich wie es für Bilder z.B. KOST-Simy  oder Diffchecker tun). Dabei kann man im Fall einer Transcodierung einen Bildunterschied über die gesamte Länge des Filmes feststellen. Einschränkend ist zu sagen, dass möglicherweise keine Bildunterschiede feststellbar sein werden, wenn die theoretische Qualität der transcodierten Datei besser ist als diejenige der Ursprungsdatei. Beim Vergleich von lediglich umgepackten Filmen dürften in der Theorie keine Bildunterschiede feststellbar sein. In der Praxis haben sich zwischendurch kurz aufflackernde Differenzbilder gezeigt. Diese sind vermutlich durch unterschiedliche Bitraten entstanden, der genaue Grund dafür bleibt aber unklar.

Abschliessend kann man sagen, dass die Methode, mit ffmpeg Prüfsummen für die einzelnen Frames zu bilden, am überzeugenden ist.

ffmpeg-Befehle (nach Reto Kromer, reto.ch)

Containerwechsel (mp4 nach Matroska) ohne Transcodierung (= copy):

ffmpeg -i Input_h264.mp4 -codec copy Output_h264.mkv

Transcodierung (Video nach ffv1 und Audio nach flac) ohne Containerwechsel

ffmpeg -i Input.mkv -codec:v ffv1 -codec:a flac Output_ffv1_flac.mkv

Bilden von Frame-MD5 Prüfsummen:

ffmpeg -i Input_h264.mp4 -f framemd5 Input_framemd5.txt

Bilden eines Differenzbildes zwischen zwei Videos:

ffmpeg -i Input_h264.mp4 -i Output_h264.mkv -filter_complex "[1]format=yuva444p, lut=c3=128, negate [1_mit_Alpha_Kanal]; [0][1_mit_Alpha_Kanal]overlay" Diff_Input-Output.mp4

Die ffmpeg-Dokumentation ist ersichtlich unter https://www.ffmpeg.org/ffmpeg.html.