Treasurej's Blog

[KMPlayer] 무익한 화질논쟁에 종언을 고하며

인터넷을 돌아다니다 보면 어떤 재생기가 화질이 더 낫다는 끊임없는 논쟁이 일어나고 있는 걸 보게 됩니다. 이것은 논쟁을 일삼는 사람들이 동영상의 기본적인 재생구조와 재생기가 동영상 재생에 있어서 어떤 역할을 하는지 잘 모르기 때문이라고 단언할 수 있습니다. 동영상 재생에 있어서 재생기의 역할은 원칙적으로 사용자 인터페이스를 제공해 주는 것을 근간으로 하고 있습니다.

우리가 핸드폰이나 혹은 사운드 카드 비디오카드 여러 하드웨어등을 이야기할 때 가장 중요한 것은 무엇일까요? 핵심 부품이 어떤 종류의 칩셋으로 만들어졌는지를 첫번째로 꼽습니다. 그 다음은 같은 칩셋을 가지고 어느 쪽이 더 튜닝이 되어 있는지를 따지고 마지막으로 어떤 게 더 편리한가를 살펴보게 됩니다. 이와 마찬가지로 재생기의 화질을 논할 때는 바로 재생기가 아니라 어떤 종류의 디코더를 사용하고 있는가가 첫번째로 따져보아야 할 부분입니다.

윈도우 외에 다른 계열의 운영체계를 쓰시는 분은 왜 윈도우용 재생기는 그렇게 종류가 많은 것인지 한 번쯤 생각해 보신 적이 있지 않을지 싶습니다. 왜일까요? 그것은 바로 윈도우상에서는 DirectX에서 동영상 재생의 기본 틀을 아예 제공해 주기 때문입니다. (동영상의 기본 재생 구조편을 참고하세요)

재생기는 이 기본적인 구조위에서 동영상 재생의 인터페이스를 첨가해 놓은 것입니다. 각종 재생기에는 수많은 팬들이 있는데 거기엔 합당한 이유가 있을 것입니다. 그러나 어떤 재생기가 특별히 화질이 더 낫다거나 소리가 더 크게 난다 혹은 센터(목소리)가 안나온다는 등의 문제는 근본적으로 재생기의 탓이 아닙니다. (예외는 항상 있는 법입니다만 원칙적으로 그렇다는 뜻입니다. )

그렇다면 동영상 재생의 기본적인 구조를 지원한다는 것은 구체적으로 무엇을 의미할까요? 그것은 동영상의 재생에 필요한 여러 필터들을 연결해서 재생할 수 있도록 해 준다는 의미입니다. 즉 재생에 가장 핵심적인 역할은 Directshow가 담당하고 있습니다. 그러므로 동영상 재생기들이 Directshow를 기반으로 하고 있는 이상 제아무리 서로 다른 껍데기(인터페이스)를 뒤집어 쓰고 있다고 하더라도 내부에서 돌아가는 모양새는 거의 같다는 이야기입니다. 그리고 거의 모든 윈도우용 재생기가 Directshow 위에서 돌아갑니다.

이런 필터들을 조립해서 재생에 이르도록 하는 과정은 이미 <동영상의 기본 재생 구조> 편에서 자세히 살펴보았습니다.

그렇다면 KMP와 같은 고급 재생기가 다른 재생기와 다를 것은 무엇인가 의문이 생길 수도 있겠죠. 그것은 재생에 필요한 필터나 코덱의 조합을 좀 더 융통성 있게 사용자들이 조절할 수 있도록 해 준다는 것이 가장 큰 특징입니다. 원래 Directshow에 기반을 둔 재생기는 재생에 있어서 별다른 처리를 필요로 하지 않습니다. 그래서 재생할 때 문제가 생기면 재생기 내에서 해결이 불가능하고 시스템에 설치된 코덱을 바꿔야 한다던지 직접 레지스트리를 조작해야 하는데 이 과정에서 여러 문제가 발생할 수 있습니다. KMP는 이러한 경우 시스템을 전혀 건드리지 않고 내부적으로 재생에 필요한 코덱을 바꿔 줄 수 있습니다. 바꿔치기할 수 있는 것은 비단 이것에 그치지 않고 동영상 재생의 기본 구조를 이루는 소스필터부터 스플리터, 디코더, 각종 오디오/비디오 처리 필터, 렌더러까지 이릅니다. 즉, 코덱 때문에 문제가 생겨도 컴퓨터를 뒤엎는 수고를 하지 않고 내부적인 조정을 통해 대부분 해결이 가능하다는 점입니다. 물론 어느 정도의 기본 지식이 필수적이긴 합니다.

흔히들 MS를 비난하는 많은 사람들이 윈도우라는 운영체계가 비효율적이라고 하는데 그것은 위에서 보는 것처럼 이러한 편리함과 성능이 서로 Trade-off (대가를 지불하고 바꾸어 거래가 된) 되었기 때문입니다. 이러한 편리함은 개발자에게까지 미치어, 개발자가 이런 핵심 부분부터 인터페이스까지 스스로 모든 것을 짜지 않고 분업과 협업이 쉽게 가능하게 된 것입니다. 예를 들면 DivX 디코더, ffdshow 등은 코덱이지 재생기가 아닙니다. 코덱만 가지고 재생이 불가능한 것처럼 재생기도 마찬가지입니다.



종류가 다른 두 재생기의 화질이 다르다고 하는 데에는 미묘한 차이가 있으며 그 첫번째 원인은 재생에 사용된 디코더 때문이라는 것을 앞서 알아보았습니다. 그러면, 재생에 사용되는 디코더를 어떻게 알 수 있을 것인가? 이것은 각 재생기에서 재생하는 도중에 메뉴를 잘 뒤적거려 보면 필터정보라는 항목에 있습니다. KMP의 경우는 사용되는 필터의 물리적인 위치까지 추적이 가능하도록 아주 자세한 재생정보가 제공됩니다.

만약 두 재생기가 같은 디코더를 사용하면서도 화질에서 차이를 보인다면 어떻게 된 영문일까요? 여기서 다시 한 번 동영상 재생의 기본 뼈대를 살펴보면 다음과 같습니다.

<동영상>소스 필터 - 스플리터 - 비디오/오디오 디코더 - (비디오/오디오 처리 필터) - 비디오/오디오 렌더러

같은 디코더를 사용했는데도 화질에 차이가 있다면 그 다음은 비디오 처리 필터 차이라고 볼 수 있습니다. 이 항목은 괄호로 묶여 있는데 이것은 동영상 재생에 필수적인 요소가 아니기 때문입니다. 예를 들자면 디코더에서 압축이 해제되어 출력되는 비디오/오디오 신호들은 마치 우리의 맨 얼굴과도 같습니다. 여기에 얼굴을 다듬고 화장을 하는 것이 처리 필터를 통과하게 되는 것과 유사합니다. (비디오 필터 처리에 대해서는 나중에 새롭게 시작되는 글에서 자세히 다루어 보도록 하겠습니다.)



보통 재생기는 자체적인 디코더나 전용 처리 필터를 포함하고 있지 않습니다. 국내의 여러 동영상 재생기의 자체적인 코덱들은 모두 부모(ffmpeg)가 동일한 형제들입니다. 디코더도 동일하고 비디오 처리도 하지 않거나 동일한 것을 사용한다고 하는데 아직도 화질에 차이가 난다고 여겨지면 마지막으로 렌더러와 출력 컬러스페이스 문제입니다. KMP의 고화질 모드는 비디오 처리장치를 오버레이 믹서에서 VMR 렌더러로 바꾸고 RGB32(HQ) 출력으로 전환한 것입니다.

비디오 처리 장치는 재생중 재생 정보/필터 설정 메뉴에서 살펴보면 알 수 있으며 출력 컬러스페이스는 재생 도중 Tab을 누르면 Output type: 에서 보여줍니다. (YV12, YUY2, RGB32, RGB32-BF등) 이 두 항목은 환경설정의 영상처리와 그 하위의 출력 컬러스페이스 부분에서 조정 가능합니다.

입력 컬러스페이스를 YV12로 사용하는 경우에 화면이 조금 절거나 느려지는 문제가 생기는 경우 YV12 대신 YUY2를 사용하도록 할 필요가 있습니다. KMP는 디코딩 후 자체적인 비디오 처리를 하는 과정에서 내부적으로 처리 속도가 가장 빠른 YV12를 사용합니다. 이렇게 처리된 비디오 신호를 출력할 때 출력 컬러스페이스와 렌더러에 따라 약간의 화질 차이를 보이게 됩니다.

Nvidia의 드라이버가 YV12출력시 밝기의 범위(luma range)가 16-235로 되는 문제가 있다고 합니다. 이것은 화면을 뿌옇게 보이게 하는데 밝기의 범위가 일치하지 않아서 검은색을 어두운 회색으로 흰색을 밝은 회색으로 보이게 하는 문제가 있습니다. 이 경우 출력 컬러스페이스를 YUY2나 RGB로 놓고 사용하면 됩니다. 그런데 실제적으로 데이터가 저장되는 범위가 16-235이기 때문에 모니터에서 자동 보정이 되거나 혹은 우리가 주로 모니터상에서 동영상을 감상하기 때문에 이 범위가 자동으로 0-255로 변환되는 것이 낫다고들 합니다.

ATI의 경우 VMR상에서 RGB 출력를 제외하고는 화면이 뿌옇게 나타나는 문제점이 있습니다. 비디오 출력장치를 VMR renderless mode를 선택하고 VMR renderless mode에서 RGB로 강제 출력에 체크하거나 Direct3D RGB를 이용하면 이 문제를 해결할 수 있습니다. 더 간편한 방법은 밝기의 입출력 범위를 조절해 주는 레벨조절 필터를 사용하면 됩니다(VMR상에서 YV12출력시). 실제로 프로젝터나 대형 디스플레이에 출력시 튜닝할 때 많이 쓰이는 필터 중 하나입니다.

환경설정 > 영상 처리 > 레벨조정에서 볼 수 있으며 Alt-z로 level을 on/off해서 비교해 볼 수 있습니다. 후처리 필터에서도 레벨보정이 가능한데 레벨보정이 필요한 경우에만 되는게 아니고 무조건 레벨보정이 되도록 조정되어 있습니다. 그러므로 MPLayer방법으로 후처리를 하실 때는 후처리 내의 레벨보정은 끄시기를 권장합니다.

위에서 화질에 관련된 세가지 즉, 디코더, 비디오 처리 필터, 출력컬러스페이스와 렌더러에 대해 알아보았습니다. Divx재생시 ffdshow 계열 코덱(kmp내장 코덱 포함)보다 DivX 디코더가 화질이 더 나은 것처럼 보이는데 실상은 DivX디코더는 자체적으로 후처리와 노이즈 필터를 사용하기 때문에 그렇습니다. 기본적으로 비디오 처리 필터를 사용하기 때문에 좀 더 화면이 나아 보이는 것입니다. 대신 CPU부하가 더 높게 나옵니다. 이것은 kmp 내장 코덱으로도 적당한 비디오 처리를 하게 되면 거의 차이가 없게 됩니다. 그래서 저는 내장 코덱으로 재생할 수 있는 것은 굳이 외부 디코더를 사용하지 않습니다.


Categories

전체글 (75)

Recent Entries

Public Voice

Trackbacks

Favorite Tags

Follow treasurej on Twitter  treasurej facebook  treasurej's blog rss 2.0


You can also find us on the following sites : Lifestyle | Mind | Professional | Blog