FFmpeg+NVENC 인코딩: 이상한 종횡비

FFmpeg+NVENC 인코딩: 이상한 종횡비

내 소스 비디오는 MPEG-2, 720x576, DAR=16:9입니다. FFmpeg와 h264_nvenc 인코더를 사용하여 H.264로 변환합니다. 문제: 출력 AR이 이상하거나 잘못되었거나 일관성이 없습니다. 명령줄:

>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%

출력 비디오 스트림의 경우 "[SAR 64:45 DAR 16:9]"라고 표시되지만 결과 out.mp4를 분석하면 다음과 같이 표시됩니다.

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)

대괄호 뒤의 값은 정확하지만 대괄호 안에는 왜 이러한 DAR/SAR 값을 사용하는지 모르겠습니다. 나중에 플레이어가 어떤 값을 사용하는지(컨테이너 또는 스트림 AR)에 따라 결과가 잘못될 수 있습니다. "-aspect 16:9"를 사용하는지 여부는 중요하지 않습니다.

h264_nvenc 대신 libx264를 사용하면 AR 출력이 정확하므로 인코더 문제인 것 같습니다. 최신 빌드를 사용하고 있었지만 이전에는 공식 릴리스 3.2 및 3.2.2를 사용했습니다.

아직까지 같은 문제가 보고된 곳이 없다는 것에 놀랐습니다. 따라서 이것을 버그로 보고하기 전에 제가 뭔가 잘못하고 있는 것이 있는지 여러분의 의견을 묻고 싶습니다. 감사해요.

답변1

질문을 제대로 이해했다면 이미지 크기를 조정하려고 시도했는데 지정한 것과 다르게 나오는 것입니다.

나는 이 솔루션이 나에게 적합한 어딘가(어디인지 기억나지 않음)에 게시되어 있음을 발견했습니다.

-vf "규모=854:480:플래그=lanczos,setsar=1/1"

이것은 스케일링 방법을 설정하고 sar/dar '물건'을 재설정합니다.

관련 정보