1편은 여기에
http://todayhumor.com/?computer_188635생각보다 글이 인기가 많더군요. 솔직히 그냥 페이지가 넘어갈꺼라는 생각도 했었습니다만은... 아무튼 이어서 2편입니다.
이번에는 코덱과 디코더에 대한 얘기를 해볼까 합니다.
먼저, 코덱과 디코더, 인코더에 대해서 조금더 자세하게 설명하겠습니다.
코덱은 1편에서도 간단하게 얘기했지만 이 동영상을 어떻게 압축할까에 대한 '규약'입니다. 어떠한 프로그램 그 자체를 이야기 하는것이 아닙니다.
이러한 규약에 따라 이 규약이 공개되어있다면 이에 호환되는것을 만들 수 있다는 것이지요. 이에 따라 표준으로 지정된 H.26x코덱 시리즈들은 수많은 디코더들과 인코더들이 나와 있습니다.
디코더라는 녀석은 동영상을 볼 수 있게 압축을 풀어주는 역할(쉽게쉽게 이야기를 하자면)을 합니다. 이러한 디코더는 어떠한 인코더로 인코딩을 했던 코덱이 동일하다면 재생이 문제 없이 되어야 합니다.(예를 들어 맥에서 만들어진 H264영상이더라도 윈도우 미디어 플레이어에서 읽어져야 합니다.)
인코더라는 녀석은 압축을 해주는 역할을 합니다. 이러한 인코더 역시 여러 회사들에서 만들게 되는데 코덱에 명시된 기능중 쓰는것도 있고 안쓰는 부분도 있고 해서 똑같은 H.264압축을 행하는 인코더라도 해도 종류별로 성능차이가 있고 그럽니다.
(영문 위키 펌. H.264호환 인코더중 일부)
이렇게 여러 인코더의 종류가 있지만 한가지 H.264디코더에서 모두 읽혀야 한다는 것이지요. 저것들은 정말 '일부'이고, 인코더 자체가 공개되지 않고, 자사제품에서만 쓰이는 인코더들도 많습니다.(소니같은 캠코더 만드는 회사들은 거의 다라고 보시면 됩니다...)
뭐 종류가 이렇게 많다지만 실제로 많이 쓰이는 인코더 코덱은 몇가지뿐입니다. H.263규약에서는 divx나 xvid, H.264규약에서는 Divx, x264, mainconcept정도?(이것은 독자적으로 쓰일떄의 얘기고, 동영상 편집 프로그램에 내장된 코덱을 쓰는경우도 많죠.)
엄밀히 이야기하여 우리가 알고 있는 인코딩이란 코덱을 변경하는것이므로 트랜스코딩이라고 불러야 맞는 말이지만 넘어가겠습니다.
자 그러면 코덱에 대해 이야기하여 보죠.
Mpeg2/H.262
현재 한국 HDTV와 DVD에서 쓰이는 코덱입니다. 왜 Mpeg2/H.262라고 명시했냐 하면은 둘은 완벽하게 동일하기 때문입니다. Mpeg이란 동영상, 음성, 시스템에 대한 큰 틀로서, Mpeg이 H.262을 포함합니다. Mpeg2규격 내에 part2에 H.262코덱을 포함합니다. 덧붙여 이야기하면 MP3는 MPEG1,2규약내에 part3에 포함됩니다.) 이제는 많이 쓰이는 코덱이 아니기 때문에 넘기겠습니다.
MPEG4 part2/H.263
흔히들 DIVX나 XVID라고 불리우는 코덱입니다. 이 코덱부터는 쓸 이야기가 좀 되는데.....
90년대 후반~2000년대 초반에 ms-mpeg4라고 불리우며 높은 화질을 보여주던 코덱이 바로 이것의 변형판입니다. 누가 악의 제국이 아니랄까봐 H.263을 살짝 변조하여 윈도우에서 제공하는 디코더를 이용하지 않으면 재생이 안되게 만들었었던 거지요. 거기다가 MS요노무 시키들은 한가지 제한을 더 걸어놨는데.. 바로 스트리밍 전용으로만 되도록 만들어 놓은거지요-_-
이것에 반발한 유저들은 MS-MPEG4코덱을 해킹합니다. 그래서 오프라인용으로도 쓸 수 있게 만듭니다. 이것이 DIVX입니다. 물론 일반인들은 그런거 모르니 DIVX가 대단한 코덱을 만들었다고 생각했습니다. 근본이 폐쇠적인 MS-MPEG4에 기반했으니 DIVX에서 제공하는 디코더가 아니면 재생이 안되엇기 때문에 더더욱 그렇게 생각하기 쉬웠습니다. 아무튼.. 이러한 H.263은 기존에 쓰이던 H.262/MPEG2에 비해서 동일 비트레이트 대비 두배에 가까운 화질을 보여주었기 때문에, DIVX란 존재 때문에 인터넷 불법영상의 태동(...)을 맞이하게 됩니다. 때 마침 그때쯤부터 깔리기 시작한 ADSL의 존재가 더더욱 널리 퍼집니다.
하지만... DIVX는 여기서 이 코덱을 '유료화'하기에 이릅니다. 물론 자기들이 표준 H.263을 기반으로 인코더/디코더를 만들어서 유료화를 했었다면 아무런 말도 안나왔겠지만 어디까지나 DIVX의 근본은 MS-MPEG4을 해킹한것에 불과 했으니까요. 그래서 DIVX안에서도 말이 많았고 이에 반발한 일부 개발자들이 나와서 XVID라는 오픈소스 그룹을 만들게 됩니다. 잘 보면 아시겠지만 XVID는 DIVX를 거꾸로 쓴겁니다. DIVX 엿먹으라고 내건 이름이죠.
그리고 XVID는 표준 H.263에 근거하여 새로 인코더를 만듬으로서 divx나 MS-MPEG4와 거의 비슷한 화질을 보여주면서도 무료였기 때문에 대세는 이쪽으로 흘러가게 되었습니다.
그래서 결론은 MS나 DIVX나 모두 코덱을 변경 하여 표준에 호환되도록 바꿨습니다-_-... 지금은 divx나 ms-mpeg4나 어떤 디코더에서도 읽히게 되었죠.
MPEG4 part10/H.264
개발자체는 2000년대 초반에 발표되었습니다만, 대중적으로 이용되게 된 것은 블루레이가 발표된 이후로 블루레이에 표준 코덱으로 탑재되면서 널리 알려지게 되었죠. 개발 목표는 H.263에 대하여 두배의 효율을 가진다는 것. 실제로 지금 인코딩을 해보면 두배에 가까운 효율을 나타내며, 정적인 영상인 경우에는 더욱 높은 압축률을 가지고 있습니다. H.264는 개발당시 너무 고사양이었기 때문에(지금도 4K해상도를 인코딩하면 왠만한 PC에서 끊기게 되죠...) 프로필과 레벨이라고 하여 디코딩시 기기에 무리를 주는 옵션들이 들어가고/빠짐에 따라 지정되어 호환성을 높이도록 하였습니다.
문제는... 흔히들 공장릴이라고 하는 불법 티비 녹화 영상들을 배포하는 립그룹들이 이 프로필과 레벨을 무시한채 마구잡이 인코딩을 해서 H.264는 무거운코덱이라는 악명을 높이는데 일조를 하였습니다.
그래서 지금도 H.264는 무거운 코덱이라고 생각하여 저화질 영상의 경우 XVID코덱으로 인코딩을 하게 되는데.... H.264의 옵션을 낮추면 XVID와 비슷한 요구사항에 보다 적은용량에 더 높은 화질을 보존 할 수 있습니다. 차후 글에 예시로 인코딩한 비교영상을 올려드리겠습니다.
인터넷에 굴러다니는 영상들이 H.264이 XVID보다 높은 용량을 가지는건 더 높은 비트레이트로 인코딩을 하였기 때문이죠.
WMV/VC-1
마이크로소프트에서 개발한 코덱으로 HD-DVD에 기본으로 들어간 코덱입니다. HD-DVD의 참패이후 윈도우 미디어 플레이어를 이용한 스트리밍 서비스에서 주로 이용하며, DRM쪽에서는 거의 모든영상이 이코덱을 쓰고 있습니다. HD-DVD쪽에서는 피눈물만 흘렸지만 이쪽에서는 승리자가 되었죠.(이에 대응하여 H.264는 익스텐드 프로필이라는 스트리밍쪽을 강화한 것을 공개하였으나 쳐발쳐발) 윈도우 미디어플레이어에서는 wmv9 advanced profile이라고 불리고 있습니다.
VP6->VP7(개량버전)->VP8(구글 인수후 오픈소스화)=webm
on2라는곳에서 개발된 코덱으로 VC-1과 H.264가 블루레이와 HD-DVD전쟁에 따라 de facto자리를 놓고 투닥투닥거릴때 슬며시 얼굴을 내밀다가 깨갱한 코덱으로... 잊혀진 줄 알았으나 어도비 플래시에 기본코덱으로 탑재됨으로서 알음알음 자리를 넓혀온 코덱입니다. 플래시 플짤등을 다운받으면 flv란 확장자를 가지고 있는 영상이 있는데 이것이 바로 vp6 or 7 코덱입니다. 이렇게 플래시에 연명해서 살다가 회사가 구글에 팔리게 되었는데, 구글이 이 코덱을 오픈소스화 하여 VP8이라고 개명후 xiph재단(음성/영상 관련 오픈소스 재단으로, ogg voris, speex(아이폰 siri, xbox 음성채팅에서 이용), opus(speex 후속)등등을 개발)과 협력, WEBM이라는 새로운 영상/음성 코덱을 발표하면서 HTML5라는 새로운 전장에서 WMV, H.264등과 리벤지를 벌이게 되었습니다.
그외 인텔 인데오, 리얼 플레이어, 퀵타임, 빙크등이 있으나.. 과거의 유물이 되었거나, 프로그램에서 자체적으로 쓰이는 코덱으로 거의 볼 일이 없습니다. 사실상 위의 코덱들로 쓰이는 영상이 99프로라고 봐도 되는 형편.
그리고 오늘 글을 마무리하게 될 통합코덱과 유명한 디코더에 대하여 이야기를 해볼까 합니다.
흔히들 영상이 재생이 안될때 일단 통합코덱을 찾곤합니다. 그리고 광고가 덕지덕지붙은 반쯤은 애드웨어에 가까운 프로그램 때문에 피눈물을 흘리게 되죠-_- 이러한 통합코덱은 과연 필요한 것일까요? 통합코덱은 왜 필요한 것일까요?
일단.. 1편의 내용을 복습해 봅시다. 영상을 재생하는데에 있어 필수적인 것은 스플리터, 영상코덱, 음성코덱입니다. 과거에는 위에 써놓은 대세코덱뿐만 아니라 별의별 희안한 코덱들이 많았기 때문에 OS나 플레이어에서 이러한 것들을 모두 지원하는것은 무리였습니다. 그래서 이러한 코덱들을 알음알음 모은 통합코덱이란 녀석이 필요했던 것이지요.
시간이 좀 지나자 ffdshow라는 ffmpeg에 기반한 모든 코덱을 한곳에 모으는 오픈소스 프로젝트가 나오게 되었습니다. 하지만 ffdshow에는 여전히 스플리터는 존재하지 않았고, 아무래도 모든 코덱을 한곳에 모은거라 불안정한 면도 있고 그랬습니다. 따라서 통합코덱은 ffdshow를 기반으로 하여, 자막 필터, 당시 유명한 스플리터였던 할리 스플리터, 좀더 안정적인 코덱, 그리고 광고프로그램(...)을 섞는쪽으로 발전을 하게 되었습니다.
하지만... 2010년대에 들어서면서 상황이 달라지게 됩니다. ffmpeg이 10여년이 지나게 되면서 안정적이게 되고, 역시 마찬가지로 ffmpeg에 기반한(나중에 이 얘기를 하겠습니다만, 이게 엄청납니다. 다음팟, 곰플등등 대부분이 이것에 기반을 합니다.) lavfilters란 녀석이 나오게 됩니다. 이녀석은 ffdshow와 다르게 스플리터와 자막필터를 내장함으로서 완벽한 단일프로그램으로 진화하게 되었습니다. 거기다가 코덱들 역시 쓰이는 녀석만 쓰게 됨으로서...... 통합코덱의 의미는 퇴색되었습니다.
여전히 사람들은 기계적으로 영상이 안돌아가면 통합코덱을 찾고 있지만 정말 희귀한 코덱으로 인코딩된 영상을 재생하는것이 아니라면 현재 lav filters하나로 모든것이 가능합니다.
이런 디코더중 유명한것을 설명해 드릴께요.
microsoft DTV decoder - 윈도우7부터 내장된 디코더로 윈도우7이 출시되자마자 엄청난 인기를 누렸습니다. H.264전용디코더이긴 했습니다만, 그때 당시에도 괘 무거운 코덱이었던 H.264가 이슈였고 ffdshow를 필두로한 무료 디코더부터 왠만한 상용디코더까지 이겨버릴 재생성능을 가지고 있었으니깐요.
coreavc - 역시 마찬가지로 H.264전용 디코더였지만 NVIDIA의 GPGPU기술을 이용한 CUDA지원으로 NVIDIA그래픽 카드만 있으면 엄청나게 낮은 사양을 요구하는 디코더로 인기를 누렸습니다. 하지만 현재로서 cuda뿐만 아니라 인텔 퀵싱크, AMD APP(얜 아직 미정)등을 지원하는 디코더들이 많이 나와서 인기가 줄었죠. 유료라는 이유도 한몫 했습니다.
Lavfilters(https://github.com/Nevcairiel/LAVFilters/releases ) - 나온지 몇년 안 된 통합프로젝트로 역시 마찬가지로 ffmpeg에 기반하고 있습니다. 스플리터와, 자막 기능(스플리터에 내장), 강력한 신기술 지원등으로 인기를 끌고 있습니다. 상용코덱에서나 지원하던 쿠다, 퀵싱크, 더블프레임 디인터레이스등을 무료코덱에서 보기 힘들었던 그런 기능들이 내장하고 있습니다. ffdshow와같은 세부설정을 지원하지는 않지만, 초보자도 쉽게 쓸 수 있는 설정창(ffdshow는 보면 토나옵니다-_-) 64비트 지원, 스플리터내장등이 장점입니다.
MPC-HC(http://mpc-hc.org/ ) 외국에서 유명한 플레이어로 곰플이나 팟플처럼 코덱 내장 플레이어인데 특이한점은 내장된 코덱과 스플리터를 공개하여 따로 받아서 쓸 수 있다는 점입니다. ... 근데 2013년부터 내장코덱을 그냥 lavfilters를 채택하기로 해서 의미가 없습니다-_-
팟플레이어 - 이게 왜 들어가 있냐구요? 무지 좋거든요(...) FFMPEG기반으로 만들어진 프로그램인데 통합코덱을 쓰는 플레이어중에 lavfilters만큼 다양한 코덱 및 기능을 지원하는 플레이어가 없습니다. 설정창이 더럽게 불편해서 그렇지.... 퀵싱크, 쿠다 모두 지원합니다. 라이센스 문제로 몇몇기능은 지원하지 못하지만은 얘는 무려 avisynth란 인코딩할때 쓰는 프레임서버를 이용하여 정말 엄청난 기능을 쓸 수 있습니다. avisynth를 쓰기가 더~~~럽게 어렵다는건 일단 둘째 치구요-_-
곰플레이어 - 얘도 ffmpeg을 기반으로 만들어진건데........ 비교가 너무 됩니다. 어떻게 이렇게 차이가 있을 수 있지? 싶을정도로요.......... -_-;;
하악하악.. 양이 별거 아닐줄 알았는데 꽤 됩니다. ffmpeg ffmpeg하는데 그게 도대체 뭐냐는 분들은 다음편을 기다려 주세요 :)