Ich suche nach einer Möglichkeit, mit meinem Nexus 4 auf meinem Debian Wheezy-System aufgenommene Videos zu drehen. Die Videos werden im Hochformat aufgenommen und ich möchte sie in den Querformatmodus drehen. Vorzugsweise erfolgt die Drehung über die Befehlszeile.
Ich habe einige frühere Fragen gefunden, die auf eine gute Lösung hinweisen, aber ich scheine es nicht zu schaffen, sie zum Laufen zu bringen.
Zunächst gab es folgende Frage: Rotieren von Videos mit FFmpeg
Aber es zeigt an, dass ffmpeg veraltet ist und dass ich avconv verwenden sollte. Ich fand diese Frage, die den weiteren Weg beschreibt. /ubuntu/269429/how-can-i-rotate-video-by-180-degrees-with-avconv
Dies brachte mich dazu, folgenden Befehl zu verwenden:
avconv -i original.mp4 -vf "transpose=1" -codec:v libx264 -preset slow -crf 25 -codec:a copy flipped.mp4
Dies ist jedoch akribisch langsam (der letzte Test dauerte mehr als 6 Stunden für weniger als 3 Minuten Filmmaterial) und führt nicht zu einem abspielbaren Film. Ich erhalte auch einen Fehler bei der Protokollierung der Ausgabe, in dem Mb Rate> Level Limit angegeben ist.
Gibt es hier ein Problem mit der Neucodierung? Sollte ich die Videos zuerst von meinem Telefon auf eine andere, "funktionsfähigere" Codierung umcodieren, bevor ich die Rotationen anwende? Oder fehlt mir ein weiterer wichtiger Punkt?
ffmpeg
von FFmpeg ist nicht veraltet. Die gefälschte Fälschungffmpeg
von Libav (eine Gabel von FFmpeg) ist veraltet. Sie können nicht ohne Neucodierung drehen, es sei denn: 1) Ihre Eingabe ist MJPEG oder 2) Sie drehen sich bei der Wiedergabe.Antworten:
Wenn Sie die Metadaten nur so ändern möchten, dass Mediaplayer, die das Flag berücksichtigen, die gedrehte Datei abspielen, versuchen Sie Folgendes:
wie an anderer Stelle auf Stackoverflow gefunden .
quelle
ffprobe -v quiet output.mp4 -show_streams|grep rot
. Auf einem Video, in dem die Rotation erfolgreich angewendet wurde, sehe ich diese Ausgabe:TAG:rotate=90 rotation=-90
:0
Nachher-metadata
nicht da ist - was macht das? Wofür ist-c copy
? ..:s:v:0
After-metadata
ist der Stream-Bezeichner, der ffmpeg nur mitteilt, zu welchem Stream die Metadaten hinzugefügt werden sollen.:s
steht nur für die Streams der Eingabedatei,:v
wählt Videostreams aus und die Zahl ist der auf Null basierende Stream-Index - dies wählt also nur den ersten Videostream aus. Da Sie normalerweise nicht mehr als einen Videostream haben,:s:v
sollte dies zu demselben Ergebnis führen. Die-c
Option gibt den Codec an, der zum einfachencopy
Kopieren der Streams ohne Neucodierung verwendet werden soll.Rotation = 0 hat mein Problem behoben. Ich habe mit der Videoaufnahme im Hochformat begonnen, meinen Fehler erkannt und mein Telefon sofort auf Querformat geschaltet, um die Aufnahme fortzusetzen. Mein iPhone hatte das Video als Porträt für das gesamte Video markiert.
Repariert.
quelle
FFmpeg
und ähnliche Programme ändern die Metadaten auch mit der-map_metadata
Option.exiftool
kann die Rotationsmatrix und das Rotationsflag lesen und seit Version 10.89 auch wie unten beschrieben schreiben.Um eine echte verlustfreie Rotation (einschließlich Metadaten) zu erzielen, konnte ich keine Lösung finden. Deshalb griff ich nach einem Hex-Editor (z. B. HxD ) und analysierte die gedrehten Videodateien.
Echte verlustfreie Rotation von MP4:
vide
nach den Metadaten der Videospurtrak...\tkhd
@
Schild stehen (HEX 40)keine Drehung:
180 °:
90 ° cw:
90 ° ccw:
Ändern Sie die Datei nach Bedarf, und sie sollte in Spielern gedreht werden, die das Rotationsflag unterstützen (die meisten aktuellen Spieler tun dies).
Wenn Ihr Video Stereo-Audio enthält, wird dies offensichtlich nicht umgeschaltet. Wenn Sie also möchten, dass der Ton mit der Videodrehung (180 °) übereinstimmt, müssen Sie den linken und rechten Kanal umschalten.
quelle
Es gibt mehrere Dinge, die Sie in Ihrer Frage angesprochen haben:
avprobe original.mp4
damit es festgestellt werden kann.quelle
Diese Antwort ist lediglich eine Zusammenfassung der Kommentare von LordNeckbeard.
Drehen ohne Codierung
Drehen ohne Neucodierung ist nur möglich, wenn:
Drehen Sie mit der Codierung mit dem richtigen ffmpeg
Um die dazu erforderlichen Schritte richtig zu verstehen, sollte man zunächst diese Frage lesen oder zumindest überfliegen:
Was sind die Unterschiede und Ähnlichkeiten zwischen ffmpeg, libav und avconv?
Zusammenfassung: avconv ist eine Abzweigung von ffmpeg, der Debian-Betreuer hat avconv gewählt. Sie müssen das richtige ffmpeg aus dem Quellcode kompilieren.
Der nächste Schritt wäre das Kompilieren des richtigen ffmpeg aus der Quelle, wie hier beschrieben:
Kompilierungsanleitung von ffmpeg für Debian
Der letzte Schritt ist die Verwendung der Befehle in anderen Beiträgen:
Wie drehe ich ein Video mit FFmpeg um 180 ° (vertikal / verkehrt herum)? oder Videos mit FFmpeg drehen
Zusammenfassung: ffmpeg -vfilters "rotate = 90" -i input.mp4 output.mp4
quelle