Der FFmpeg-Skalierungs-Videofilter funktioniert nicht wie erwartet

Ich bin etwas verwirrt. scaleDer Videofilter skaliert das Video nicht auf die angegebenen Abmessungen, sondern macht etwas anderes.

Zum Beispiel:

$ youtube-dl -f 134 https://youtu.be/aqz-KE-bpKQ -o 1.mp4 # Datei herunterladen 640x360 360p 723k , avc1.4d401e, 30fps, nur Video, 24,87 MiB
$ ffmpeg -i 1.mp4 -vf scale=2000:100 2.mp4
$ ffplay 1.mp4 & ffplay 2.mp4 &

Ich warte darauf, dass das zweite Video in der Höhe so breit und schmal verformt wird, aber:

Geben Sie hier die Bildbeschreibung ein

Hier ist die Ausgabe ffprobefür beide Dateien:

$ ffprobe 1.mp4
Eingabe #0, mov,mp4,m4a,3gp,3g2,mj2, von '1.mp4':
  Metadaten:
    major_brand : Bindestrich
    Nebenversion: 0
    kompatible_Marken: iso6avc1mp41
    Erstellungszeit: 2018-12-12T10:08:34.000000Z
  Dauer: 00:10:34.57, Start: 0.000000, Bitrate: 328 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressiv), 640x360 [SAR 1:1 DAR 16:9], 0 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (Standard)
    Metadaten:
      Erstellungszeit: 2018-12-12T10:08:34.000000Z
      handler_name : ISO-Mediendatei, erstellt von Google Inc. Erstellt am: 12.12.2018.
$ ffprobe 2.mp4
Eingabe #0, mov,mp4,m4a,3gp,3g2,mj2, von '2.mp4':
  Metadaten:
    Hauptmarke: isom
    Unterversion: 512
    kompatible_Marken: isomiso2avc1mp41
    Encoder: Lavf57.83.100
  Dauer: 00:10:34.57, Start: 0.000000, Bitrate: 443 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 2000x100 [SAR 4:45 DAR 16:9], 440 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 noch offen (Standard)
    Metadaten:
      handler_name : VideoHandler

Also habe ich etwas übersehen oder der Videofilter funktioniert falsch? Wie kann man das beheben?

PS:

$ ffmpeg-Version
ffmpeg-Version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 die FFmpeg-Entwickler
gebaut mit gcc 7 (Ubuntu 7.3.0-16ubuntu3)
Konfiguration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample - -enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig - -enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse - -enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis - -enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx--enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55.78.100 / 55.78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57.83.100 / 57.83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4.8.100 / 4.8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54.7.100 / 54.7.100

Antworten (1)

Der Skalierungsfilter passt das Seitenverhältnis des Beispiels an, um das ursprüngliche Seitenverhältnis der Anzeige beizubehalten, das für Ihre Eingabe 16:9 beträgt. Verwenden Sie den SAR-Filter, um die SAR nach der Skalierung zurückzusetzen.

ffmpeg -i 1.mp4 -vf scale=2000:100,setsar=1 2.mp4
@Abelisto, möglicherweise sehen Sie diese Antwort auch für eine detaillierte Beschreibung von SAR, PAR und DAR.