ffplay로 GPU카드의 HEVC 디코딩 지원 기능 확인하기
H.265 영상스트림을 HEVC_CUVID를 이용하여 디코딩 테스팅 진행을 위한 내용을 정리한다.
시험 노트북의 nVidia GTX 950M 모델에서 HEVC_CUVID를 이용해서 GPU 디코딩이 가능한지 테스트 해 본다.
ffplay 빌드
ffplay로 HEVC_CUVID 디코딩을 위해서는 “–enable-cuvid” 옵션을 주고 컴파일을 하거나 컴파일된 바이너리를 다운로드 해야 한다.
※ Windows용 빌드는 FFMPEG Windows Builds에서 다운로드 할 수 있다.
ffplay 재생
ffplay에서 “-vcodec hevc_cuvid” 옵션을 주고 HEVC 영상을 재생해보니 아래와 같이 “Codec hevc_cuvid is not supported.” 메세지와 함께 재생이 실패한다.
※ 아래 시험영상은 Jellyfish Video Bitrate Test Files에서 코덱, 비트레이트별 영상을 확인할 수 있다.
> ffplay -vcodec hevc_cuvid http://www.jell.yfish.us/media/jellyfish-3-mbps-hd-hevc.mkv
. . .
[hevc_cuvid @ 000001a3ca5af800] Codec hevc_cuvid is not supported.
[rtsp @ 000001a3ca51cbc0] RTP: PT=21: bad cseq 0197 expected=cbae
[rtsp @ 000001a3ca51cbc0] RTP: PT=21: bad cseq 00ef expected=bf8b
349.57 M-A: 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
“-vcodec h264_cuvid” 옵션으로 H264영상은 정상 재생된다.
PS D:\App\ffmpeg\ffmpeg-4.3.1-2020-10-01-full_build> ffplay -vcodec h264_cuvid http://www.jell.yfish.us/media/jellyfish-3-mbps-hd-h264.mkv
ffplay version 4.3.1-2020-10-01-full_build-www.gyan.dev Copyright (c) 2003-2020 the FFmpeg developers
. . .
Input #0, matroska,webm, from 'http://www.jell.yfish.us/media/jellyfish-3-mbps-hd-h264.mkv':
Metadata:
encoder : libebml v1.2.0 + libmatroska v1.1.0
creation_time : 2016-02-06T03:58:03.000000Z
Duration: 00:00:30.03, start: 0.000000, bitrate: 2984 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 1k tbn, 59.94 tbc (default)
nan M-V: nan fd= 1 aq= 0KB vq= 416KB sq= 0B f=0/0
GTX 950M 모델 확인
nVidia SPEC 페이지의 Display Support 내용을 보면 H.265 관련 언급이 없다.
Display Support:
YesVGA Analog display support3 Yes
DisplayPort Multimode support3 Yes
HDMI Support Yes l
H.264, VC1, MPEG2 1080p video decoder Yes
TECPPOWERUP를 보면 노트북용 GTX 950M의 그래픽 프로세서는 “GM107”이고 nVidia GPU 카드 디코딩 지원 목록 에서 NVDEC Support Matrix를 보면 GM107 CHIP은 H.265을 지원 하지 않는다.
ffmpeg 빌드 정보 확인
ffmpeg 빌드 버전에서 하드웨어 가속 및 디코딩 지원 여부를 확인하고 원하는 코덱이 없으면 포함된 빌드를 구하거나 재 컴파일 해야 한다.
하드웨어 가속 가능한 목록 찾기
PS D:\App\ffmpeg\ffmpeg-4.3.1-2020-10-01-full_build> .\bin\ffmpeg.exe -hwaccels
ffmpeg version 4.3.1-2020-10-01-full_build-www.gyan.dev Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10.2.0 (Rev3, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-libsnappy --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libzvbi --enable-librav1e --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Hardware acceleration methods:
cuda
dxva2
qsv
d3d11va
ffmpeg 빌드에서 시험하고자 하는 디코더가 포함되어 컴파일이 되었는지 아래의 명령으로 확인할 수 있다.
PS D:\App\ffmpeg\ffmpeg-4.3.1-2020-10-01-full_build> .\bin\ffmpeg.exe -decoders | Select-String cuvid
ffmpeg version 4.3.1-2020-10-01-full_build-www.gyan.dev Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10.2.0 (Rev3, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-libsnappy --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libzvbi --enable-librav1e --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264)
V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc)
V..... mjpeg_cuvid Nvidia CUVID MJPEG decoder (codec mjpeg)
V..... mpeg1_cuvid Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
V..... mpeg2_cuvid Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
V..... mpeg4_cuvid Nvidia CUVID MPEG4 decoder (codec mpeg4)
V..... vc1_cuvid Nvidia CUVID VC1 decoder (codec vc1)
V..... vp8_cuvid Nvidia CUVID VP8 decoder (codec vp8)
V..... vp9_cuvid Nvidia CUVID VP9 decoder (codec vp9)