본문으로 바로가기

하드웨어 인코더에 대한 오해

category 방송&녹화 2017. 4. 23. 18:09

방송을 위해 설정을 만지다보면 대부분 발생하는 문제가 인코더 문제다.

주로 X.264를 이용하다가 CPU 점유율을 문제로 방송을 포기하게 되거나 컴퓨터 업그레이드 및 투컴 세팅을 고려하는 사람도 존재한다.


뭐 결론부터 얘기하자면, 이건 별로 좋은 방법이 아니다.

기본적으로 X.264로 볼만한 영상을 CPU를 이용해 실시간으로 인코딩 하는데에는 너무나도 큰 돈이 깨지기 때문이다.

기본적으로 6코어 이하에서 X.264를 이용할 생각은 안하는게 정신건강에 이롭다.[각주:1]


그러니까 사실상 현재로써는 라이젠이 아닌 이상 4코어 8스레드 이하가 주류인 이 PC 바닥에서는 X.264 코덱 자체가 좋은 선택이 아니다.

그런 이들을 위해 존재하는 코덱이 바로 하드웨어 코덱이다.


하드웨어 코덱은 여러 종류가 있지만, 일단 OBS나 Xsplit에서 주류로 쓰는 하드웨어 코덱은

인텔의 QuickSync H.264, 엔비디아의 NVENC H.264, AMD의 AMF H.264[각주:2]

이 세가지를 예로 들 수 있겠다.


이 하드웨어 인코더의 특징은 일단 '빠르다' 라는 점이다.

여기서 빠르다 라는 뜻은 여러가지 의미가 있긴 하지만, 일단은 CPU로 인코딩 하는 것 보단 빠른 속도로 변환이 가능하다 정도로 이해하면 된다.

이것이 가능한데에는 일단 그래픽카드에 자체적으로 코덱과 관련된 칩셋이 내장되어 있기 때문이고,[각주:3]

또한 아직까지 일반인용으로는 4코어 수준에 머무르는 CPU와 다르게 GPU에는 이런 연산 코어가 '수천' 단위로 들어간다는 점이다.[각주:4]


혹시나 샤나 인코더로 NVENC H.264 인코더를 돌려본 적이 있는 유저라면 알고 있겠지만

동일한 영상으로 동일 옵션 인코딩을 돌려보면 2~3배속 수준에 머무르는 X.264 코덱에 비해

최대 수십배까지(!) 차이가나는 하드웨어 인코더의 절륜한 성능을 볼 수 있을 것이다.

물론 이런 빠른 속도가 항상 장점은 아니다, 당연하게도 이득이 있으면 손실도 있는 법이다.


하드웨어 인코더는 기본적으로 정밀연산을 고려하지 않는다.

이 얘기는 영상 자체의 압축률은 CPU를 이용한 X.264 코덱의 기준 프리셋 인코딩 보다는 떨어진단 뜻이다.


자, 그럼 여기서 순수하게(?) 의문이 생길텐데

낮은 비트레이트로 조금이라도 화질이 아쉬운 인터넷 방송에서 화질감소를 감안하면서 까지 속도를 중시할 필요가 있느냐 이거다.


그럼 여기서 한가지 문제를 내보겠다.

'도대체 X.264 인코더의 기준이 되는 프리셋이 뭘까?'


X.264 인코더의 프리셋은 다음과 같이 10개가 있다.

Ultrafast로 갈 수록 정밀연산도가 떨어지고 속도가 빨라지며, Placebo로 갈 수록 정밀연산도가 올라가고 속도가 느려진다.


Ultrafast

Superfast

Veryfast

Faster

Fast

Medium

Slow

Slower

VerySlow

Placebo


'흐음, Xsplit이나 OBS의 프리셋 설정을 보면 Veryfast로 설정되어 있던데, 이게 기준 아닐까?'


NO, NO, NO

답은 바로 Medium 이다.


실제로 인코딩과 관련된 부분인 FFmpeg를 순수한 라이브러리만 설치해보면 답이 나오는데, 디폴트 값이 바로 Medium 이라는 점이다.

그러니까 하드웨어 인코더가 X.264 인코더에 비해 화질이 나쁘단 것은 사실 Medium보다 나쁘단 뜻으로

실제 하드웨어 인코더는 X.264 프리셋에 비교하면 일반적으로 Fast 수준의 화질은 나온다는 것이다.


즉, X.264로 동일 비트레이트 대비 화질 이득을 얻기 위해서는 최소 Medium 프리셋을 이용해야 가능하단 소리다.


'그런데 왜 대부분의 프로그램들은 Medium이 아니라 Veryfast를 디폴트로 해 놓은건가요?' 라는 질문이 나올수 있다.

아주 간단한데 '아, 일반적으로 Medium으론 방송 못하니까 Veryfast로 돌리세요' 라고 디폴트 값을 바꾼거다.


이게 얼마나 우스운 소리냐면...

대부분의 X.264로 고통받는 유저들의 프리셋 설정이 Veryfast로 되어있다는 점이다.

그런데 이 부담안되는 프리셋을 쓰면서도 CPU 점유율이 그 모양이라 이거다


위에 쓴 말을 조금 바꿔 얘기하면, 대부분의 유저가 하드웨어 인코더 수준도 안되는 프리셋을 이용하면서

하드웨어 인코더를 쓰면 화질이 나빠지지 않을까 걱정하고 있단 뜻이다(...)


물론 X.264의 Veryfast 프리셋을 쓰면서도 하드웨어 인코더를 쓴 영상보다 좋은 경우가 있을수 있는데

이는 대부분 그래픽카드의 하드웨어 성능 한계나 프로그램의 인코더 최적화 문제 때문이다.[각주:5]


그러니까, 성능 문제로 X.264를 쓸 수 없다면, 화질 문제로 걱정하기에 앞서

일단 하드웨어 인코더를 한번 시도해 보길 바란다.

  1. 참고로 X.264 공식에 따르면 720P 30fps를 '실시간'으로 인코딩 하려면 최소 i5급 쿼드코어 이상을 권장하고 있다. [본문으로]
  2. Xsplit은 구형 버전인 AMD VCE H.264를 쓰는중 [본문으로]
  3. 요즘 스마트폰에서 고사양의 HEVC 코덱을 구동 할 수 있는 이유기도 하다, 실제 순수 하드웨어 성능만으로는 절대 안돌아간다. [본문으로]
  4. 물론 GPU의 하나의 코어가 CPU의 코어와 동일한 수준은 아니다. [본문으로]
  5. 성능의 한계로는 보통 하나의 그래픽카드로 다중작업 (게임 + 녹화 및 방송)을 할 경우, 인코더 최적화 문제같은 경우엔 대표적으로 Xsplit VCE 최적화 문제가 있겠다. [본문으로]