ubuntuusers.de

Video bei der Ansicht drehen, aber nicht das Video selbst

Status: Ungelöst | Ubuntu-Version: Xubuntu 20.04 (Focal Fossa)
Antworten |

glaskugel

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3736

Es wurden mit OpenCamera am Handy mehrere Videos gemacht. ein paar davon werden ohne an den Einstellungen was geändert zu haben gedreht angezeigt. Also mysteriös. Es wurde also nicht im Portraitmodus hochkant gefilmt, sondern schon quer, aber beim Ansehen wird das um 90° gedreht, wird dann aber voll ohne schwarze Balken angezeigt.

Man könnte das natürlich mit Handbrake neu rechnen lassen. Bei crf30 wird die Datei um ein Vielfaches größer. Das Original hat ca. 2Mbit/s bei 1080p-

Bei Fotos kann man bei den Exifdaten einen Eintrag machen, wie das Foto richtig dargestellt wird. Gibt es sowas auch für Vidoes? Wenn ja, wie kann man das eintragen? Eigentlich ist alles ok, nur man kann das Video nicht vernünftig ansehen, weder am Handy noch am PC.

Bei Fotos sieht das so aus:

[EXIF]          0x0112 Orientation                     : Horizontal (normal)
[MakerNotes]    0x0000 Level Orientation               : Horizontal (normal)
[MakerNotes]    0x0000 Level Orientation               : Horizontal (normal)
[IPTC]          0x0083 Image Orientation               : Landscape

Kätzchen

Avatar von Kätzchen

Anmeldungsdatum:
1. Mai 2011

Beiträge: 7088

Wohnort: Technische Republik

Wie die Metadaten des Videos ohne neu Codierung geändert werden können steht hier: –> https://ostechnix.com/how-to-rotate-videos-using-ffmpeg-from-commandline/

Edit: Ich habe vorhin ein Video "gedreht" und mpv hat das dann gedreht abgespielt.

Steev1

Anmeldungsdatum:
6. Mai 2022

Beiträge: 61

Hm, bin ja so ein geheimer Multimedia Nerd, aber Videos drehen im Player? Könnte der mpv schaffen ja, vlc in jedem Fall oder nicht?

Wenn nicht, musst du wohl neu-encodieren, ich nutze dafür Avidemux (AppImage). Dort in den Filtern gibt es das "Drehen". Je nach Ausgangs-Codec dann auch in gleiches wieder codieren.

Und dafür was hinterlassen in Meta-Daten, hm, denke nicht.

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3736

https://ostechnix.com/how-to-rotate-videos-using-ffmpeg-from-commandline/ some videos are shot in portrait mode and some are shot in landscape mode

Genau das meine ich aber nicht, die sind alle im "landscape mode" aufgenommen.

Ich habe die Beispiele bis zu dem gleich angeführten Beispiel alle durchgemacht, das Bild ist danach beim Abspielen mit vlc immer schwarz. Das Vorschaubild ist beim Original korrekt, beim erstellten Video dann auch.

$ ffmpeg -i original.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2022-06-22T12:28:26.000000Z
    com.android.version: 11
    com.android.manufacturer: Xiaomi
    com.android.model: Redmi Note 9S
  Duration: 00:00:25.98, start: 0.000000, bitrate: 2247 kb/s
    Stream #0:0(eng): Video: hevc (Main) (hvc1 / 0x31637668), yuvj420p(pc, bt470bg/bt470bg/smpte170m), 1920x1080, 2029 kb/s, SAR 1:1 DAR 16:9, 30.18 fps, 30 tbr, 90k tbn, 90k tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2022-06-22T12:28:26.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2022-06-22T12:28:26.000000Z
      handler_name    : SoundHandle
Output #0, mp4, to 'output.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    com.android.model: Redmi Note 9S
    com.android.version: 11
    com.android.manufacturer: Xiaomi
    encoder         : Lavf58.29.100
    Stream #0:0(eng): Video: hevc (Main) (hvc1 / 0x31637668), yuvj420p(pc, bt470bg/bt470bg/smpte170m), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 2029 kb/s, 30.18 fps, 30 tbr, 90k tbn, 90k tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2022-06-22T12:28:26.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of 90.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2022-06-22T12:28:26.000000Z
      handler_name    : SoundHandle
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  783 fps=0.0 q=-1.0 Lsize=    6756kB time=00:00:25.94 bitrate=2133.4kbits/s speed=4.35e+03x    
video:6427kB audio:304kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.361089%

Videos drehen im Player

Weil das nicht jeder Player kann, kann das nicht die Lösung sein.

BTW, beim Handy hängt die Drehung mit dervorgegebenen Framerate zusammen, bei fps 24 passt es bis jetzt immer, wenn ich auf 30 stelle, dann kann ich das Problem provozieren. Ich teste jetzt allerdings mit einer anderen App.

Kätzchen

Avatar von Kätzchen

Anmeldungsdatum:
1. Mai 2011

Beiträge: 7088

Wohnort: Technische Republik

glaskugel schrieb:

Weil das nicht jeder Player kann, kann das nicht die Lösung sein.

Damit jeder Player das Video korrekt abspielt - ohne vorher im Player etwas einstellen zu müssen - hilft neu codieren.

hakel2022

Anmeldungsdatum:
21. Februar 2022

Beiträge: 3176

Wechsel' doch mal testweise den Container beim Output auf mkv - keine Neucodierung!

Es ist immer gut, wenn man solche Dinge mit aktuellen Versionen macht von wegen 20.04. ☹

hilft neu codieren.

Das will man natürlich vermeiden, aber vermutlich der letzte Weg, wenn man Clips weiter geben will.

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3736

Einerseits geschafft, aber doch keine zufriedenstellende Lösung, weil das Ergebnis universell brauchbar sein sollte.

Unter 22.04:

$ ffmpeg -i original.mp4 -c copy -metadata:s:v:0 rotate=90 output.mkv
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2022-06-22T12:28:26.000000Z
    com.android.version: 11
    com.android.manufacturer: Xiaomi
    com.android.model: Redmi Note 9S
  Duration: 00:00:25.98, start: 0.000000, bitrate: 2247 kb/s
  Stream #0:0(eng): Video: hevc (Main) (hvc1 / 0x31637668), yuvj420p(pc, bt470bg/bt470bg/smpte170m), 1920x1080, 2029 kb/s, SAR 1:1 DAR 16:9, 30.18 fps, 30 tbr, 90k tbn, 90k tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2022-06-22T12:28:26.000000Z
      handler_name    : VideoHandle
      vendor_id       : [0][0][0][0]
    Side data:
      displaymatrix: rotation of -90.00 degrees
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2022-06-22T12:28:26.000000Z
      handler_name    : SoundHandle
      vendor_id       : [0][0][0][0]
Output #0, matroska, to 'output.mkv':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    com.android.model: Redmi Note 9S
    com.android.version: 11
    com.android.manufacturer: Xiaomi
    encoder         : Lavf58.76.100
  Stream #0:0(eng): Video: hevc (Main) (hvc1 / 0x31637668), yuvj420p(pc, bt470bg/bt470bg/smpte170m), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 2029 kb/s, 30.18 fps, 30 tbr, 1k tbn, 90k tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2022-06-22T12:28:26.000000Z
      handler_name    : VideoHandle
      vendor_id       : [0][0][0][0]
    Side data:
      displaymatrix: rotation of 90.00 degrees
  Stream #0:1(eng): Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2022-06-22T12:28:26.000000Z
      handler_name    : SoundHandle
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  783 fps=0.0 q=-1.0 Lsize=    6748kB time=00:00:25.94 bitrate=2130.7kbits/s speed= 802x    
video:6427kB audio:304kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.235025%

Interessant ist, dass unter 22.04 die Original-Dateivorschau nicht wie bei 20.04 landscape, sondern portrait ist. Eine nach mp4 gerechnete Datei bleibt unter 22.04 auch schwarz, aber mit mkv passt es. Kopiere ich diese mkv-Datei zum 20.04-PC dann bleibt das Bild mit vlc wieder schwarz. Das ist alles nicht zuverlässig um das Video an Leute weiterzugeben, die sich am PC nur minimalistisch auskennen.

hakel2022

Anmeldungsdatum:
21. Februar 2022

Beiträge: 3176

Im Grunde sind das "alte Hüte". Handys sind ja bekannt dafür, nicht normgerechtes Material zu produzieren. Mit den proprietären Tools der jeweiligen Hersteller, hat man keine Probleme.

Was natürlich sinnfrei ist.

Durch mkv werden zwar die header bereinigt, aber die "mürben" Einstellungen des Video Streams kann man nur durch Umkodieren korrigieren.

Der VLC nutzt seit einiger Zeit verstärkt GPU und schluckt daher auch nicht mehr wie früher jeden Schrott 🐸 . Da ist mpv inzwischen fast schon überlegen. Das sind aber rein subjektive Erfahrungswerte von mir.

Du könntest mal -zum Spaß- von mkv zurück auf mp4 gehen, natürlich ohne rotate und meta. Dann wird es natürlich "albern" ... 🙄

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3736

Handys sind ja bekannt dafür, nicht normgerechtes Material zu produzieren.

Mag sein, das Problem mit dem schwarzen Bild entsteht aber erst mit ffmepg. Davor kann ich das Video gedreht ansehen.

Opencamera als Opensource schätze ich eher so ein, dass die alles korrekt machen. Kennst du eine andere App für Android, die verlässlich Videos aufzeichnet. Filmic Pro - https://www.filmicpro.com/ unter Android scheint noch nicht das Niveau von IOS erreicht zu haben, sonst aber durchaus eine professionelle App ohne Motivprogramm-Schnickschack. Da schafft man es mit erlaubten Einstellungen auch, dass die horizontale Aufnahme dann gedreht abgespielt wird. Vielleicht ist das ein Betriebssystem Problem. Jedenfalls verwende ich nur erlaubte Werte, die man mit Camera2 Info - https://play.google.com/store/apps/details?id=com.hvt.camera2test abfragen kann.

Zum reparieren habe ich bis jetzt immer mkvmerge verwendet. Mal schauen, ob ich es da irgendwie schaffe.

Antworten |