*적용중인 도장
동영상 인코딩 A to Z
예전부터 동영상 인코딩은 어려운 존재였으나, 과거 PDA에서 동영상을 보거나 컴퓨터 사양이 안돼서 인코 딩을 접하는 사람들은 많았습니다. 한국에서는 바닥(Badak)이라는 Mencoder 프론트엔드 프로그램이 나오면 서 ‘쉬운’인코딩이 가능해졌고 이후 수많은 인코딩 프로그램들이 출시되면서 더욱 많은 사람들이 인코딩을 하 고 있지요. 하지만 이 동영상 인코딩은 결코 만만하지 않지요. 많은 사람들이 조금 더 나은 화질로 인코딩을 하려다가 그 수많은 정보에 좌절하며 대충대충 인코딩을 하면서 왜 나는 저렇게 안 될까? 라는 생각을 가지기 도 합니다. 동영상 인코딩은 CPU를 쳐묵쳐묵 하면서도 시간은 오래 걸리니, 인코딩이 제대로 안되면 속상하기 도 하지요.
그래서 관련업계에서 일하는 것도 아니고, 개발자도 아닌 제가(!?) 한번 써보겠습니다. 저는 그저 취미로 TV 영상들을 인코딩을 해서 소장하는 아마추어이고 따라서 틀린 정보가 있을 수도 있습니다. 지적 감사히 받겠습 니다 :)
동영상 인코딩에 필요한 배경지식
동영상이란 무엇일까요? 사진을 여러 장 놓고 연속적으로 보여주면 그게 동영상이지요. 네 참 쉽죠? 하지만 인코딩을 하려고 들면 뭐 이리 복잡한지....... 쉬우면서 제대로 된 인코딩을 위한 부분만 집어보겠습니다.
1. 컨테이너 ? 사람들이 참 많이 간과하고 있는 것이 이 컨테이너라는 녀석입니다. 컨테이너가 뭐냐구요? 지금 떠오르시는 그 컨테이너를 생각하면 맞습니다. 이 컨테이너 규격 안에 영상파일과 음성파일이 합쳐져서 만들어지는 게 동영상 파일입니다. 네 그렇습니다. 쉽게 이야기하면 확장자죠. 근데 인터넷을 돌아다니다 보면 이런 글들이 많이 있습니다. ‘Q: MKV가 끊겨요 A: AVI로 바꾸세요.’, ‘MKV는 고화질 영상 코덱(!!?)입니다.’ 이는 컨테이너에 대한 이해가 부족하기 때문에 생기는 일입니다. 컨테이너는 영상과 음성을 담아두는 그릇입 니다. 컨테이너에 따라서 영상이 끊기거나 할 수는....... 있군요.(예전 곰플레이어-_-) 이러한 컨테이너 안에 영 상파일과 음성파일이 담겨져 있으니 동영상플레이어에서는 이를 다시 분리를 해줘야하는데, 이때 필요한 것이 splitter라는 녀석입니다. 근데 과거 곰플레이어는 이 MKV컨테이너에서 동영상을 제대로 분리해내지 못했고, MKV에 대한 오해를 한국에 퍼뜨린 범인이 되겠습니다.
이러한 동영상 확장자는 사람들이 주로 쓰는 것만 뽑자면 아래와 같습니다.
* AVI ? 마이크로소프트사에서 만든 규격으로, 1992년도에 발표된 무지 오래된 규격입니다. 오래된 녀석이기 때문에 확장성이 부족하고, H.264코덱이 들어갈 수 있긴 하지만 AAC음성은 못 들어가고 탐색에도 문제가 될 수 있기 때문에 솔직히 이제는 보내드려야 할 때가 된 규격입니다.
* WMV ? 마이크로소프트에서 스트리밍을 위해서 만든 규격으로, 들어갈 수 있는 코덱은 Windows media 계열 코덱만 삽입이 됩니다.
* MP4 ? MP3같은 표준규격이며, H.264코덱이 들어가는 공식 포맷으로 영상은 MPEG part2(DIVX)와 MPEG part 10(H.264)을 지원하고 음성은 MP3와 AAC를 지원합니다.
* MKV ? 러씨아에서 만든 오픈소스 컨테이너로 확장성이 매우 넓습니다. MKV안에 영상 파일을 두 개 넣어 서 골라서 보게 할 수도 있고(예를 들자면 아이폰용 영상과 PC용 영상을 넣어서 아이폰에서는 저화질로, PC에 서는 고화질로 보게 할 수도 있다는 것) DVD처럼 챕터기능을 넣을 수도 있습니다. 단점은 TV나 플스같은 기 기에서 지원이 안 될 수도 있다는 것.
2. 비디오 코덱
코덱이란 영상이나 음성을 어떤 방법으로 압축을 할 것인가에 대한 규격입니다. 압축파일을 생각하시면 쉽 습니다. 압축률은 킹왕짱이나 느린 7zip, 빠르고 범용성이 좋은 zip, 적당히 느리고 적당히 압축률이 좋은 RAR등등. 동영상도 마찬가지로 수많은 규격들이 있습니다. 이거 다 집어보자면 양이 너무 늘어지고, 주로 쓰 이는 딱 두 개만 보겠습니다.
* MPEG4 part2(DIVX=XVID) - 1999년에 공개된 표준 동영상 규격으로, 흔히 DIVX영상이라고 불리우는게 이 MPEG4 part2를 기반으로 DIVX라는 회사에서 만든 코덱입니다. 지금이야 저 사양, 저 화질을 위한 코덱 이라고 불리지만 1999년 공개당시에는 혁신적인 고화질 코덱이었습니다. 언젠가 지금은 고화질을 위한 코덱 이라고 불리는 H.264도 이러한 길을 걷겠지요.
* MPEG4 part10(H.264/AVC1) - 같은 비트레이트 내에서 XVID는 비교도 안될 만큼 높은 화질을 자랑하 는 차세대 HD 코덱경쟁에서 승리한 H.264 코덱입니다. 이때 H.264와 경쟁한 코덱들은 VC-1(현재 WMV9코 덱이라고 불리움)과 VP7코덱이 있습니다. VC-1은 MS에서 야심차게 밀었고 HD-DVD에서 표준으로 들어갔던 코덱이나 VC-1도 망했고 HD-DVD도 망해버렸죠....... 그래서 현재는 잘 쓰이지 않으나, HD 스트리밍에서는 아 직 꽤나 많이 쓰이고 있습니다. VP6은 소규모기업에서 개발한 탓에 표준경쟁에서 일치감치 밀렸으나, 스트리 밍용으로서는 성능이 딸리는 것도 아니어서 현재 플래시 파일1, 유투브에 들어가는 기본 코덱이고 구글에 인수 된 뒤 VP8이라는 이름으로 약간의 개량과 함께 오픈소스로 바뀌었습니다. 그리고 HTML5에서 기본 재생코덱 이 되기 위한 2차전을 H.264와 펼치고 있지요.
아이고 쓰다 보니 설명이 늘어지네요.......
아무튼 H.264는 화질을 위해 디코딩/인코딩속도를 희생했고, 이 때문에 이 코덱이 퍼질 당시(2000년대 중 반) 더럽게 무거운 코덱이라고 기피 당하는 일도 있었지만 지금은 2013년입니다. 현재 PC는 물론이고, 모바 일 쪽에서도 웬만한 H.264영상은 다 돌려버리고 있어요. 따라서 우리는 압축 효율이 좋은 H.264를 버리고 XVID를 쓸 필요가 없습니다. 정 사양이 딸린다 싶으면 H.264에서 프로필(글을 읽다보면 설명이 나올 겁니 다.)을 낮게 잡아줘도 되고, VC-1로 인코딩해도 됩니다.
3. 오디오 코덱
동영상에서 영상 말고 오디오도 당연히 압축을 하기 때문에 코덱이 존재합니다. 널리 알려진 MP3나 OGG 는 물론이고 AAC, AC-3, DTS, AAC-HE, WMA, 2012년 말 공개된 Opus등 여러 코덱이 존재합니다만 일반 적으로 쓰이는 건 MP3, AAC(일본 HDTV 표준), AC-3(한국 HDTV 표준), OGG(유투브에서 사용)이며, 블루 레이 등에서 쓰기위해 DTS로 인코딩하는 경우도 있습니다.
4. 인터레이스와 프로그레시브
인코더들을 빡치게(.......) 하는 주범이 인터레이스와 프로그레시브의 차이입니다. 일단 인터레이스와 프로그
레시브의 차이점을 알아야하는데, 이거 설명을 하자면 따로 글을 하나 만어야 하기 때문에 개념설명은 위키
백과로 때웁니다.
https://ko.wikipedia.org/wiki/비월_주사_방식
https://ko.wikipedia.org/wiki/순차_주사_방식
쉽게 이야기해서 인터레이스(=비월주사=i)는 아날로그 방식이고 프로그레시브(=순차주사=p)는 디지털 방식이 라는 이야기 입니다. 근데 뭐가 문제냐 하면 인터레이스방식으로 만들어진 영상을 프로그레시브방식의 화면에 서 봐야 한다는 점입니다. 이것을 디-인터레이스라고 하는데 인터레이스를 프로그레시브로 변환한다는 이야기 입니다. 인터레이스방식은 홀 수줄, 짝수 줄로 나눠서 영상을 내보내는데 아무리 눈의 착시를 이용한다고 해도 홀수줄과짝수줄은시간차이가있기때문에2 영상에줄이가있는것을볼수있는것입니다.이는원본영상
1 플래시9부터 H.264도 지원
2 프로그레시브를 인터레이스로 변환하면 시간차가 같지만, 방송용은 아예 인터레이스 전용카메라로 찍기 때문에 시간
즉 녹화한 영상을 그대로 볼 때는 아무런 문제가 없습니 다. 왜냐하면 우측의 스샷처럼 동영상 파일 안에 이영상 은 인터레이스 영상이고, 사실 원본은 프로그레시브인데 인터레이스로 변환해서 프레임이 중복되어서 들어가 있고 어쩌고 하는 정보가 들어가 있기 때문에 동영상플레이어 에서 이를 읽어 들여 알맞은 화면을 보여주기 때문입니 다.
근데 인코딩프로그램들은 멍청해서 이 영상이 무슨 영
상인지 알아먹지도 못하고3 따로 필터를 넣어주지 않으면
디인터레이스가 되지 않는 채로 인코딩이 되어서 줄이 좍
좍 가있는 영상이 나오게 됩니다. 그나마 이 정도는 요즘
은 쉽게 되는데 문제는 24프레임 카메라로 촬영한 영상이
골치 아파 집니다. 24프레임을 29.97프레임으로 만들어
서송출을해야돼서4 중간에뻥카프레임을만든데다가
일반적인 디인터기레이스 기능은 시간차가 다른 인터레이
스영상을 위해서 만들어진 거라 이 영상에 적용시키면 안
됩니다. 아예 송출할 때는 프로그레시브 영상 그대로 송
출하고 TV에서 알아서 인터레이스로 변환시키라고 파일
내부에 명시만 해놓은 영상도 있지만, 이런 방식은 EBS에서만 쓰이고 있습니다. 그나마 다행인 점은 이러한
텔레시네 영상은 소수만 존재한다는 것.
아무튼 그래서 인코딩시에 이 영상이 인터레이스 영상인지, 프로그레시브 영상인지를 봐야 합니다.
5. 프레임
1초에 몇 장의 사진이 움직여 영상을 보여 줄 것인지에 대한 규격으로 일반적으로 24p, 30p, 60p, 60i이
쓰입니다. 대체적으로 인코딩시 원본의 프레임을 그대로 유지하는 것이 가장 좋고, 임의로 프레임을 변경 할 시에는 화면이 뭔가 부자연스러운 현상이 일어납니다.
인터레이스 영상의 경우 디인터레이스 과정에서 프레임이 변경되게 됩니다. 즉, 60i를 60p(정확히는 59.94) 로 변경 할 것인지 30(29.97)로 변경 할 것인지를 선택해야하는데 두 개의 차이는 프레임을 합치느냐 늘리느 냐의 차이입니다. 30p로 만든다면 홀짝 프레임을 하나로 합쳐서 blur를 먹여 줄을 없애는 방법(blend)이 적용 되고 60p로 만든다면 홀, 짝 각각 프레임을 각각 놔두고 빈공간은 사진을 늘려서 채우는 방법(bob)을 쓰는 데, 사양만 된다면 당연히 후자(bob)쪽이 좋습니다. 30p로 만들 경우 1/2프레임을 버린다고 보면 되는데 위 에서 설명했듯이 일반적인 HDTV의 홀, 짝 프레임은 시간정보가 다르기 때문에 화면이 끊겨 보임을 느낄 수 있습니다. 특히나 스포츠영상이나, 걸그룹같은 역동적인 화면변환이 일어나는 영상에서는 더욱 심하게 느껴집 니다.
차가 생김
3 TMPGEnc VideoMasteringWorks같은 전문 프로그램은 인지함
4 이를 텔레시네 영상이라고 합니다.
이제 H.264에 대해서 조금 더 자세히 알아봅시다.
위의 사항이 동영상을 인코딩 하기 전에 필수적으로 알아야 하는 사항들입니다. 어렵다고 느껴지실 수 있지 만 위의 사항을 무시하고 대충 인코딩을 하면 영상이 개차반이 나는 겁니다. 이번에는 H.264에 대해서 간략 하게 설명을 할 겁니다. 이 부분은 XVID로 인코딩하거나 VC-1로 인코딩 하려는 사람들에게는 그다지 필요가 없을 겁니다.
1. H.264? X264? 차이가 뭔가요?
H.264는 표준입니다. 하지만 사용료를 내야하는 표준입니다. 이에 따라 사용료를 내지 않는 H.264인코딩을
위해서 만들어진 코덱이 X264입니다. 따라서 디코딩(=재생)시에는 X264나 H264나 가리지 않고 재생을 해 줘야 합니다. 하지만 인코딩 시에는 다릅니다. 각 회사에서 H264를 가지고 자사에 맞게 약간 변형을 하여서 수많은 H264 인코딩 코덱들이 존재하고 때문에 전문 유료 인코딩 프로그램의 경우 옵션이 제각각 다 다릅니 다. 그러면 X264보다는 H264코덱이 더 좋은 거 아니냐는 물음이 나올 수 있는데 아닙니다. X264는 H264의 수많은 인코딩 코덱 중에서 최상위권에 드는 훌륭한 인코딩 코덱입니다. 단점이라면 옵션이 지나치게 세세한 정도일까요? 이 때문에 X264는 세부설정을 안 만지고도 괜찮은 영상이 나올 수 있도록 프리셋을 지정해 놓았 습니다.
2. 프로필? 레벨? 이게 뭐지요?
H264는 공개되었을 때 놀라운 화질 대비 압축률을 보여주었지만 그만큼 높은 시스템 자원을 소모하였습니
다. 그래서 프로필과 레벨에 따라서 옵션에 제한들 두어서 디코딩시 하드웨어 부담이 최소화 되도록 하였습니 다.
2-1 프로필은 총 4가지로 나뉘우며 2013년 현재는 10bit영상을 위한 프로필이 추가되었습니다.
* Baseline Profile (BP) : 화상회의 및 모바일 용도의 프로파일
* Main Profile (MP) : 방송용 영상과 저장용 영상을 위한 프로파일
* Extended Profile (XP) : Network Streaming 목적의 프로파일
* High Profile (HiP) : 방송용 영상과 ODD 저장을 위한 HD용 프로파일
초창기의 휴대용 기기들은 BP까지밖에 지원을 못하였으나 현재 MP 정도는 대부분이 지원하고 HiP도 어거
지로 잡아 돌리는 수준까지 왔습니다.
2-2 레벨은 1부터 5까지 존재하며 해상도와 비트레이트, 그리고 프로필에 따라 세부사항이 변합니다. 이
에 대한 자세한 설명은 영문 위키에 나와 있습니다. 링크
모바일기기나 DXVA 가속을 위한 GPU등에는 이러한 프로필과 레벨에 대한 한계사항이 명시되어있고, 한계 사항 밑으로는 모두 재생이 가능하지만 위로는 재생이 불가능합니다.(하지만 제조사에서 일부러 한계치를 낮게 잡은 경우에는 그 이상이 돌아가기도 합니다.)
문제는 이러한 레벨에 강제성이 없어서 꼭 저 사항을 지키지 않아도 정보를 변경 할 수 있다는 겁니다. 예 를 들어 1080p영상은 레벨이 4쪽에 가있어야 하지만, 강제로 레벨1로 만들 수도 있습니다.5 이렇게 레벨1로 가 있어도 실제 규격은 4이기 때문에 레벨1만 지원하는 기기에서는 이를 재생하지 못하겠죠? 그래서 인터넷 에 보면 파일의 헤더를 수정해서 이 정보를 수정하는 사람들이 있는데, 큰 의미가 없습니다. 적당한 정도라면 위에 써놓았듯 제조사에서 한계치를 조금 낮게 잡는 경우에는 영상이 돌아가지만 애초에 인코딩 옵션을 이상 하게 잡아서 레벨이나 프로필이 확 튀었을 때 헤더로 이를 수정한다 하더라도 재생이 안 될 확률이 높기 때문 입니다. 특히나 프로필을 수정 할 시에는 거의 안 된다고 봐야겠죠.
따라서, H264로 진행할 시 프로필만 손대고 레벨은 자동으로 들어가게 하는 게 가장 좋습니다.
5 프로필은 강제성이 있습니다.
제온으로 인코딩 중인데 주옥같은 글 고맙습니다. 많은 도움이 되었네요^^추천!