Wie dreht man ein Video, um es auf einem Fernseher abspielen zu können?

Wie dreht man ein Video, um es auf einem Fernseher abspielen zu können?

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 avprobevon rotated.mp4ist

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 avprobeAusgabe 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. ffmpegDies geschieht automatisch, Sie müssen also nichts Besonderes tun.

  • Wenn es immer noch nicht funktioniert, fügen Sie -profile:v baselinefür mehr Kompatibilität hinzu. Ich empfehle auch, es zu versuchen -profile:v mainund 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 copywurde 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 aacanstelle 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 derTag 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, avconvda ich es nicht verwende und nicht damit vertraut bin. Stellen Sie sicher, dass Sie eine aktuelle Version von verwenden ffmpeg. Für Linux können Sie eine aktuelle Version ffmpegunter 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.

verwandte Informationen