7월초에 발표된 엔비디아의 비디오 코덱 SDK 10.0에서 새로 도입된 프리셋들 ― 내부적으로는 "프리셋 2.0"이라고 명명하는 것 같습니다만 ― 이 NVENC 설정을 상당히 간편하게 해주는 이점이 있군요.
P1(최대 퍼포먼스) ~ P7 (최대 퀄리티)까지의 이 7개 프리셋들은 x264나 x265의 프리셋들 ― ultrafast ~ placebo ― 의 역할을 그대로 가져온 느낌입니다. 문서에 의하면, 기존에 따로 설정해줘야 했던 고급 기능들(advanced features: B 프레임 수, B 프레임 레퍼런스 모드, lookahead 설정, AQ 설정, weighted prediction 설정 등등)을 거의 전혀 설정할 필요가 없다는군요(built-in).
엔비디아 측에서 발표한 프레젠테이션 자료에 의하면 아래와 같습니다.
그리고 RC(rate control) 쪽도 대폭 손을 보아서 이제는 퀀타이저(Constant QP), CBR, VBR 세 개 정도로만 정리되고 기존의 vbr_hq, cbr_hq, cbr_ld_hq 같은 종류는 추후 지원되지 않을 예정이라고 합니다 (현재는 하위호환성을 위해 유지 중). (잘 아시겠지만, 퀄리티 모드의 RC는 VBR의 변형입니다.)
RC 모드도 따로 명시적으로 옵션으로 사용할 일이 없는 게,
- -qp 옵션으로 퀀타이저를 설정하면 퀀타이저 모드(Constant QP)로
- -cq 옵션으로 퀄리티를 설정하면 퀄리티 모드(변형된 VBR)로
- -b:v 옵션으로 비트레이트를 설정하면 VBR 모드로
- -b:v 와 함께 -cbr 1 옵션을 추가해주면 CBR 모드로
작동되는 것을 확인했습니다.
결국 실제 적용될 때는 (HEVC의 경우)
-c:v hevc_nvenc -preset p7 -cq 32
이렇게 코덱, 프리셋, 퀄리티(또는 퀀타이저 또는 비트레이트), 세 종류만 옵션으로 주면 된다는 소립니다. (프로파일은 main이 디폴트이므로 생략 가능)
그리고 low latency나 lossless가 필요할 경우 -tune 옵션을 추가해주면 됩니다. 예) -tune lossless
사용성 면에서 상당히 편리해졌습니다. 샤나인코더의 NVENC 빠른 설정 구성도 굉장히 간편하게 디자인될 수 있겠다는 생각이 들더군요. 현재의 HEVC(x265) 빠른 설정과 비슷하게 구성될 수 있지 않을까 싶습니다.
아직까지 샤나인코더에서는 NVENC 프리셋 2.0이 지원되지 않습니다(5.1 포함). FFmpeg 라이브러리가 업데이트되고, NVENC 쪽 UI 구성도 업데이트된 다음 버전을 기대해 보겠습니다. (벌써? )
그렇게 되면 NVENC 아키텍쳐에 따라 고급 기능들 설정을 다르게 해줘야 했던 NVENC 화질 향상 프리셋 같은 건 더 이상 필요 없게 될 것 같군요.
참고로 NVENC 프리셋 2.0이 지원되는 FFmpeg 실행파일을 사용해보고 싶은 분들은 FFmpeg 공식 사이트에 소개된 윈도우 용 실행파일 다운로드 사이트들을 이용하시면 됩니다.
https://www.gyan.dev/ffmpeg/builds/
https://github.com/BtbN/FFmpeg-Builds/releases (GPL 버전이 기능이 더 많습니다)
예를 들어 비디오 스트림이 H.264인 원본을 NVENC로 HEVC 인코딩을 하고 싶을 경우 적용할 수 있는 FFmpeg 명령어 샘플은 아래와 같습니다. (하드웨어 디코딩, p7 프리셋, 퀄리티 32)
ffmpeg -hide_banner -vsync 0 -hwaccel_output_format cuda -c:v h264_cuvid -i INPUT -c:v hevc_nvenc -preset p7 -cq 32 -c:a aac -b:a 128k -ac 2 -tag:v hvc1 -y OUTPUT.mp4
(대문자는 실제 적용시 수정해야 할 부분)
개인적으로는 인코딩 속도와 비트레이트 대비 퀄리티가 고급 기능들을 수동 설정하던 예전에 비해 향상된 인상을 받았습니다.