이전 포스트: 2부 - 캡쳐 및 편집

캡쳐 및 편집을 마쳐 Huffyuv영상 - 무압축음성의 AVI를 만들어 놓았다면
여러분은 이제 마스터버젼의 소장용 영상을 만들어야한다.
마스터버젼의 영상은 무엇으로 하든 자유이다.
본인이 좋다고 생각되는 포멧으로 만들면 된다.
물론 마스터버젼을 만들지 않아도 상관은 없다.
그런데 여러 경험상 이전에 만들어두었던 영상을 나중에 반드시 또 쓰고싶은 경우가 생기는데 화질을 끌어올리고 싶다면 소장용 마스터버젼을 만들어두는것을 권장한다.
뭐 건너뛰어도 상관은 없다.
일단 오늘은 그것은 차치하고 동영상의 기본구조에 대해 살펴보고자 한다.

여기서는 본인의 취향을 기준으로 진행하도록 한다.
나는 H264코덱을 굉장히 좋아하기 때문에 H264 - AAC 코덱으로 인코딩해 mp4에다가 담아 마스터버젼을 완성한다. 하지만 언제나 이것을 고집하는것은 아니고 XBOX360콘솔의 경우 디지털출력을 AC3로 하기 때문에 이경우는 AC3사운드를 사용해 mp4가 아니라 mkv에다가 담아넣는다. 그도 그럴것이 mp4는 ac3를 담을수 없기 때문이다.

아마 인코딩에대해 처음인 사람은 담는다느니 mkv니 mp4라느니 하는것에 대해 물음표만 띄울텐데 이제 인코딩하기 전에 사전지식을 알아보도록 한다.

먼저 동영상파일의 구조에 대해 간략하게 살펴보도록 한다.

동영상파일은 크게 두부분으로 나뉘어져 있다.
첫번째는 RAWDATA,  두번째는 CONTAINER인데
어떤 인코딩툴이 전부 마찬가지이듯이 모든 영상은 안에 RAWVIDEO, RAWAUDIO를 담고있다. 이 RAWDATA들은 인코더가 만든 데이터들인데 코덱에 따라 데이터의 형식이 전부 다르다. 만약 H264로 인코딩했다면 RAW데이터는 avc 형태로 만들어지고 h264 혹은 264라는 형식의 확장자를 갖게된다. 확장자는 그냥 단순한 이름일뿐 모두 avc형태이다. AAC로 인코딩했다면 역시 aac라는 확장명을 가지는데 이것역시 확장명도 단순한 이름에 지나지 않는다.

이러한 rawdata들을 스트림이라고 부른다.
영상스트림, 음성스트림이라고 부르고 rawvideo, rawaudio라고도 부르기도 한다.
이 녀석들은 코덱으로 인코딩한 데이터의 원시데이터이다.
즉 영상을 mp4로 만들었는데 mkv로 바꾸고싶다
그럴경우엔 이 rawdata를 추출해서 단순히 mkv컨테이터에 담기만 하면 땡인것이다.
avi로 바꾸고싶은 경우는? 역시 rawdata를 추출해서 avi컨테이너에 담으면 땡이다.
보통 이런 지식을 모른다면 무식하게 또 재인코딩을 할것이다.
그럴 필요가 없는것이 우린 이미 인코더에서 rawdata를 손에 넣었기 때문에 컨테이너만 바꿔주면 땡이라는 것을 알수 있기 때문이다.

그러면 이제 컨테이너가 무엇인지 감이 잡힐 것이다.
컨테이너는 이러한 rawdata들을 담는 그릇과 같은 역활이다.
여기에는 비디오데이터, 오디오데이터가 들어가며 mkv같은 컨테이너의 경우는 chapter, subtitle, cover-image 등이 들어가기도 한다.
또한 컨테이너는 담겨진 비디오와 오디오데이터의 간략한 메타정보나 인코딩사양등의 정보를 기록해 보존해두는 역할도 한다.
아마 본적이 있을것이다. 동영상파일에 마우스커서를 가져다대면 비디오의 제목이라던지 인코더, 비트레이트, 코덱 뭐 이런 정보가 뜨는 모습을...
아니 KMP로 열면 파일정보에 이러저러 정보가 뜨는 모습을 보았을 것이다.
이것은 muxer라고 불리는 종류의 소프트웨어가 컨테이너에 비디오와 오디오를 담아 파일로 만들면서 파일에 기록해둔 메타정보이다.

그러면 이제 대충 인코딩할때 어떻게 해야하는지 감이 잡히는가?
바로 rawaudio 와 rawvideo 를 먼저 인코딩해서 muxer로 컨테이너에 담으면 된다.
물론 인코딩할때 rawdata로 만들어 달라는 옵션을 달아야한다.
megui의 경우는 x264에 RAWAVC, xvid에 RAWASP 로 인코딩하는 옵션이 달려있다.
물론 mp4box, mencoder, x264 등의 많이 알려진 H264 인코딩 소프트웨어들도 모두 이러한 기능을 지원하고 있다. 다만 이러한 소프트웨어들은 전부 커멘드라인 방식이라는 점이 치명적이긴 하지만 bat 배치파일로 만들어서 쓰면 상당히 유용하게 쓸수도 있다.
이건 나중에 살펴보도록 하고

이렇게 동영상파일의 구조에 대해 살펴보았다.
아마 많은 립퍼들도 그렇게 할거라 생각하지만 나 역시 인코딩할때 mp4, mkv로 바로 만들지 않고 rawdata로 인코딩한다.
인코더에서 rawdata로 인코딩해 비디오스트림, 오디오스트림을 만들어서 확보해둔 후에 muxer로 붙여쓰면 되기 때문이다.
avi컨테이너에 x264코덱으로 만든 영상들은 모두 이렇게 만들어지는 영상들이다.

다음 포스트: 4부 - 프레임의 기초와 H264에 대해

Posted by MOBIUS!
,