※ 반드시 먼저 읽어 주세요.

제 게시글에서 "동영상" "영상+소리"정보를 가진 파일을 가르킵니다.

단지 "영상" 정보만을 가진 파일을 말할 때는 "비디오", "비디오 파일", "비디오 스트림"이라고 말하겠습니다.

 

"비디오"란 용어을 저처럼 "영상"정보만을 가진 파일을 가르킬 때 사용하는 경우도 있고, "영상+소리"정보를 가지 파일을 말할때 사용하는 분도 있습니다.

이렇게 "비디오"란 용어 하나만으로도 충분히 글을 잘 못 읽고 혼동을 줄 가능성이 높기에 시작전에 용어 정리 부터 하는 것입니다.

 

 

 

1. 컨테이너 포맷이란?

  

동영상 파일을 말할 때는 "컨테이너 포맷", "비디오 코덱", 그리고 "오디오 코덱"에 대한 정보를 모두 이야기 해야 합니다.

파일 확장자만 이야기하면 되지 않나 싶죠. 왜 3가지 정보나 이야기해야 하는지 그 이유를 알아 보도록 하겠습니다.

 

 

1. 컨테이너 포맷의 개요

 

 

위 그림은 요즘 많이 돌고 있는 블루레이립 mkv 파일을 그림으로 그려 놓은 것입니다.

컨테이너 포맷은 "비디오"와 "오디오"를 담아두는 "상자"나 포장해 둔 "포장지" 그 쯤으로 생각하시면 충분합니다.

그림에서 "비디오"는 x264코덱으로 만들어졌고, "오디오"는 DTS코덱으로 만들어졌습니다.

그런데 "비디오"와 "오디오"가 따로 따로 존재한다면 동영상 파일이라 말할 수 없겠죠.

컨테이너는 이렇게 "비디오"와 "오디오"를 하나의 파일로 만드는 역할을 합니다.

우리가 보통 파일의 정체를 확인하는 방법은 확장자를 보는 방법입니다.

하지만 동영상을 판단할 때 확장자를 보아서는 단지 컨테이너 상자가 무엇인지 알수 있을 뿐이지, 상자 안에 들어 있는 "비디오"와 "오디오"가 어떤 코덱으로 만들어져 있는지 알수 없습니다.

 

동영상 파일의 확장자인 avi, mkv, asf, mov, vob, flv, mp4, mpeg, ts, ps들이 모두 컨테이너 포맷을 가르키는 말로 "파일 형식"이라고도 말합니다.

컨테이너에 포함된 "비디오"와 "오디오"를 만드는 과정을 "인코딩"이라고 하며, 코덱이라는 압축 프로그램이 담당합니다.

"비디오"와 "오디오"를 재생하는 과정을 "디코딩"이라고 하며, 이 또한 코덱이 담당합니다.

동영상이 재생이 안될 때는 "컨테이너 포맷"을 확인하는 것도 중요하지만 그보다 "비디오 코덱", "오디오 코덱"을 확인하는 것이 더 중요합니다.

그렇기에 동영상을 말할 때는 3가지 정보를 모두 말해야 하는 것입니다.

 

동영상을 구체적으로 표현하는 방법

DivX로 인코딩된 비디오와 MP3로 인코딩된 오디오가 AVI 컨테이너에 들어 있는 동영상

DivX 비디오와 MP3 오디오가 AVI에 들어 있는 동영상

DivX.avi 동영상 (이처럼 오디오 코덱은 생략하고 비디오만을 써서 파일명처럼 간단히 표현하기도 하지만 이경우는 아는 사람만 알게 되죠.)

 

 

여기까지 읽은 분들은 동영상 파일이 어떤 컨테이너 포맷을 사용했는지 쉽게 알수 있을 것입니다.

이제 좀 자세히 들여다 보죠.

* Audio Video Interleave 컨테이너 포맷은 avi라는 파일 확장자를 사용합니다. IMF처럼 글자의 첫글자를 따서 AVI 컨테이너라고 줄여 말하는 것입니다.

* Advanced Systems Format은 asf 확장자를 사용합니다. AVI처럼 첫글자를 따서 ASF 컨테이너라고 줄여 말합니다.

   동영상 파일중에 wmv라는 파일 확장자를 가진 것이 있습니다. wmv라는 컨테이너는 없습니다. 사실 이것은 ASF 컨테이너입니다.

* Matroska 컨테이너 포맷은 확장자를 mkv, mka 두가지를 사용합니다. 이 컨테이너 포맷을 말할 때 확장자를 그대로 따서 mkv 컨테이너라고 말하는

   것이 일반적이지만 사실은 잘못된 표현입니다.

* QuickTime File Format (QTFF)는 확장자를 mov를 사용합니다. 보통 퀵타임이라고 말하는 컨테이너 포맷입니다.

* MPEG Program Stream(MPEG-PS)은 확장자를 mpeg, mpg, ps를 사용합니다. MPEG-1, MPEG-2 코덱으로 만들어진 비디오가 들어갑니다.

   DVD-Video에 사용되는 VOB파일도 이 MPEG PS 컨테이너를 사용합니다.

* MPEG Transport Stream(MPEG-TS)은 확장자를 ts를 사용합니다.  MPEG-1, MPEG-2 코덱으로 만들어진 비디오가 들어갑니다.

   MPEG-PS와 똑같은 비디오가 들어가는 것을 알수 있습니다. 사용목적에 따라 두가지 컨테이너를 만들었습니다.

   디지털 방송에서 사용되는 형식으로 녹화파일에서 이 확장자를 사용하는 것을 볼수 있습니다.

* OGG 컨테이너를 사용한 비디오는 ogm, ogg, ogv등을 사용합니다. 오디오 파일인 ogg 때문에 헛갈리게 됩니다.

   오디오 파일은 Vobis코덱으로 만들어진 오디오가 OGG컨테이너에 들어 있는 형태로 그래서 단지 ogg라고만 하지 않고 ogg vobis라고 하는 것입니다.

 

 

 

 

2. 비디오 코덱, 오디오 코덱을 확인하는 방법

 

앞서 말했듯이 동영상에서 컨테이너 포맷은 확장자로 쉽게 알수 있지만, 비디오 코덱과 오디오 코덱은 파일명으로는 알수 없습니다.

프로그램을 이용해 비디오, 오디오 코덱을 확인하는 방법 대해 알아 보겠습니다.

 

첨부파일에서 DP MediaInfo를 다운받아 압축을 풀어 놓습니다. 무설치버전이라 설치하지 않고 더블클릭으로 실행합니다.

Open버튼을 클릭해 동영상을 열기합니다.

 

그림의 좌측에서 동영상의 "컨테이너 포맷", "비디오 코덱", "오디오코덱"을 알수 있습니다.

그림을 보시면 열기한 동영상의 컨테이너 포맷은 AVI이며, 비디오 코덱은 DivX 3 Low, 오디오 코덱은 MPEG-1 Audio Layer 3(줄여 MP3)입니다.

 

프로그램의 오른쪽 구획에서 그림처럼 비디오 파일의 "포맷"과 실제 비디오 파일을 만들때 사용한 "코덱"을 확인할 수 있습니다.

포맷과 코덱은 분명히 다른 개념입니다.

그림에서 보시면 비디오의 파일 포맷은 "MPEG-4 Visual"이며, DivX 3 코덱을 사용하여 만들었습니다.

"MPEG-4 Visual(=MPEG-4 Part 2)" 파일 형식을 따르는 코덱은 DivX3뿐만 아니라, Xvid, DivX 4, DivX5가 있습니다.

 


 

 

 

 

 

3. 플레이어의 동영상 지원 포맷 

 

컨테이너 포맷은 단지 "비디오"와 "오디오"를 하나로 묶는 역할을 합니다.

실제 재생은 코덱이라는 프로그램이 담당합니다.

만약 플레이어가 AVI, ASF, MOV, MKV, MPEG 컨테이너를 지원한다는 한다면, 플레이어가 그 컨테이너에서 "비디오"와 "오디오"를 꺼낼수 있다는 말이지, 그안의 "비디오"와 "오디오"를 재생할 수 있다는 말이 아닙니다.

실제 재생은 컴퓨터에 설치된 "비디오 코덱" "오디오 코덱"이 수행합니다.

코덱에서 재생능력만 때어낸 디코더라는 프로그램이 있습니다.

이 디코더를 플레이어가 내장한 경우에는 자신의 컴퓨터에 코덱을 설치하지 않아도 재생이 되는 것입니다.

그런데 컴퓨터에 코덱도 설치되지 않고, 플레이어에 내장 디코더도 없는 경우엔 재생에러가 발생합니다.

예를 들어 곰플레이어로 동영상 파일을 열었을때, 화면은 나오나 소리가 나오지 않는 경우가 있습니다.

이 경우는 비디오 코텍이나 디코더가 컴퓨터나 플레이어에 있기 때문에 화면을 출력되나, 오디오 코덱이나 디코더가 컴퓨터나 플레이어에 설치 되지 않았기 때문입니다.

무턱대고 통합코덱을 깔것이 아니라 코덱정보를 알아 그 동영상에 맞는 오디오 코덱이나 디코더를 설치해 주면 해결됩니다.

통합코덱의 설치는 어떤 코덱인지 모르니 모든 코덱을 깔아 재생되게 만드는 것으로, 프로그램간의 충돌 원인이 될 가능성이 높습니다.

 

 

컴퓨터와 달이 동영상을 지원하는 PMP, 디빅스 플레이어, 디빅스를 지원하는 DVD 플레이어, 동영상의 USB 호스트기능을 지원하는 TV등에서는 이미 지원하는 코덱이 정해져 있습니다. 추가 설치가 어렵죠.

기기들은 재생할수 있는 동영상의 정보를 메뉴얼에 명시합니다.

이때 지원하는 "컨테이너 포맷" "비디오 코덱" "오디오 코덱"에 대한 명확한 표시를 해야 하는데, 그렇지 못한 경우를 종종 보게 됩니다.

아래 표는 비교적 명확하게 명시를 한 모회사의 TV의 "동영상 지원 파일" 리스트입니다.

 

H264 코덱으로 만들어진 "비디오"는 mkv 컨테이너에도, avi 컨테이너에도 모두 들어 갈 수 있습니다.("h264.mkv"와 "h264.avi")

그러나 표를 보면 H264 비디오가 들어간 mkv는 재생하나 H264 비디오가 들어간 avi파일은 재생할 수 없음을 알 수 있습니다.

H264 비디오가 들어간 avi파일을 재생하려면 어떻게 해야 할까요?

곰 인코더, 팟 인코더 같은 프로그램으로 재인코딩하면 어떨까요? 물론 가능합니다. 그러나 화질은 변하게 되고, 시간도 오래 걸립니다.

그것보다는 avi 상자에서 H264 비디오를 꺼내어 mkv 상자에 넣는 변환을 하면 이 TV에서도 재생할수 있게 됩니다.

비디오를 건드리지 않고 컨테이너만 바꾸는 이런 변환은 원본 화질을 그대로 유지하게 됩니다.

 

VC-1 코덱으로 만들어진 "비디오"는 asf 컨테이너에도, avi 컨테이너에도 모두 들어갈 수 있습니다. ("VC-1.asf"와 "VC-1.avi")

그런데 표를 보면 이 TV는 VC-1 비디오가 들어간 asf파일은 재생하나 VC-1 비디오가 들어간 avi파일은 재생하지 못합니다.

이럴때도 마찬가지로 AVI에서 VC-1 비디오를 꺼내어 ASF에 넣으면 TV에서 재생할 수 있게 됩니다.

 

 

 

 

 

 

 

 

 

2. 동영상 변환의 이해

 

 

동영상의 변환은 크게 2가지가 있습니다.

1. 컨테이너 포맷만을 바꾸는 방법 (비디오와 오디오를 담아두는 상자만을 바꾸는 방법)

2. 비디오를 다른 코덱으로 트랜스코딩하는 방법 (보통 컨버터라는 프로그램들이 사용하는 방법)

   (정확히는 트랜스코딩이라고 말해야 하지만 보통 강좌에서 인코딩이라고 칭합니다.)

 

아래 글에서 이해를 돕기위해 편의상 컨테이너 포맷을 상자라고 바꾸어 말하기도 했습니다.
 

1. 원본의 화질과 음질을 유지하기 컨테이너 포맷만을 바꾸는 방법

 

디먹싱(Demux, Demultiplexing), 먹싱(Muxing, Multiplexing)

디먹싱은 컨테이너 포맷에서 비디오 데이터, 오디오 데이터등의 구성요소를 빼내는 과정을 말합니다.

먹싱은 비디오 데이터나, 오디오 데이터등을 특정 컨테이너 상자에 넣는 과정을 말합니다.

디먹싱, 먹싱은 상자에서 비디오, 오디오 데이터를 빼거나 넣는 과정일뿐, 상자안의 비디오, 오디오를 변화시키지 않습니다.

따라서 원본 화질과 음질을 그대로 유지합니다.

 

예 1.

DVD-Video에서 립한 흔히 디빅스라고 말하는 영화파일을 준비합니다.(그림에서 왼쪽편 파일)

이 AVI파일에서 DivX 비디오와 MP3 오디오를 추출합니다.(디먹싱)

추출된 DivX 비디오와 MP3 오디오를 MKV 상자에 넣습니다.(먹싱)

2가지의 avi 파일과 mkv 파일을 비교해 보면, 비디오와 오디오를 담아두는 상자만 다를뿐 실제 비디오 데이터와 오디오 데이터는 똑같습니다.

즉 바꾸어 말하면 화질과 음질은 똑같습니다. 또한 거꾸로 MKV파일을 디먹싱, 먹싱을 통해 AVI파일로 만들수 있습니다.

 


 

※ 실제 변환

DivX 비디오가 들어간 AVI파일은 재생하지만, DivX 비디오가 들어간 MKV파일은 재생하지 못하는 플레이어가 있다면 MKV 상자에서 DivX 비디오를 꺼내 AVI 상자에 넣으면 재생 문제가 해결됩니다.

 

※ 참고 사항 

AVI에서 비디오, 오디오를 꺼내 MKV 상자에 넣는 디먹싱, 먹싱 과정은 "mkvmerge GUI"를 이용하면 자동으로 됩니다.

하지만 H264 비디오의 경우 AVI에 넣었을때 약간 문제가 있습니다. 그래서 MKV에서 AVI로 바꾸는 과정은 상당히 까다롭습니다.

 
 

 

예 2.

DVD 타이틀의 본편 영화는 VOB이라는 컨테이너 상자에 담겨있습니다. (MPEG-PS은 확장자를 mpeg, mpg를 사용하지만, DVD에서는 vob을 사용합니다.)

DVD 타이틀에서 MPEG-2 Video(=MPEG2) 비디오 파일과, AC-3 오디오 파일이 들어가 있는 VOB파일을 립핑합니다.

이 VOB파일에서 MPEG-2 Video 파일(확장자 .m2v)과 AC-3 오디오 파일(확장자 .ac3)을 디먹싱한뒤, MKV파일로 먹싱합니다.

이렇게 만들어진 MKV파일과 VOB파일은 똑같은 비디오 데이터와 오디오 데이터를 가지기에 화질과 음질은 똑같습니다.

 


 
  

참고 사항 

사실 디먹싱, 먹싱과정을 따로 나누어 설명했지만, MKVMerge GUI라는 프로그램은 VOB을 MKV로 만드는 과정을 한번에 자동으로 실행합니다.

 

 

 

2. 파일크기를 줄이기 위한 트랜스코딩 방법

 

트랜스코딩이란 특정 코딩방식의 파일을 다른 코딩방식으로 바꾸는 것을 말합니다.

흔히 변환이라고도 말하고 인코딩으로 칭하기도 합니다.(바닥 인코더, 곰 인코더, 팟 인코더에서 사용하는 방법)

(인코딩이라 말하는 것은 잘못된 표현입니다. 같은 코덱으로 재인코딩, 다른 코덱으로 트랜스코딩한다고 해야 합니다.)

 

흔히 디비디립이나 블루레이립 파일을 만드는 과정이 트랜스코딩을 이용한 방법인데 그림을 통해 알아보겠습니다.

 

예 : 디비디립

DVD 타이틀에서 본편영화가 담겨있는 VOB파일을 추출합니다.

VOB 상자에서 MPEG-2 Video를 꺼내어 DivX코덱으로 인코딩합니다.

VOB 상자에서 DTS나 AC-3 오디오를 꺼내어 MP3코덱을 이용해서 변환합니다.

만들어진 DivX 비디오 파일과 MP3 오디오 파일을 AVI 상자에 넣습니다.(이때는 먹싱과정이 필요합니다.)

이렇게 "비디오" "오디오"를 다른 코덱으로 변환하는 트랜스코딩은 많은 시간을 요구합니다.

 

디비디립 파일을 만드는 과정을 나누어서 설명했지만, 사실 DVD를 AVI로 만들어 주는 프로그램들은 사용자가 처음에 셋팅값을 지정해 주면 위 과정이 자동으로 실행됩니다.

 


 
 

이렇게 비디오와 오디오를 트랜스코딩방법은 화질과 음질을 어느정도 보장하면서 파일 크기를 많이 줄이고자 할때 사용합니다.

위에서 설명한 컨테이너를 바꾸는 방법에서 비디오, 오디오 데이터를 변환시키는 과정이 더 추가된 것입니다.

 

DVD 타이틀, 블루레이 타이틀에서 비디오와 오디오를 빼내면 파일사이즈가 아주 크게 됩니다.

이때 파일 크기를 줄여, 디비디립이나 블루레이립 파일을 만들때 이런 과정을 거치게 됩니다.(모든 과정을 설명하기보다 중심만 말하는 것입니다.)

이러한 방법은 설정에 지식이 필요하며, 비디오와 오디오를 모두 변환하기에 작업시간이 아주 오래 소요됩니다.

동영상을 네이버 동영상이나 유투브같은 곳에 올릴 때도 이렇게 컨테이너, 비디오, 오디오를 모두 바꾸는 방법을 사용합니다.

 

 

 

3. 비디오는 유지하고, 오디오만 변환하는 방법

어떤 동영상 파일에서 비디오와 오디오를 모두 변환하는 2번의 방법은 시간이 오래 걸립니다.

하지만 비디오는 그대로 두고 오디오만 변환한다고 한다면 시간은 많이 단축될 것입니다.

(오디오의 변환 시간은 짧으나, 비디오의 변환은 상당한 시간이 걸립니다.)

 

 

위 그림과 같은 변환은 아래와 같은 작업과정을 통해 이루어 집니다.

① MKV 컨테이너에서 x264 비디오와 DTS 오디오를 디먹싱하여 꺼냅니다.

② 꺼낸 DTS 오디오를 AC-3(돌비 디지털)로 변환합니다.

③ x264 비디오와 변환된 AC-3오디오를 다시 MKV 컨테이너에 먹싱하여 집어 넣습니다.

(이 과정에서 MKV대신 AVI 컨테이너나 MP4 컨테이너에 넣어도 됩니다.)

 

 

 

4. 결론

사용자의 필요에 따라 어떤 변환 방식을 사용할지 정해야 합니다.

하지만 컨테이너, 비디오 코덱, 오디오 코덱에 대한 이해가 없다면, 최선의 변환방법을 찾을 수 없을 것입니다.

예를 들어 컨테이너만 바꾸면 될 상황에서 불필요하게 바닥 인코더를 이용하여 원본 화질을 크게 바꿀수도 있는 것입니다.

 

변환 이유야 여러가지가 있겠지만 작업시간이 적고 원본의 화질과 음질을 되도록 유지하는 방법을 선택해야 할 것입니다.


출처 - http://blog.naver.com/hcwha?Redirect=Log&logNo=70095361247



'Project > Streaming Server' 카테고리의 다른 글

Streaming - 인터넷 방송  (0) 2012.06.11
Streaming - iptv  (0) 2012.06.11
Codec 개요  (0) 2012.06.11
HTTP를 사용하는 라이브 스트리밍  (0) 2012.06.11
Streaming Server - 스트리밍이란  (0) 2012.06.09
Posted by linuxism
,