FFmpeg+NVENC-Kodierung: seltsames Seitenverhältnis

FFmpeg+NVENC-Kodierung: seltsames Seitenverhältnis

Mein Quellvideo ist MPEG-2, 720x576, DAR=16:9. Mit FFmpeg und dem h264_nvenc-Encoder konvertiere ich es in H.264. Das Problem: Das Ausgabe-AR ist seltsam/falsch/inkonsistent. Befehlszeile:

>ffmpeg -i "d:\in.mpg" -aspect 16:9 -c:v h264_nvenc -c:a copy -t 15 "d:\out.mp4"
ffmpeg version N-83280-gcba4f0e Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.4.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
  libavutil      55. 45.100 / 55. 45.100
  libavcodec     57. 75.100 / 57. 75.100
  libavformat    57. 65.100 / 57. 65.100
  libavdevice    57.  2.100 / 57.  2.100
  libavfilter     6. 71.100 /  6. 71.100
  libswscale      4.  3.101 /  4.  3.101
  libswresample   2.  4.100 /  2.  4.100
  libpostproc    54.  2.100 / 54.  2.100
[mpeg @ 000000000223ab20] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpeg, from 'd:\in.mpg':
  Duration: 02:59:33.92, start: 0.500000, bitrate: 3401 kb/s
    Stream #0:0[0x1bf]: Data: dvd_nav_packet
    Stream #0:1[0x1c0]: Audio: mp2, 48000 Hz, stereo, s16p, 192 kb/s
    Stream #0:2[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, top first), 720x576 [SAR 64:45 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
File 'd:\out.mp4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'd:\out.mp4':
  Metadata:
    encoder         : Lavf57.65.100
    Stream #0:0: Video: h264 (h264_nvenc) (Main) ([33][0][0][0] / 0x0021), yuv420p, 720x576 [SAR 64:45 DAR 16:9], q=-1--1, 2000 kb/s, 25 fps, 12800 tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.75.100 h264_nvenc
    Side data:
      cpb: bitrate max/min/avg: 0/0/2000000 buffer size: 4000000 vbv_delay: -1
    Stream #0:1: Audio: mp2 (i[0][0][0] / 0x0069), 48000 Hz, stereo, s16p, 192 kb/s
Stream mapping:
  Stream #0:2 -> #0:0 (mpeg2video (native) -> h264 (h264_nvenc))
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  375 fps=0.0 q=22.0 Lsize=    4122kB time=00:00:14.97 bitrate=2254.9kbits/s dup=19 drop=0 speed=28.9x
video:3762kB audio:352kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.208697%

Beim Ausgabevideostream steht dort „[SAR 64:45 DAR 16:9]“, wenn ich jedoch die resultierende Datei out.mp4 analysiere, steht dort:

Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 720x576 [SAR 16:11 DAR 20:11], 2054 kb/s, SAR 64:45 DAR 16:9, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)

Die Werte nach den eckigen Klammern sind korrekt, aber innerhalb der Klammern verstehe ich nicht, warum diese DAR/SAR-Werte verwendet werden. Je nachdem, welche Werte später vom Player verwendet werden (Container- oder Stream-AR), kann das Ergebnis falsch sein. Dabei spielt es keine Rolle, ob "-aspect 16:9" verwendet wird oder nicht.

Wenn ich libx264 statt h264_nvenc verwende, ist die Ausgabe-AR korrekt, daher denke ich, dass es sich um ein Encoder-Problem handelt. Ich habe den neuesten Build verwendet, aber vorher habe ich die offiziellen Versionen 3.2 und 3.2.2 verwendet.

Ich bin überrascht, dass ich das gleiche Problem bisher nirgendwo gemeldet habe. Bevor ich es als Fehler melde, möchte ich Sie um Ihre Meinung bitten, ob ich etwas falsch mache. Danke.

Antwort1

Wenn ich die Frage richtig verstehe, versuchen Sie, das Bild zu skalieren, und das Ergebnis ist anders als von Ihnen angegeben.

Ich habe diese Lösung irgendwo gepostet gefunden (weiß nicht mehr wo), die für mich funktioniert.

-vf "Maßstab=854:480:Flags=lanczos,setsar=1/1"

Dadurch wird die Skalierungsmethode festgelegt und der Sar/Dar-„Kram“ zurückgesetzt.

verwandte Informationen