Ich habe versucht herauszufinden, wie man Videos mit FFmpeg dreht. Ich arbeite mit iPhone-Videos, die im Hochformat aufgenommen wurden. Ich weiß, wie man die aktuellen Rotationsgrade mit MediaInfo (ausgezeichnete Bibliothek, übrigens) bestimmt, aber ich stecke jetzt bei FFmpeg fest.
Nach dem , was ich gelesen habe, müssen Sie eine vfilter- Option verwenden. Nach dem, was ich sehe, sollte es so aussehen:
ffmpeg -vfilters "rotate=90" -i input.mp4 output.mp4
Ich kann dies jedoch nicht zum Laufen bringen. Erstens existiert -vfilters nicht mehr, es ist jetzt nur -vf . Zweitens erhalte ich diesen Fehler:
No such filter: 'rotate'
Error opening filters!
Soweit ich weiß, habe ich einen All-Options-On-Build von FFmpeg. Das Ausführen von ffmpeg -filtern zeigt Folgendes :
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.
Die Optionen für vflip und hflip sind großartig, aber sie bringen mich einfach nicht dahin, wo ich hin muss. Ich muss in der Lage sein, Videos mindestens um 90 Grad zu drehen. 270 Grad wären auch eine ausgezeichnete Option. Wo sind die Drehoptionen geblieben?
quelle
-vf "vflip,hflip"
-vf "vflip,hflip"
funktioniert wie ein Zauber.Antworten:
90 im Uhrzeigersinn drehen:
Für den Transponierungsparameter können Sie Folgendes übergeben:
Verwenden Sie
-vf "transpose=2,transpose=2"
für 180 Grad.Stellen Sie sicher, dass Sie von hier aus eine aktuelle ffmpeg-Version verwenden (ein statischer Build funktioniert einwandfrei).
Beachten Sie, dass dadurch die Audio- und Videoteile neu codiert werden. Normalerweise können Sie das Audio kopieren, ohne es zu berühren
-c:a copy
. Um die Videoqualität zu ändern, stellen Sie die Bitrate ein (z. B. mit-b:v 1M
) oder lesen Sie die H.264-Codierungsanleitung, wenn Sie VBR-Optionen wünschen.Eine Lösung besteht auch darin, dieses praktische Skript zu verwenden .
quelle
-vcodec libx264
. Aber es wäre großartig, wenn ich nicht nachschlagen müsste, welche Codierung als ffmpeg verwendet werden soll. Irgendwelche Vorschläge?-vf "transpose=2,transpose=2"
cclock_flip
,clock
,cclock
oderclock_flip
statt0
,1
,2
oder3
.Wenn Sie Ihr Video nicht neu codieren möchten UND Ihr Player Rotationsmetadaten verarbeiten kann, können Sie die Rotation in den Metadaten einfach mit ffmpeg ändern:
quelle
ffmpeg -i input.m4v 2>&1 | grep rotate
ffmpeg -i input.m4v -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.m4v
. Auf diese Weise werden alle globalen Metadaten in der Eingabedatei als globale Metadaten in die Ausgabedatei kopiert und nur die Rotations-Metadaten werden geändert.rotate=0
.-metadata:s:v rotate="180"
, hat nicht funktioniert. Soll das funktionieren?ffmpeg -i input.mp4 -codec copy -map_metadata 0 -metadata:s:v:0 rotate=0 output.mp4
Hast du es schon versucht
transpose
? Wie (aus der anderen Antwort)Wenn Sie eine alte Version verwenden, müssen Sie ffmpeg aktualisieren, wenn Sie die Transponierungsfunktion verwenden möchten, wie sie im Oktober 2011 hinzugefügt wurde.
Die FFmpeg- Download- Seite bietet statische Builds, die Sie direkt ausführen können, ohne sie kompilieren zu müssen.
quelle
Ich bin auf diese Seite gestoßen, als ich nach der gleichen Antwort gesucht habe. Es ist nun sechs Monate her, seit dies ursprünglich gefragt wurde und die Builds wurden seitdem viele Male aktualisiert. Ich wollte jedoch eine Antwort für alle anderen hinzufügen, die hier auf der Suche nach diesen Informationen sind.
Ich verwende Debian Squeeze und FFmpeg- Version aus diesen Repositories.
Die MAN-Seite für ffmpeg gibt die folgende Verwendung an
Der Schlüssel ist, dass Sie keine Gradvariable verwenden sollen, sondern eine vordefinierte Einstellungsvariable auf der MAN-Seite.
quelle
Um das Bild im Uhrzeigersinn zu drehen, können Sie den Drehfilter verwenden, der einen positiven Winkel im Bogenmaß anzeigt. Bei 90 Grad, die PI / 2 entsprechen, können Sie dies folgendermaßen tun:
für gegen den uhrzeigersinn muss der winkel negativ sein
Der Transponierungsfilter funktioniert für 90 Grad gleich gut, für andere Winkel ist dies jedoch eine schnellere oder einzige Wahl.
quelle
*
sich dies als Multiplikation verhält:ffmpeg -i in.avi -vf "rotate=-8*PI/40" -q 1 out.avi
(etwas weniger Rotation als -PI / 4 = -10 * PI / 40)wird nicht funktionieren, auch mit der neuesten Quelle ...
muss die Reihenfolge ändern:
funktioniert gut
quelle
rotate=PI/2
oderrotate=90*PI/180
wird benötigtWenn der Fehler "Codec ist experimentell, aber experimentelle Codecs sind nicht aktiviert" angezeigt wird, verwenden Sie Folgendes:
Ist mit mir für eine .mov-Datei mit AAC-Audio passiert.
quelle
-sameq
Option 'sameq' was removed. If you are looking for an option to preserve the quality (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option. Failed to set value '1' for option 'sameq': Invalid argument
qscale gibt auch einen Fehler.Please use -q:a or -q:v, -qscale is ambiguous
, funktioniert aber immer noch.Dieses Skript gibt die Dateien mit der Verzeichnisstruktur unter "fixedFiles" aus. Im Moment ist auf MOV-Dateien festgelegt und führt abhängig von der ursprünglichen "Drehung" des Videos eine Reihe von Transformationen durch. Funktioniert mit iOS aufgenommenen Videos auf einem Mac mit Mavericks, sollte aber leicht exportierbar sein. Verlässt sich darauf, dass sowohl exiftool als auch ffmpeg installiert wurden .
quelle
[Parsed_pad_2 @ 0x7f8b15c3a580] Input area -420:0:1500:1080 not within the padded area 0:0:1080:1080 or zero-sized
\ n `[Parsed_pad_2 @ 0x7f8b15c3a580] Failed to configure input pad on Parsed_pad_2
\ nError reinitializing filters!
\ nFailed to inject frame into filter network: Invalid argument
\ nError while processing the decoded data for stream #0:0
\ nConversion failed!
Alexys Antwort funktionierte fast für mich, außer dass ich diesen Fehler bekam:
Ich musste nur einen Parameter (-r 65535/2733) zum Befehl hinzufügen und es funktionierte. Der volle Befehl war also:
quelle
24000/1001
dies genauer.Eine zusätzliche Lösung mit einem anderen Ansatz als die zuletzt genannten Lösungen besteht darin, zu überprüfen, ob Ihr Kameratreiber die v4l2-Kamerasteuerung unterstützt (was sehr häufig vorkommt).
Geben Sie im Terminal einfach Folgendes ein:
Wenn Ihr Kameratreiber die v4l2-Kamerasteuerung unterstützt, sollten Sie Folgendes erhalten (die folgende Liste hängt von den von Ihrem Kameratreiber unterstützten Steuerelementen ab):
Und wenn Sie Glück haben, unterstützt es horizontal_flip und vertikale_flip .
Dann müssen Sie nur noch den horizontalen_Flip setzen durch:
oder der vertikale_flip von:
Anschließend können Sie Ihr Videogerät anrufen, um ein neues Video aufzunehmen (siehe Beispiel unten), und das Video wird gedreht / gespiegelt.
Wenn Sie ein bereits vorhandenes Video verarbeiten müssen, ist diese Methode natürlich nicht die Lösung, nach der Sie suchen.
Der Vorteil dieses Ansatzes besteht darin, dass wir das Bild in der Sensorebene umdrehen, sodass der Sensor des Treibers uns bereits das umgedrehte Bild liefert, und dies spart der Anwendung (wie FFmpeg) jede weitere und unnötige Verarbeitung.
quelle
Leider unterstützt die Ubuntu-Version von ffmpeg Videofilter.
Sie müssen Avidemux oder einen anderen Editor verwenden, um den gleichen Effekt zu erzielen.
Auf programmatische Weise wurde ein Mencoder empfohlen.
quelle
Smartphone: Video im Vertikalformat aufgenommen
Möchten Sie es an eine Webseite senden, war es 90 ° nach links (gegen den Uhrzeigersinn, Querformat) hmm.
ffmpeg -i input.mp4 -vf "rotate=0" output.mp4
macht es. Ich habe wieder vertikales Format
debian buster: ffmpeg --version ffmpeg version 4.1.4-1 ~ deb10u1 Copyright (c) 2000-2019 die FFmpeg-Entwickler
quelle