서론

굳이 알려 하지 않아도 다들 코덱이나 MP4, AVI, MOV와 같은 동영상 확장자 이름을 한 번쯤 들어봤을 것이다. 그냥 동영상을 실행하는 파일 종류이겠거니 생각했다면 이번 기회에 자세히 알아보자.

동영상 파일 그 자체라 생각할 수 있는 MP4, AVI 확장자들은 실제로는 비디오 데이터와 오디오 데이터를 담고 있는 보관함(Container)이라 할 수 있다. 한마디로 껍데기라는 뜻이다.

그럼 그 안에는 정확히 어떤 데이터를 어떻게 담고 있는 것일까??


동영상 확장자 - 컨테이너 포맷(Container Format)이란?

image

앞서 말한 것처럼 동영상 확장자는 오디오, 비디오 데이터인 스트림(Stream)을 하나 이상 가지고 있는 보관함 역할을 하며 이를 컨테이너 포맷(Container Format) 혹은 래퍼 포맷(Rapper Format)이라 부른다.

참고로 여기서 말하는 비디오는 동영상과 달리 소리가 없는 영상을 의미한다.

스트림(Stream)은 데이터, 패킷, 비트 등 일련의 연속성을 갖는 흐름/데이터를 의미하는데 간단히 컨테이너가 가지고 있는 비디오, 오디오 데이터라 생각하면 된다.

컨테이너가 가지고 있는 비디오, 오디오 스트림(Stream)들은 코덱(Codec)을 통해 가공된 데이터들이다. 왜 코덱을 통해 가공을 했을까?


코덱(Codec)이란?

image
출처 : https://www.muvi.com/blogs/best-video-codec-for-streaming.html


코덱은 코더(Coder)와 디코더(Decoder)의 앞글자를 딴 합성어로 용량이 큰 영상을 다른 곳으로 이동하거나 보관하기 쉽게 압축하고 후에 재생할 때 다시 복원하는 역할을 한다.

따라서 아날로그 신호나 스트림 데이터로 이루어진 비디오와 오디오를 압축된 부호로 변환하는 과정를 인코딩(Encoding)이라 하고 압축된 데이터를 본래의 아날로그 혹은 스트림 데이터로 복원하는 과정을 디코딩(Decoding)이라 한다.

코덱은 비디오를 인/디코딩 하는 비디오 코덱(H.264, AV1 등등)과 오디오를 인/디코딩하는 오디오 코덱(AAC, MP3 등등)으로 나뉘어져 있다. 동영상 컨테이너, 비디오 코덱과 오디오 코덱 종류에 대해서는 다른 포스트에서 자세히 다루었다.

또한 압축 방식에는 원본이 손상되는 손실 압축과 원본의 손실 없이 그대로 보전되는 무손실 압축이 있는데 일반적으로 데이터를 더 많이 압축하기 위해 손실 압축을 사용한다.


컨테이너(Container)의 역할

컨테이너에는 코덱에 의해 압축(인코딩)된 미디어, 오디오 스트림이 담겨있다. 그럼 컨테이너는 단순히 스트림을 담는 역할만 하는 것일까?

컨테이너는 스트림을 제어할 수 있는 다양한 정보들을 가지고 있다.

image
출처 : https://www.w3.org/

동영상 컨테이너가 스트림을 제어하는데 사용하는 정보들

  1. 동영상 촬영 당시, 또는 임의로 기록된 메타 정보(촬영 날짜, 위치 등)
  2. 컨테이너가 가지고 있는 스트림의 개수
  3. 동영상 전체 길이
  4. DVD에서 제공하는 메뉴와 자막 정보
  5. 인터넷을 통한 동영상 재생(스트리밍) 시 빠른 탐색이 필요한 스트림 위치 정보


물론 모든 컨테이너가 이와 같은 정보를 다 가지고 있지는 않다. 컨테이너도 스트리밍에 특화된 컨테이너, 확장성을 고려한 컨테이너, 저장에 특화된 컨테이너 등 용도에 따라 다양한 종류가 있으므로 어떠한 역할을 하는지 이해하고 넘어가면 될 거 같다.

컨테이너에 스트림을 담는 일련의 과정을 멀티플렉싱(Multiplexing), 줄여서 먹싱(Muxing)이라 부르며 다양한 종류의 코덱으로 인코딩된 스트림 정보를 담을 수 있다. 그로 인해서 같은 컨테이너 확장자이지만 완전 다른 코덱으로 인코딩된 스트림을 가지고 있을 수 있다.

컨테이너 비디오 코덱 오디오 코덱
MP4 컨테이너 H.264 비디오 코덱 ACC 오디오 코덱
MP4 컨테이너 DivX 비디오 코덱 MP3 오디오 코덱

하지만 컨테이너도 종류마다 담을 수 있는 코덱과 아닌 코덱이 있고 비디오 플레이어마다 실행시킬 수 있는 코덱과 아닌 코덱이 있다. 즉, 같은 컨테이너 포맷이어도 안에 들어있는 비디오, 오디오 스트림이 달라 미디어 플레이어가 따라 재생이 될 수도 있고 안될 수도 있다는 뜻이다.


결론

결국 이 4가지가 제대로 되어야만 동영상을 재생할 수 있다.

  1. 컨테이너 포맷(확장자)
  2. 비디오 코덱
  3. 오디오 코덱
  4. 이를 지원하는 미디어 플레이어

따라서 최적의 영상을 보기 위해서는 재생되는 환경에 알맞는 컨테이너와 코덱을 선택할 수 있어야 한다.