샤나인코더 하드웨어 디코딩 - syanainkodeo hadeuweeo dikoding

시스템 요구 사항

이 문서는 샤나인코더 5.3 버전을 기준으로 작성하였습니다.

최종 수정일: 2022년 05월 14일

시스템 사양

권장 사양

운영체제: Windows 10 64비트 운영체제 또는 Windows 11

프로세서: Intel® Core™ i 시리즈 또는 AMD Ryzen™ 시리즈

메모리: 8GB RAM

최소 사양

운영체제: Windows 7 32비트 운영체제

프로세서: Intel® Core™2 Duo 또는 AMD Athlon™64 X2

메모리: 4GB RAM

참고

1. 하드웨어 디코딩 및 인코딩을 사용하려면 아래 항목을 참고하세요.

2. Windows 7은 닷넷 프레임워크 4.5 이상이 필요하며, 설치되어 있지 않으면 샤나인코더 설치 프로그램에서 자동으로 설치합니다.

하드웨어 디코딩

샤나인코더 환경 설정에서 설정할 수 있습니다.

하드웨어 디코딩을 사용하여 CPU 성능이 낮은 컴퓨터에서 디코딩 속도를 향상시키고, CPU의 사용률을 낮출 수 있습니다.

주의: 컴퓨터에 따라서 CPU 디코딩보다 하드웨어 디코딩이 느릴 수 있으므로 디코딩 속도 테스트를 하고 사용하세요.

디코딩 속도 테스트 방법: 샤나인코더에서 빠른 설정 -> 파일 형식을 opengl로 선택하고 인코딩 시작 버튼을 눌러 변환 속도를 확인하세요.

Microsoft Direct3D 9(DXVA2)

Microsoft에서 개발한 DirectX Video Acceleration API로, 여러 개의 디코더를 지원하며 H.264, MPEG-2, VC-1 및 WMV3 코덱을 지원합니다.

Microsoft Direct3D 11

Microsoft Direct3D 11 API를 사용하여 디코딩을 합니다.

Windows 8 이상의 운영체제에서 사용하실 수 있습니다.

NVIDIA CUDA(NVDEC)

NVDEC는 NVIDIA의 하드웨어 가속 API로, NVDEC를 사용하면 그래픽 카드를 통하여 동영상을 디코딩 할 수 있습니다.

NVIDIA 그래픽 카드를 사용하고 NVIDIA 그래픽 카드 드라이버 471.41 버전 이상이 설치되어 있어야 사용할 수 있습니다.

참고: GPU 모델명에 따라 디코딩 가능한 코덱은 https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new에서 자세하게 확인하실 수 있습니다.

Intel Quick Sync Video(QSV)

인텔 퀵 싱크 비디오(Intel Quick Sync Video)는 인텔 CPU의 내장 그래픽을 이용하여 하드웨어 디코딩 및 인코딩을 하는 기술입니다.

인텔 CPU의 내장 그래픽을 사용하고 인텔 그래픽 드라이버 버전 27.20.100.8935 버전 이상이 설치되어 있어야 사용할 수 있습니다.

세대는 Intel HD Graphics Gen을 의미하며, 아래는 세대 및 플랫폼 이름 별로 지원하는 코덱 목록입니다.

세대    플랫폼 이름   : 지원하는 코덱(디코딩)
Gen 5   아이언레이크  : MPEG-2, H264
Gen 6   샌디브리지    : VC-1
Gen 7   아이비브리지  : JPEG
Gen 7   베이트레일    : -
Gen 7.5 하스웰        : -
Gen 8   브로드웰      : VP8
Gen 8   브라스웰      : HEVC
Gen 9   스카이레이크  : -
Gen 9   아폴로레이크  : VP9, HEVC Main10
Gen 9.5 카비레이크    : VP9 profile 2
Gen 9.5 커피레이크    : -
Gen 9.5 제미니 레이크 : -
Gen 10  캐논레이크    : -

참고: 높은 세대는 이전 세대의 기능을 지원하므로, - 표시는 이전 세대의 기능을 지원한다는 의미입니다.

하드웨어 인코딩

샤나인코더 빠른 설정에서 비디오 코덱을 선택하여 설정할 수 있습니다.

코덱 이름으로 하드웨어 인코더를 구분하며 샤나인코더에서 지원하는 하드웨어 인코딩은 AMF, NVENC, QSV입니다.

(AMF)가 붙여진 코덱은 AMD AMF를 사용하여 인코딩합니다.

(NVENC)가 붙여진 코덱은 NVIDIA NVENC를 사용하여 인코딩합니다.

(QSV)가 붙여진 코덱은 Intel Quick Sync Video를 사용하여 인코딩합니다.

하드웨어 인코딩을 사용하여 인코딩 속도를 향상시키고, CPU의 사용률을 낮출 수 있습니다.

참고: 일반적으로 그래픽 카드 성능에 따라 인코딩 속도가 달라집니다.

AMD AMF - H264(AMF), HEVC(AMF)

Advanced Media Framework(AMF)는 AMD GPU에 최적화된 접근을 제공하여, 멀티미디어 데이터를 처리합니다.

AMF를 사용하면 AMD 미디어 가속기를 통하여 인코딩할 수 있습니다.

AMD 그래픽 카드를 사용하고 AMD Radeon Software Adrenalin Edition 21.12.1 이상이 설치되어 있어야 사용할 수 있습니다.

서던 아일랜드(Southern Islands) GPU 이상 및 카비니(Kabini), 카베리(Kaveri), 카리조(Carrizo) APU 이상에서 사용할 수 있습니다.

NVIDIA NVENC - H264(NVENC), HEVC(NVENC)

NVENC는 NVIDIA의 하드웨어 가속 API로, NVENC를 사용하면 그래픽 카드를 통하여 동영상을 인코딩 할 수 있습니다.

NVIDIA 그래픽 카드를 사용하고 NVIDIA 그래픽 카드 드라이버 471.41 버전 이상이 설치되어 있어야 사용할 수 있습니다.

참고: GPU 모델명에 따라 인코딩 가능한 코덱은 https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new에서 자세하게 확인하실 수 있습니다.

Intel Quick Sync Video(QSV) - H264(QSV), HEVC(QSV)

인텔 퀵 싱크 비디오(Intel Quick Sync Video)는 인텔 CPU의 내장 그래픽을 이용하여 하드웨어 디코딩 및 인코딩을 하는 기술입니다.

인텔 CPU의 내장 그래픽을 사용하고 인텔 그래픽 드라이버 버전 27.20.100.8935 버전 이상이 설치되어 있어야 사용할 수 있습니다.

세대는 Intel HD Graphics Gen을 의미하며, 아래는 세대 및 플랫폼 이름 별로 지원하는 코덱 목록입니다.

세대    플랫폼 이름   : 지원하는 코덱(인코딩)
Gen 5   아이언레이크  : -
Gen 6   샌디브리지    : H264
Gen 7   아이비브리지  : MPEG-2
Gen 7   베이트레일    : -
Gen 7.5 하스웰        : -
Gen 8   브로드웰      : -
Gen 8   브라스웰      : JPEG, VP8
Gen 9   스카이레이크  : HEVC
Gen 9   아폴로레이크  : -
Gen 9.5 카비레이크    : VP9, HEVC Main10
Gen 9.5 커피레이크    : -
Gen 9.5 제미니 레이크 : -
Gen 10  캐논레이크    : -

참고: 높은 세대는 이전 세대의 기능을 지원하므로, - 표시는 이전 세대의 기능을 지원한다는 의미입니다.

웬 뚱딴지 같은 제목이냐 하실 분들도 계시겠지만, 일반적인 상황이 아니라 추가 그래픽 카드가 있는 상황이어서 하드웨어 가속 인코더를 사용하지만 CPU 사용 비중이 높은 소프트웨어 필터(대표적으로 샤나의 리사이즈/해상도 변경 필터인 scale)를 사용하는 경우에 한해서 드리는 말씀입니다.

좀 원론적인 얘기를 드리자면, 샤나에서 하드웨어 가속을 선택해서 얼마나 속도 향상을 얻을 수 있느냐 하는 문제에 대한 답을 구하기 위해서는 하드웨어 가속의 작동 메커니즘을 파악해야 합니다.

샤나에서 하드웨어 가속 인코딩, 그중에서도 NVENC를 이용하는 경우를 예를 들어 보겠습니다. (AMD의 AMF 계열 인코더는 샤나에서 메뉴로 제공하지 않습니다.)

'인코딩'이라고 통칭하는 재인코딩, 혹은 트랜스코딩 과정은 개념적으로 간략하게 다음과 같습니다. (워크플로우 자체는 샤나든 다른 프로그램이든 동일합니다.)


디코딩: 선택에 따라 소프트웨어 디코딩(CPU) vs 하드웨어 디코딩(GPU. 샤나에서는 DXVA2를 통해서만 가능했으나 4.9 버전부터는 D3D11, NVDEC 등 좀 더 다양해짐.)

---> 해상도 변경: 리사이징/해상도 변경 필터에 따라 CPU 또는 GPU가 담당하지만 샤나는 소프트웨어 필터인 scale(CPU)만 가능

        (+ 기타 필터 작업)

---> 인코딩: 소프트웨어 인코딩(예를 들면 HEVC(x265)나 H264(x264))은 CPU가, 하드웨어 인코딩(NVENC 계열)은 GPU가 담당


엔비디아 측에서는 하드웨어(GPU) 인코딩 시 해상도 변경(scaling)을 GPU 단계에서 할 수 있도록 하드웨어 필터인 NPP 필터 라이브러리를 제공하는데 이걸 FFmpeg에 포함시키기 위해서는 FFmpeg 바이너리를 컴파일하는 단계에서 해야 합니다. (--enable-libnpp) 샤나인코더는 이 기능을 제외했기 때문에 해상도 변경에 소프트웨어 필터(scale)를 사용해 CPU가 이 역할을 담당합니다.

따라서 Nvidia 계열 하드웨어 가속 관련해서 샤나에서는 두 가지 선택밖에 없습니다.

  1. [환경설정]에서 '하드웨어 가속 디코딩(DXVA2 또는 D3D11 또는 NVDEC)'을 선택
  2. NVENC 계열 코덱을 선택

엔비디아 그래픽 카드(NVENC가 가능한)가 따로 있다면 2번은 당연히 선택해야겠지요.

이 문제는 인텔 내장 그래픽 카드를 이용하려 할 때도 마찬가지입니다. 이때는 디코딩을 QSV로, 인코딩을 QSV 계열 코덱을 선택해야겠지요.

문제는 1번입니다.

요즘 나오는 CPU는 GPU를 내장하는 경우가 대부분이기 때문에 엔비디아 그래픽 카드가 따로 있다면 GPU가 두 개가 됩니다. CPU 내장 GPU(인텔의 경우 QSV가 가능한)를 GPU0, 그래픽 카드의 GPU를 GPU1이라고 한다면 가장 이상적인 상황은 1번을 선택할 때 GPU0이 디코딩을 담당해 GPU 간의 밸런스를 맞추는 것입니다. 그러나 문제는 샤나 내에서는 DXVA2/D3D11/NVDEC 옵션을 켜면 그걸 GPU1이 담당하게 된다는 겁니다. (그렇다고 해서 QSV를 선택하면 GPU0이 기능을 하느냐면, NVENC가 선택된 상황에서 QSV 하드웨어 가속 디코딩은 작동하지 않습니다.) 그래서 GPU1이 디코딩과 인코딩을 동시에 담당하여 작업 플로우는 GPU1 -> CPU -> GPU1으로 진행되는데, 대부분의 경우 병목 현상이 생겨 인코딩 성능이 저하되어 속도가 떨어집니다.

(이 현상은 다른 프로그램에서도 마찬가지로 발생합니다. FFmpeg CLI와 XMeida Recode를 통해서 확인했습니다.)

이때 CPU 점유율은 상당히 낮아집니다. 디코딩과 인코딩을 모두 GPU1이 담당하기 때문에 당연한 현상이겠지요.

결론적으로 말하자면, 하드웨어 가속 디코딩을 켜면 GPU1은 효율도 떨어지고 죽어나는데 CPU는 탱자탱자 놀게 됩니다. GPU0은 아예 모른 척하고요.

이 경우 하드웨어 가속 디코딩을 끄면 오히려 CPU가 디코딩을 담당하면서 CPU 점유율도 충분히 높아지고 더불어 GPU1의 인코딩 효율도 향상되어 속도가 올라가더군요. 물론 CPU의 성능이 충분히 괜찮고 이를 최대한 활용할 수 있어야 한다는 전제가 있긴 합니다.

----------------------------------------

속도 향상은 이렇게 해결하게 됐지만 의문은 남습니다.

"하드웨어 가속 디코딩을 GPU0이 담당하고 하드웨어 가속 인코딩은 GPU1이 담당하도록 할 수 없을까?"

이게 원래 불가능한 건지, 샤나 자체의 문제인지 제가 세팅을 못하는 건지 모르겠습니다. 저로서는 아무리 용을 써도 불가능하더군요.

혹시 이 문제에 대한 답을 알고 계시다면 댓글로 알려 주시면 감사하겠습니다. 그리고 그게 가능할 경우 속도 향상 효과가 있는지도 궁금하군요.

<- 이 문제에 대한 답변은 댓글로 추가했습니다.

이 글을 추천한 사람

샤나인코더 하드웨어 디코딩 - syanainkodeo hadeuweeo dikoding
로엔