it-swarm.com.de

Drehen Sie mp4-Videos ohne Neukodierung

Ich suche nach einer Möglichkeit, Videos zu drehen, die mit meinem Nexus 4 auf meinem Debian Wheezy-System aufgenommen wurden. Die Videos werden im Hochformat aufgenommen und ich möchte sie im Querformat drehen. Vorzugsweise wird die Drehung von der Befehlszeile gesteuert.

Ich habe in der Vergangenheit einige Fragen gefunden, die auf eine gute Lösung hindeuten, aber es scheint mir nicht zu gelingen, sie zum Laufen zu bringen.

Zunächst gab es folgende Frage: Videos mit FFmpeg drehen

Aber es zeigt an, dass ffmpeg veraltet ist und ich avconv verwenden sollte. Ich habe diese Frage gefunden, die den weiteren Weg beschreibt. https://askubuntu.com/questions/269429/how-can-i-rotate-video-by-180-degrees-with-avconv

Das hat mich dazu gebracht, 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 eine Fehlermeldung bei der Protokollierung der Ausgabe, in der "Mb Rate> level limit" angegeben ist.

Gibt es hier ein Problem mit der Neucodierung? Sollte ich die Videos von meinem Handy zuerst in eine andere, besser funktionierende Codierung umcodieren, bevor ich die Rotationen anwende? Oder fehlt mir noch ein wichtiger Punkt?

68
stedes

Wenn Sie nur die Metadaten so ändern möchten, dass Mediaplayer, die das Flag berücksichtigen, die Datei gedreht wiedergeben, versuchen Sie Folgendes:

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4

wie gefunden an anderer Stelle im Stackoverflow .

98
ruediger05

Rotation = 0 hat mein Problem behoben. Ich habe mit der Videoaufnahme im Hochformat begonnen, habe meinen Fehler erkannt und habe mein Telefon sofort auf Querformat umgestellt, um die Aufnahme fortzusetzen. Mein iPhone hatte das Video als Porträt für das gesamte Video markiert.

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4

Behoben.

46
Mangor

FFmpeg und ähnliche Programme ändern Sie die Metadaten auch mit dem -map_metadata Möglichkeit. exiftool kann die Rotationsmatrix und das Rotationsflag lesen, aber nicht schreiben.

Um eine verlustfreie Rotation (inkl. Metadaten) zu erzielen, konnte ich keine Lösung finden. Ich griff nach einem Hex-Editor (z. B. HxT ) und analysierte die gedrehten Videodateien.

Echte verlustfreie Drehung von MP4:

  • öffne mp4 mit hex editor und suche nach vide, um die metadaten der videospur zu finden
  • einige Zeilen darüber (für meine Dateien meistens 9, manchmal 12) sollten Sie trak...\tkhd
  • dazwischen sollte ein @ Zeichen (HEX 40)
  • in den beiden Zeilen davor wird die Rotationsmatrix gespeichert
  • keine Rotation:

    00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    40
    
  • 180 °:

    FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    40
    
  • 90 ° im Uhrzeigersinn:

    00 00 00 00 00 01 00 00 00 00 00 00 FF FF 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    40 
    
  • 90 ° im Uhrzeigersinn:

    00 00 00 00 FF FF 00 00 00 00 00 00 00 01 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    40
    

Ändern Sie die Datei nach Bedarf. Sie sollte in Playern gedreht werden, die das Rotationsflag unterstützen (die meisten aktuellen Player unterstützen 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 den rechten Kanal umschalten.

20
aXeL-HH

In Ihrer Frage haben Sie einige Dinge angesprochen:

  1. Es gibt fast keine Chance, dass Sie ohne Neukodierung drehen können. Auf die Ausnahme von dieser Regel (MJPEG-Codec) wurde bereits hingewiesen, aber es ist unwahrscheinlich, dass Sie sie verwenden, sodass sie den Rahmen dieser Frage sprengt. Ich werde erwähnen, dass der Grund für diese Fähigkeit ist, dass JPEG über Metadaten konvertiert werden kann. Wenn Sie also in der Lage sind, einen Container mit Metadatenrotation zu finden, können Sie rotieren, aber es gibt noch keinen Container (oder er ist weit genug verbreitet).
  2. Wenn es Stunden gedauert hat, das Video 3 Minuten lang zu drehen und neu zu codieren, kann das Problem an einer enormen Auflösung liegen. Und ich meine riesig! Können Sie bitte die Ausgabe des avprobe original.mp4 damit es festgestellt werden kann.
  3. Die Debatten zwischen Libav und FFmpeg sind sehr kontraproduktiv (das sieht man an der Menge an Fud, die hier bereits veröffentlicht wurde). Im Grunde war es eine Trennung des Projekts, bei der einige Entwickler in die eine oder andere Richtung gingen. Die Tatsache, dass es FFmpeg gelungen ist, den Namen beizubehalten, ist nur ein Zufall und es macht keinen Sinn, ein Projekt als Original und ein anderes als Gabel zu bezeichnen. Die Unterschiede zwischen den Projekten liegen hauptsächlich im Entwicklungsstil und in der Philosophie. Wenn Sie FFmpeg als mehr Open Source und Libav als mehr Freie Software bezeichnen würden, würden Sie sich nicht so irren. Rationale Leute hoffen, dass die Entwickler irgendwann zur Besinnung kommen und die Projekte vielleicht nicht zusammenführen, sondern in größerem Umfang zusammenarbeiten. Als Ubuntu ursprünglich herauskam, gab es in jedem Debian GNU/Linux-Chat riesige Nachrichten in der Richtung "Ubuntu ist NICHT Debian !!!!!!!", aber jetzt hat sich die Situation beruhigt und beide Seiten sind mit einer ziemlich zufrieden Ein weiterer.
3
v010dya

Diese Antwort ist lediglich eine Zusammenfassung der von LordNeckbeard abgegebenen Kommentare.

Drehen ohne zu kodieren

Drehen ohne Neucodierung ist nur möglich, wenn:

  • ihre Eingabe ist MJPEG
  • sie drehen sich bei der Wiedergabe

Drehen Sie mit der Codierung mit dem richtigen ffmpeg

Um die dazu erforderlichen Schritte richtig zu verstehen, sollten Sie zunächst diese Frage lesen oder zumindest überfliegen:

Was sind die Unterschiede und Gemeinsamkeiten zwischen ffmpeg, libav und avconv?

Zusammenfassung: avconv ist ein Fork von ffmpeg, der von Debian-Betreuern für avconv ausgewählt wurde. Sie müssen das richtige ffmpeg aus dem Quellcode kompilieren.

Der nächste Schritt wäre das Kompilieren des richtigen ffmpeg aus dem Quellcode, wie hier beschrieben:

Kompilierungsanleitung von ffmpeg für Debian

Der letzte Schritt ist die Verwendung der Befehle in anderen Beiträgen:

Wie kann ein Video mit FFmpeg um 180 ° gedreht werden? oder Drehen von Videos mit FFmpeg

Zusammenfassung: ffmpeg -vfilters "rotate = 90" -i input.mp4 output.mp4

1
stedes