
Ich habe ein Video, das von einem Telefon stammt und das sich problemlos auf einem Thomson-Fernseher (über USB) abspielen lässt. Die Details des Videos sind die folgenden:
> avprobe 20170904_065655.mp4
avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20170904_065655.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2017-09-04 04:58:01
Duration: 00:01:05.34, start: 0.000000, bitrate: 17094 kb/s
Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, 17017 kb/s, 30 fps, 90k tbn (default)
Metadata:
creation_time : 2017-09-04 04:58:01
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2017-09-04 04:58:01
# avprobe output
Das Video wird um 90 gegen den Uhrzeigersinn gedreht. Daher, wie bereits erwähntHierversuche ich mit der folgenden Befehlszeile, das Video um 90 Grad im Uhrzeigersinn zu drehen:
ffmpeg -i 20170904_065655.mp4 -vf "transpose=1" test.mp4
was leider das Video dreht180Grad. Ist an diesem Befehl zum Drehen des Videos etwas falsch?
Ich konnte das Video zwar mit drehen avidemux
, aber die gespeicherte neue Videodatei ( rotated.mp4
) konnte auf dem Fernseher nicht abgespielt werden ('Videoformat nicht unterstützt'). Ich habe versucht, die Datei mit Befehlen wie in verschiedene Formate zu konvertieren.
avconv -i rotated.mp4 -c:v h264 -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -c:v mpeg1video -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -r 25 -vb 20M -crf 20 output.avi
avconv -i rotated.mp4 -vcodec libx264 -acodec aac -strict -2 -b:a 384k output.mp4
Aber NICHTS davon hat funktioniert. Was übersehe ich? Oder gibt es eine Möglichkeit, das Video auf der Befehlszeile zu drehen, ohne das eigentliche Format/die Kodierung zu ändern?
Das avprobe
von rotated.mp4
ist
avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, avi, from 'rotated.mp4':
Duration: 00:00:30.77, start: 0.000000, bitrate: 6728 kb/s
Stream #0.0: Video: h264 (High), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 30 fps, 30.02 tbn, 60.04 tbc
Stream #0.1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
Mit dem ffmpeg vonHier die avprobe
Ausgabe ist die folgende, nachdem ich die Methode von 'LordNeckbeard' auf angewendet habe rotated.mp4
:
avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.82.104
Duration: 00:00:30.86, start: 0.000000, bitrate: 10397 kb/s
Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 8860 kb/s, 30 fps, 15360 tbn, 60 tbc (default)
Stream #0.1(und): Audio: [1][0][0][0] / 0x0001, 48000 Hz, 2 channels (default)
Unsupported codec with id 0 for input stream 1
# avprobe output
und weder Audio noch Video werden jetzt unterstützt ...
Antwort1
ffmpeg -i input.mp4 -vf "scale=-2:1080,format=yuv420p" -c:a copy output.mp4
Da das Fernsehgerät die Seitendrehdaten scheinbar ignoriert, müssen Sie das Video zum Drehen neu kodieren.
ffmpeg
Dies geschieht automatisch, Sie müssen also nichts Besonderes tun.Wenn es immer noch nicht funktioniert, fügen Sie
-profile:v baseline
für mehr Kompatibilität hinzu. Ich empfehle auch, es zu versuchen-profile:v main
und wegzulassen-profile:v
. Wenn Sie damit durchkommen, vermeiden Sie-profile:v
, das Nächstbeste isthauptsächlicham wenigsten optimal istBasislinie, aber für die lokale TV-Wiedergabe spielt das keine große Rolle: Was funktioniert, ist am besten.DerSkalaDer Filter verkleinert das Video auf eine Höhe von 1080, andernfalls wird ein Video der Größe 1080 x 1920 nicht abgespielt.
Verwendung derFormatFilter stellt ein kompatibles Pixelformat sicher. Ihr Eingang ist bereits YUV 4:2:0 planar, aber dies ist nur eine Absicherung für andere Eingangstypen.
-c:a copy
wurde hinzugefügt, um das Audio zu streamen (neu zu muxen), um unnötige Neukodierung zu vermeiden. Für Eingänge, die anderes Audio als AAC enthalten, verwenden Sie-c:a aac
anstelle von-c:a copy
.Fernseher können wählerisch sein, daher sind möglicherweise weitere Experimente erforderlich. Um schnell ein kurzes 60-Sekunden-Segment zu testen, können Sie hinzufügen
-t 60
.Seit derffmpegTag verwendet wurde, ging ich davon aus, dass Sie es zulassen würden. Es ist eine akzeptable Alternative zu
avconv
. Nichts davon trifft möglicherweise auf zu,avconv
da ich es nicht verwende und nicht damit vertraut bin. Stellen Sie sicher, dass Sie eine aktuelle Version von verwendenffmpeg
. Für Linux können Sie eine aktuelle Versionffmpeg
unter herunterladen.https://www.johnvansickle.com/ffmpeg/
Antwort2
Es ist möglich, dass das gedrehte Video die Fähigkeiten Ihres Fernsehers übersteigt.
Durch die Drehung wurde die Auflösung von 1920x1080 auf 1080x1920 geändert.
Wenn Ihr Fernseher 1080p (Full HD) hat, unterstützt er 1.920 x 1.080, und wenn er nur 720p hat, dann 1.280 x 720.
In beiden Fällen ist die Videohöhe höher als das Maximum. Für ein solches Video benötigen Sie einen Fernseher mit 2K oder 4K.