x264

psycho 2012. 11. 5. 13:54

 10-bit x264로 인코딩하여 고화질이라 주장하는 영상들을 본 적이 있는가? 과연 10-bit 인코딩이 8-bit 인코딩에 비해 우월한 것인가? 필자는 지금부터 그 "고화질"이라는 부분에 대해 알아야 할 것을 확실하게 짚고 넘어가고자 한다.


 기존의 8-bit 영상(10-bit에 대비되는 표현)은 색을 나타내는 데 필요한 3개의 신호가 신호당 8-bit, 즉 256단계의 색1을 나타낼 수 있기 때문에 붙은 명칭이다. 물론, 10-bit의 경우는 각 신호당 1024단계의 색상을 표현 가능하며, 이론적으로 따지자면 당연히 화질이 좋게 마련이다. 문제는, 이게 괜히 용량 낭비가 될 가능성이 매우 크다는 점이다. 어떤 문제들이 있는지 하나씩 짚어보자.


 첫째로, 애초에 인코딩한 영상의 source가 10-bit인 경우가 거의 없다. 직접 만든 것이 아니라면 인코딩했다는 영상들의 원본은 TV방송 녹화나 DVD, 혹은 블루레이 립 정도가 될 텐데, 당연한 말이지만 이 녀석들은 현재 99% 이상 8-bit 영상들이다. MP3를 생각해보면 금방 이해할 수 있는데, 일반적으로 정보가 손실되어 왜곡된 부분이 업스케일링을 한다고 해서 상태가 좋아지지는 않는다. 물론 영상 제작자들이 만든 source를 8-bit로 샘플링할 때 생기는 대표적인 현상(banding)의 경우 어느 정도 완화시킬 수 있는 영상 처리 필터도 있지만, 특별히 손상된 화질을 보정할 수 있는 그런 물건들을 쓰지 않았다면 10-bit로 인코딩해서 얻는 이득은 전혀 없다고 할 수 있다.


 둘째로, 설령 영상이 진짜 10-bit 영상이고 디코더를 제대로 갖추었다고 해도 대부분의 경우 그 혜택을 누릴 수 없다. 그것은 출력 장치들의 한계 때문인데, 요인은 크게 두 가지로 나눠볼 수 있다. (PC 기준) 하나는 그래픽 카드이고, 하나는 모니터이다.

 영상 작업 전문가들이 쓰는 그래픽 카드나 최근에 나오는 고급형 그래픽 카드들은 8-bit를 초과하는 영상 데이터 신호 출력을 지원하지만, 대부분의 경우에는 잘해봐야 8-bit까지만 지원한다. 이런 비디오 카드를 쓴다면 당연히 8-bit로는 제대로 표현할 수 없는 부분이 원래대로 나오지 않고 출력시 손실된다.

 그리고 현재 나오는 모니터들의 경우 색상 표현 단계가 잘해봐야 256단계이다. 싸구려 LCD 패널의 경우에는 64단계이거나 심한 경우 16단계인 경우도 있다.2 이는 대부분의 TV도 마찬가지로, 당연히 이런 물건을 쓴다면 1024단계의 색상 표현 따위는 없으며, 해당 장치에서 표현 가능한 수준까지 정보가 손실되게 된다. 256단계를 초과하는 색상 표현 단계를 가지는 모니터는 최소 몇백만 원씩 하는 의료용 모니터 정도밖에 없다. 혹시 착각할지도 몰라 미리 말해두는데, 명암비나 밝기하고는 다르다. 필자는 지금까지 모니터 제원에 색상 표현 단계가 얼마인지 나오는 것을 본 적이 없다.


 지금까지 나열한 것들은 인간의 감각과는 아무 관련이 없는 것들로서, 물리적으로 10-bit 지원이 안 되는데 차이가 보이느니 어쩌니 하는 건 당연히 말도 안 되는 소리다. 그런데도 불구하고 그렇게 느끼는 독자가 있다면 안과나 정신과에 가보기를 권장한다.


 마지막으로, 설령 물리적으로 완벽하게 10-bit 영상을 지원하는 환경을 구축했다고 해도, 인간의 시각적인 한계가 기다리고 있다. 인간의 눈은 대부분의 경우 256단계도 제대로 구분하지 못한다. 못 믿겠으면 RGB 값을 256단계로 조작해서3 그림 파일을 하나 만든 다음 눈이 빠져라 쳐다보면서 색을 구별하려고 노력해보라. 생각보다 쉽지 않을 것이다. 집중해서 봐도 구분하기 힘든 것을 초당 수십 프레임이 지나가는 동영상에서 구분한다는 것은 당연히 말도 안 되는 주장이다. 애초에 손실 압축이라는 것 자체가 이렇게 인간의 감각으로 인지하기 힘든 부분을 제거해서 압축률을 높이는 것이니만큼, 이런 불필요한 정보를 유지해서 용량을 키워놓고 단순히 정보가 더 많으니까 고화질이라 주장하는 건 사리에 맞지 않다. 당연히 10-bit 인코딩으로 인해 더 집어넣어야 할 정보가 차지하는 공간에 인간의 눈에 더 잘 띄는 8-bit 부분을 더 잘 인코딩해 집어넣는다면 그쪽이 더 고화질이라 할 수 있지 않을까?


 이상, 10-bit 인코딩을 했다고 해서 반드시 감상용으로 더 좋다고는 볼 수 없는 이유들을 살펴보았다. 적어도 필자는 10-bit 영상들이 인코딩을 통해 "나는 남들과는 다르다" 정도의 주장을 하려는 목적으로 만들어졌다고 생각한다. "어떤 게 어떤 것보다 좋다" 식의 주장을 하려면 어떤 장점과 어떤 단점이 있는지 명확하게 알아야 할 것이며, "이러이러한 단점이 있는데도 불구하고 장점 쪽이 단점을 상쇄하고도 남는다" 수준으로는 이야기하여야 할 것이다.

각주 1

256색과는 다르다.

각주 2

16단계 모니터는 LCD 칼라 모니터 초창기에나 있었고, 2012년 현재는 특수장비 또는 박물관에서나 볼 수 있을 것이다.

각주 3

이것 역시 단순한 256색 팔레트를 의미하는 것이 아니다. 예를 들어 R 128 G 0 B 0에서부터 R 128 G 255 B 0까지의 색 256개를 만들어서 구별해보라는 의미다.

  1. 256색과는 다르다. [본문으로]
  2. 16단계 모니터는 LCD 칼라 모니터 초창기에나 있었고, 2012년 현재는 특수장비 또는 박물관에서나 볼 수 있을 것이다. [본문으로]
  3. 이것 역시 단순한 256색 팔레트를 의미하는 것이 아니다. 예를 들어 R 128 G 0 B 0에서부터 R 128 G 255 B 0까지의 색 256개를 만들어서 구별해보라는 의미다. [본문으로]
코덱 옵션은 어차피 어느 정도 무거운 정도에서는 크게 차이가 없죠. 결국 립퍼의 필터질인데 요즘은 하도 고해상도고 소스상태도 좋아서 어차피 립퍼가 처리 할 수 있는 부분은 레벨처리나 라인다큰 같은 가벼운 필터류. 위의 말처럼 감마,레벨,명암은 인간의 눈으로 구분이 힘들어서 대략 립퍼가 원본대로 처리하고 (너무 심하게 영역을 벗어난 것은 보정,avsp에서 histogram으로 봐서) 하고 원본대로 두고 그래픽카드나 모니터,재생 플레이어(곰플이냐 팟플이냐)를 보고 사용자가 눈에 맞춰서 보는 게 가장 적당하죠.
결론 : 요즘 것들은 소스 상태 좋아서 대충 해상도만 마춰서 뽑으면 고만고만한 영상이 됨.
고전작이나 dvd립은 필터 효과가 많이 좌우되어서 립퍼에 따라서 화질 차이가 큼.
실사영상보다 애니메이션 립에서 실력차이가 더 눈에 띰.(라인 비틀림,밴딩,기타 등등이 원색적인 애니에서 더 튐)

정도겠네요. 어차피 10-bit해봐야 휴대기기 인코딩만 어렵게 될 뿐. 잘 보고 갑니다.
같은 영상인데 10비트로 인코딩된 게 8비트로 인코딩된 것보다 용량이 작은 경우가 있더군요.
만약 옵션이 같을 때 그러면 10비트 인코딩은 밴딩 현상이 줄어들면서 경계면의 디더링?이 되지 않아 압축 효율이 올라가서 그런 건가요? 궁금하네요.
그럴 가능성이 높다고 보면 됩니다. 디더링은 사람 눈에는 부드럽게 보일지도 모르지만 컴퓨터 입장에서는 규칙성이 떨어지는 노이즈에 불과하니까요. "계산해서 알아낼 수 있는 부분을 최대한 생략한다"라는 압축 알고리즘의 기본 개념상 10비트로 인코딩한 쪽이 용량이 더 작아지는 경우도 많이 볼 수 있습니다만, 재생시엔 다른 구성요소들이 받쳐주지 못하는 경우가 많기 때문에 최종적인 감상자 입장에서는 화질이 떨어져 보이게 되는 경우가 꽤 되죠. 전 영상 전문가가 아닌 데다 최종 결정은 어디까지나 본인이 해야 하는 것이니만큼 '그냥 이런 의견도 있다' 식의 참고용으로 생각해주시면 감사하겠습니다.
사람의 눈은 256칼라조차 구분하기 힘든건 사실입니다만, 사람눈이 32칼라만 구분한다고 가정 했을때, 사람눈과 카메라의 차이는, 카메라는 절대적인 256칼라를 구분하고, 사람눈은 상대적인 32칼라를 구분한다는것이 다릅니다.
이말은 무슨말이냐면, RGB(255, 0, 0)이라는 빨간색과, RGB(254.9, 0, 0)이라는 빨간색이 있다면,
카메라는 RGB(255, 0, 0)으로, 동일하게 인식하지만, 경우에 따라서 사람눈은 254.9와 255의 차이를 구분할 수도 있습니다.(상대적인 차이를 인지 가능하다는 말)

예를 들면, 석양을 카메라로 찍으면, 표현되지 않는 색상이 더 많습니다.
이는 사람눈이 석양의 붉은 빛을 더 많은 단계로 인식한다는 말입니다.(붉은색 계열을 더 세분화해서 인식. 상대적)

10비트 칼라를 전부 인식할 수 는 없지만, 한정된 특정 영역에서는 10비트 이상을 구분할 수도 있는것이 사람의 눈입니다.
예) 빨간색중에서 좀더더더더 밝은 빨간색...

결론을 내리자면, 10비트는 인간에게는 과분할 수도 있지만, 경우에 따라서는 부족할 수 도 있습니다.
이런... 저는 일단 보통의 컴퓨터에서 쓰는 256단계의 색상을 기준으로 이야기를 한 것입니다만, 특정 영역에서라면 엄밀히 따져서 256단계도 구분하지 못한다는 건 실언이 될 수 있겠군요. 그렇지만 제가 주장하려던 것은 그것이 아니고, 그 차이가 제 주장에 큰 영향을 미치는 것도 아니므로 굳이 본문까지 수정하지는 않겠습니다. 다음은 제가 생각하는 바입니다.

같은 영상 정보라도 어떤 장치로 기록했느냐에 따라 저장되는 결과가 달라지고, 같은 영상 데이터라도 어떤 장치로 표현하느냐에 따라 출력 결과가 달라집니다. 그렇기 때문에 출력 장치들의 한계를 먼저 언급한 겁니다. 여기에서 중요한 점은 영상을 표현하는 장치들이 254.9와 255를 구분할 수 있는 수준의 차이를 가지고 출력하지 못한다는 점입니다. 인간이 인지할 수 있는 색상을 기준으로 따지자면 분명 10비트 정도로는 모자랄 수 있지만, 지금도 일부 특수용도의 장치를 제외하고는 254.9와 255를 똑같은 색으로 출력해 버립니다. 이걸 두고 사람의 눈으로 차이를 구분한다는 게 말이 안 된다는 이야기이고, 결과적으로는 그 작은 차이를 표현하기 위해 할당된 비트가 쓸데없이 낭비되는 비트가 된다는 이야기입니다. 설령 사람이 구분할 수 있다 해서 끝이 아니고, 촬영시의 하드웨어부터 시작해서 화상 정보가 인간에게 인지될 때까지의 전 과정에서 각 단계의 한계 때문에 정보가 손실되는 일이 없어야 그런 구분이 실질적인 의미가 있다는 말이죠. 이것은 컴퓨터에서의 호환의 개념과 똑같습니다.

그리고 모든 사람이 물리적인 정보(세기, 파장 등)가 모두 같은 색을 봤다고 해서 같은 반응을 보이는 것이 아니고 물리적인 정보가 다른 색을 봤다고 다른 반응을 보이는 것이 아니기 때문에 표준을 정하는 입장에서는 그걸 모두 커버할 수가 없습니다. 정히 엄밀하게 따지려면 가시광선이 나올 수 있는 경우의 수를 모조리 추적해서 코드에 반영해야 할 텐데, 그렇게 하려면 색상당 10비트가 아니라 32비트라도 모자라겠죠. 정리하자면 현실적인 면을 따졌을 때, 8비트에서 10비트로 늘려봐야 정보량을 늘리는 만큼의 이득을 보기 굉장히 어렵다는 이야기가 되겠습니다.
좋은 글 잘 봤습니다