556 Stimmen

Drehen von Videos mit FFmpeg

Ich habe versucht, herauszufinden, wie man Videos mit FFmpeg drehen kann. Ich arbeite mit iPhone-Videos, die im Hochformat aufgenommen wurden. Ich weiß, wie ich die aktuellen Drehgrade mit MediaInfo (ausgezeichnete Bibliothek, btw), aber ich hänge jetzt bei FFmpeg fest.

Nach dem, was ich gelesen habe, müssen Sie eine vfilter Option. Nach dem, was ich sehe, sollte es wie folgt aussehen:

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

Ich kann das aber nicht zum Laufen bringen. Erstens, -vFilter gibt es nicht mehr, es ist jetzt nur noch -vf . Zweitens: Ich erhalte diese Fehlermeldung:

No such filter: 'rotate'
Error opening filters!

Soweit ich weiß, habe ich eine aktivierte Version von FFmpeg mit allen Optionen. Läuft ffmpeg -filter zeigt dies:

Filters:
anull            Pass the source unchanged to the output.
aspect           Set the frame aspect ratio.
crop             Crop the input video to x:y:width:height.
fifo             Buffer input images and send them when they are requested.
format           Convert the input video to one of the specified pixel formats.
hflip            Horizontally flip the input video.
noformat         Force libavfilter not to use any of the specified pixel formats
 for the input to the next filter.
null             Pass the source unchanged to the output.
pad              Pad input image to width:height[:x:y[:color]] (default x and y:
 0, default color: black).
pixdesctest      Test pixel format definitions.
pixelaspect      Set the pixel aspect ratio.
scale            Scale the input video to width:height size and/or convert the i
mage format.
slicify          Pass the images of input video on to next video filter as multi
ple slices.
unsharp          Sharpen or blur the input video.
vflip            Flip the input video vertically.
buffer           Buffer video frames, and make them accessible to the filterchai
n.
color            Provide an uniformly colored input, syntax is: [color[:size[:ra
te]]]
nullsrc          Null video source, never return images.
nullsink         Do absolutely nothing with the input video.

Mit den Optionen für vflip y hflip sind großartig und alles, aber sie bringen mich nicht ans Ziel. Ich brauche die Möglichkeit, Videos mindestens um 90 Grad zu drehen. 270 Grad wäre auch eine hervorragende Option. Wo sind die Optionen zum Drehen geblieben?

921voto

Alexy Punkte 8580

Um 90 im Uhrzeigersinn drehen:

ffmpeg -i in.mov -vf "transpose=1" out.mov

Als Parameter für die Transposition können Sie übergeben:

0 = 90CounterCLockwise and Vertical Flip (default)
1 = 90Clockwise
2 = 90CounterClockwise
3 = 90Clockwise and Vertical Flip

Utilisez -vf "transpose=2,transpose=2" für 180 Grad.

Stellen Sie sicher, dass Sie eine aktuelle ffmpeg-Version verwenden von hier (ein statischer Build funktioniert problemlos).

Beachten Sie, dass dabei die Audio- und Videoteile neu kodiert werden. . Normalerweise können Sie den Ton kopieren, ohne ihn zu berühren, indem Sie -c:a copy . Um die Videoqualität zu ändern, stellen Sie die Bitrate ein (z. B. mit -b:v 1M ) oder werfen Sie einen Blick auf die H.264-Kodierungsanleitung wenn Sie VBR-Optionen wünschen.

Eine Lösung ist auch die Verwendung dieser Komfort-Skript .

238voto

Rodrigo Polo Punkte 3807

Wenn du dein Video nicht neu kodieren willst UND dein Player mit Rotationsmetadaten umgehen kann, kannst du die Rotation einfach in den Metadaten mit ffmpeg ändern:

ffmpeg -i input.m4v -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.m4v

101voto

rwilliams Punkte 20690

Haben Sie versucht transpose noch nicht? Wie (aus der anderen Antwort)

 ffmpeg -i input -vf transpose=2 output

Wenn Sie eine ältere Version verwenden, müssen Sie ffmpeg aktualisieren, wenn Sie die im Oktober 2011 hinzugefügte Transponierungsfunktion nutzen möchten.

Das FFmpeg herunterladen Seite bietet statische Builds, die Sie direkt ausführen können, ohne sie kompilieren zu müssen.

27voto

Bijou Trouvaille Punkte 7666

Um das Bild im Uhrzeigersinn zu drehen, können Sie den Filter "Drehen" verwenden, der einen positiven Winkel im Bogenmaß angibt. Da 90 Grad gleich PI/2 ist, können Sie dies so tun:

ffmpeg -i in.mp4 -vf "rotate=PI/2" out.mp4

für den Gegenuhrzeigersinn muss der Winkel negativ sein

ffmpeg -i in.mp4 -vf "rotate=-PI/2" out.mp4

Der Transponierungsfilter funktioniert bei 90 Grad ebenso gut, aber bei anderen Winkeln ist dies die schnellere oder einzige Wahl.

20voto

Zonjai Punkte 191

Auf der Suche nach der gleichen Antwort bin ich auf diese Seite gestoßen. Es ist jetzt sechs Monate her, dass diese Frage gestellt wurde, und die Builds wurden seither mehrmals aktualisiert. Ich wollte jedoch eine Antwort für alle anderen hinzufügen, die auf der Suche nach diesen Informationen hierher kommen.

Ich verwende Debian Squeeze und FFmpeg Version aus diesen Repositories.

Die MAN-Seite für ffmpeg gibt die folgende Verwendung an

ffmpeg -i inputfile.mpg -vf "transpose=1" outputfile.mpg

Entscheidend ist, dass Sie keine Gradvariable verwenden, sondern eine vordefinierte Einstellungsvariable von der MAN-Seite.

0=90CounterCLockwise and Vertical Flip  (default) 
1=90Clockwise 
2=90CounterClockwise 
3=90Clockwise and Vertical Flip

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X