PDA

View Full Version : [도움말] 무익한 화질 논쟁에 종언을 고하며


z
11-05-2005, 12:24 AM
무익한 화질 논쟁에 종언을 고하며



처음 작성일: [2004/11/30]
작성자: z in kmp forum

# 이 글은 KMP사용자로서 중급 이상의 사용자를 대상으로 한 것입니다.
# 게시물의 무단도용을 금지합니다.

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

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

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

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

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

이런 필터들을 조립해서 재생에 이르도록 하는 과정은 이미 <동영상의 기본 재생 구조> ([Only registered and activated users can see links]) 편에서 자세히 살펴보았습니다.

그렇다면 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 내장 코덱으로도 적당한 비디오 처리를 하게 되면 거의 차이가 없게 됩니다. 그래서 저는 내장 코덱으로 재생할 수 있는 것은 굳이 외부 디코더를 사용하지 않습니다.

z
11-05-2005, 12:25 AM
<참고>
컬러스페이스: 우리말로 번역하면 색공간이라고 표현되는데 쉽게 말해서 색을 표현하는 방법을 말합니다. 예를 들면 대표적인게 RGB와 YUV를 들수 있는데 RGB는 Red, Green, Blue 값으로 색을 표현하고 YUV는 YCbCr로 표현하는데 Y는 luma(검정과 흰색, 즉 밝기)를 CbCr은 chroma(색)를 말합니다. (Cb = blue - 'black & white', Cr = red - 'black & white)

<참고>
레벨 보정은 일단 사용자의 화면 출력 장치가 최적화(Monitor Calibration)된 상태에서 하는 것입니다. 즉, 모니터 매뉴얼이나 인터넷 상에 보면 모니터 조정하는 방법이나 프로그램들이 있는데 이를 통해서 자신의 환경에 맞게 모니터의 Contrast와 Brightness 등이 잘 조정된 상태에서 레벨 보정을 할 필요가 있을 때 해야 합니다. 언제 레벨 보정이 필요한가 하면 위처럼 ATI의 경우 VMR9상에서(오버레이 믹서 사용시에는 레벨 보정이 필요없습니다) YV12 등으로 출력하는 경우(RGB출력시는 필요없습니다)에 필요하지 무조건 해 주어서는 안 됩니다.

(nVidia의 경우는 오버레이 믹서 사용시 VMR RGB 출력에 비해 뿌옇게 나오는 문제점이 있다고 하는데 nVidia의 제어판에서 오버레이 채도값을 100%로 맞추면 된다고 합니다. 물론 VMR RGB는 위에서 설명한 경우와 같습니다. 참고링크전문에 보면 VMR이 더 자연스러운 색상을 출력하는데도 오버레이 믹서를 선호하는 것처럼 나타나 있는데 이것은 RGB출력시 시스템 부하나 티어링 문제 때문으로 이 문제가 없는 분들에게는 해당사항이 없는 부분이겠지요? )

KMP의 비디오 렌더러 옵션에 있는 Alternative Texture(대체 텍스쳐), Surface(출력 표면) 선택, Force RGB(RGB 강제 출력) 옵션은 모두 ATI 라데온의 레벨 보정과 관련된 것으로 현재는 VMR9 렌더리스를 사용하면서 Force RGB에 체크한 경우라면 레벨 보정 필터 사용이 전혀 필요 없습니다.

wdm 등의 장치(TV)도 마찬가지로 생각할 수 있겠는데 wdm등에서 받은 입력화면을 KMP를 통해 VMR로 출력할 때(라데온의 경우입니다) RGB로 출력하는 것이 부하가 많이 걸린다면 이를 YV12로 바꾸고 레벨보정 필터를 사용할 수 있습니다만 큰 차이가 나지는 않을 것 같습니다.

<참고링크전문>
작성일: 2005.02.06
작성자: 김정삼 님

제가 Radeon 9000을 사용하다가 DVI가 필요해져서 GeForce 6600으로 바꾼지 며칠됐습니다.

먼저, 오버레이 믹서 스케일러가 마음에 드는 게... Radeon 쓸 때처럼 저해상도 동영상을 KMP로 크기 조절해서 안 봐도 될 정도더군요. Radeon은 Sharpen 처리가 된 것처럼 나와서 저해상도일 경우 하드웨어로만 크기 조절할 경우 미세하게 도트가 튀어보이는 경우가 있습니다. 뭐, 다르게 생각하면 상대적으로 nVIDIA가 뿌옇게 보입니다. ;
근데 오버레이 믹서 출력은 색감이 마음에 안들어서 VMR-9 모드를 사용했습니다. 처음에 YUV 출력을 시도해봤다가 역시나 Radeon처럼 안개 낀 것처럼 보여서 자연스러운 RGB 출력으로 여태껏 사용했습니다.

VMR 쓰면서 느낀 불편한 점은 역시 첫째로 tearing. 3D 처리 능력이 Radeon 9000보다 훨씬 나아서 감상하는데 지장이 있는 수준은 아니었습니다만, 화면 전환 압박이 클 때는 역시 재생이 부드럽지 못하고 밀리기 시작하면서 tearing이 나타납니다.
두 번째로 일정 수준 이하 해상도 동영상에서 소프트웨어 크기 조절이 필수인 저질() 스케일러.
세 번째로 RGB 원색 출력 시에 나타나는 계단(일명 깍두기) 현상.
그 밖에 왼쪽/위쪽 4픽셀 잘려서 화면이 나오는 거랑 CPU 사용률 높은 점들이 있습니다.;;
(Radeon. GeForce 나눌 것 없이 VMR 공통적인 현상)

이런 점들로 조금 좌절하고 있다가... nVIDIA 제어판을 훑어보는 중에 오버레이 채도 값이 114%로 되어있는 것을 봤습니다. 보니까 이게 수정된 것이 아니라 드라이버 기본 값이더군요. 혹시나 해서 100%로 직접 맞추고 보니까... 오~ 이거 거의 완벽하네요. 오버레이 믹서 출력이랑 VMR RGB 출력이랑 똑같습니다. Radeon은 오버레이 쪽이 밝기나 대비 같은 게 기본적으로 좀 높게 설정되어 있어서 VMR에 비해 화면이 거칠어 보이는 감이 있기도 했는데(제어판을 통해서 VMR과 같은 색감으로 맞추려고 시도해보신 분들은 알겠지만... 참 어렵습니다), GeForce는 VMR이랑 동일하게 나오네요. 완벽하게 똑같은 건지 궁금해서 정지 화상으로 눈 빠지게 비교해보니... 완전히 같은 건 아니고 오버레이 믹서가 약간 밝네요. 제어판에서 조절이 불가능한 수준으로 미묘합니다.(그러나 미묘한 중에도 VMR RGB 쪽이 원래에 가깝게 보이는...)

어쨌든... 지금은 VMR를 버리고 다시 오버레이 믹서로 돌아왔습니다. ;