Kurz gesagt
Der Kamerasensor Ihres Handys ist im Querformat fest im Gehäuse verbaut. Filmen Sie mit aufrecht gehaltenem Handy, nimmt der Sensor trotzdem ein Bild im Querformat auf. Das Handy schreibt lediglich ein Flag in die Datei, das besagt: „um 90° gedreht anzeigen“. Jeder Player auf dem Handy beachtet dieses Flag. Manche Software anderswo, etwa ältere Schnittprogramme, einige Web-Player und bestimmte Upload-Verarbeitungen, ignoriert es oder entfernt es, und dann läuft das Video auf der Seite liegend. Das Flag wieder einzusetzen ist eine Änderung der Metadaten: Sie dauert unabhängig von der Dateigröße einen Bruchteil einer Sekunde und kodiert nichts neu.
Was das Flag eigentlich ist
Eine MP4- oder MOV-Datei ist ein Baum aus Boxen. Die Box, die die Darstellung einer Videospur beschreibt, heißt tkhd (Track Header) und enthält eine 3 × 3-Transformationsmatrix: neun Zahlen, 36 Bytes, die ein Player auf jedes Bild anwendet, bevor er es zeichnet. Bei einem ungedrehten Video ist die Matrix die Einheitsmatrix. Bei einem aufrecht mit dem Handy gefilmten Video ist sie eine Drehung um 90°. Die Pixel in der Datei liegen im Querformat vor, die Matrix sagt „dreh sie“. Android schreibt dieselbe Information als separaten Wert rotation; ffmpeg meldet beides als rotate: 90 in den Stream-Metadaten.
Diese Konstruktion ist Absicht. Die tatsächlichen Pixel während der Aufnahme zu drehen, würde für jedes Bild einen kompletten zusätzlichen Durchlauf durch den Encoder kosten, und das im Akkubetrieb. Neun Zahlen zu schreiben, kostet nichts. Dieselbe Überlegung steckt hinter der EXIF-Ausrichtung bei Fotos, und sie scheitert auf dieselbe Weise: Jedes Programm, das das Tag nicht liest, zeigt die rohe Ausrichtung.
Wer es verliert
- Ältere Desktop-Schnittprogramme und Player, die entstanden, bevor Handys Hochkant-Videos aufnahmen. VLC und QuickTime beachten die Matrix seit Jahren; manche Videosysteme in Unternehmen und ältere Versionen des Windows Media Player tun es nicht.
- Transcoder, die den Videostream kopieren, aber den Container neu aufbauen. Ein Tool, das „ohne Neukodierung, verlustfrei“ verspricht, schreibt unter Umständen trotzdem einen frischen
tkhdmit Einheitsmatrix. Die Pixel überleben, die Anweisung nicht. - Manche Web-Uploads. Eine Website, die beim Upload neu muxt, kann das Tag verlieren; eine Website, die neu kodiert, rechnet die Drehung meist korrekt ein.
- Zusammenfügen. Werden ein Clip im Hochformat und einer im Querformat zu einer Datei verbunden, hat die gemeinsame Spur nur eine Matrix, und eine der beiden Hälften ist falsch.
Zwei Korrekturen, eine davon kostenlos
Die Matrix neu schreiben. Setzen Sie die tkhd-Matrix (oder das Rotationsfeld) auf den Wert, mit dem das Video richtig angezeigt wird. Dabei werden ein paar Dutzend Bytes in eine Datei geschrieben, die Gigabytes groß sein kann; Video- und Audiostreams werden unverändert durchkopiert. Eine halbe Sekunde, kein Qualitätsverlust, gleiche Dateigröße. Genau das macht Video drehen standardmäßig: Es liest die Datei auf Ihrem Gerät, schreibt den korrigierten Header und gibt Ihnen die Datei zurück. Da nichts dekodiert wird, geht das bei einer Aufnahme mit 4 GB genauso schnell wie bei einer mit 4 MB.
Neu kodieren und die Drehung einrechnen. Jedes Bild dekodieren, die Pixel drehen, erneut kodieren. Nötig ist das nur, wenn das abspielende Programm die Matrix bekanntermaßen ignoriert und Sie es nicht austauschen können, etwa bei einem Digital-Signage-Player oder einem alten CMS. Es dauert so lange wie das Video selbst (ohne Hardware-Encoder länger) und kostet eine Generation Qualität. Video drehen bietet das als zweite Option an, mit dem WebCodecs-Encoder des Browsers, und weist in der Oberfläche darauf hin, weil es der aufwendige Weg ist.
Warum die „kostenlose“ Korrektur manchmal nicht wirkt
Läuft das Video in einem Programm seitlich und in anderen richtig, ignoriert dieses Programm die Matrix, und ein Neuschreiben hilft nicht. Dann hilft nur das Einrechnen der Drehung. Läuft es überall seitlich, ist die Matrix verloren gegangen, und das Neuschreiben ist die Lösung. Ein schneller Test: Öffnen Sie die Datei in einem aktuellen Browser (Chrome, Safari und Firefox beachten das Tag alle). Seitlich im Browser → Matrix falsch oder fehlend → neu schreiben. Richtig im Browser, seitlich im anderen Programm → das Programm ist das Problem → Drehung einrechnen.
Verwandte Fallen
- Vorschaubilder. Ein Einzelbild aus einem seitlich liegenden Video kommt ebenfalls seitlich heraus, weil das Bild aus dem Stream stammt und nicht aus der Anzeige. Korrigieren Sie zuerst das Video, dann entnehmen Sie das Bild.
- Kürzen. Schneiden ohne Neukodierung erhält die Matrix; ein Tool, das neu muxt, unter Umständen nicht. Kommt ein gekürzter Clip liegend zurück, hat das Schneidetool das Tag verworfen, und ein Neuschreiben der Matrix stellt es wieder her.
- Gespiegelte Videos der Frontkamera. Das ist ein anderes Flag (eine horizontale Spiegelung in derselben Matrix), und es gilt dieselbe Korrektur.