사람이 입체감을 느끼는 이유는 왼쪽 눈과 오른쪽 눈이 약간의 차이를 두고 떨어져 있기 때문입니다.

예를 들면 아래와 같이 빨간 벽과 파란 벽의 경계면 바로 앞에 서 있는 나무를 볼 때 왼쪽 눈에는 파란 벽 앞에 나무가 있는 것처럼 보이고

오른쪽 눈에는 빨간 벽 앞에  나무가 있는 것처럼 보이게 됩니다.

이렇게 두 눈이 바라보는 각도상의 차이로 인해서 시차가 발생하고 입체감을 느끼게 되는 것이죠.


3D 영상의 원리도 이와 동일합니다. 먼저 2대의 카메라가 각각 왼쪽 눈의 위치와 오른쪽 눈의 위치에서 촬영을 합니다.

이렇게 쵤영된 2개의 영상 중 왼쪽 카메라가 촬영한 영상은 왼쪽 눈에만, 오른쪽 카메라가 촬영한 영상은 오른쪽 눈에만 보이도록 만들어서

입체감을 느끼게 합니다. FPR(편광)이나 셔터글래스 등 방식은 여러가지가 있지만 이러한 기본 원리는 모두 똑같습니다.


블루레이 3D 디스크에도 역시 왼쪽과 오른쪽에서 촬영한 2개의 영상이 포함돼 있습니다.

하지만 AVC, VC-1, MPEG-2 등으로 압축(인코딩)되는 기존의 2D 디스크와는 다르게 MVC라고 부르는 AVC 확장 표준을 사용해서 압축됩니다.

MVC는 왼쪽과 오른쪽 중 기준이 되는 영상은 AVC로 압축하고 이 기준 영상을 참조해서 나머지 한 쪽 영상을 압축하는 방식입니다.

기준이 되는 영상을 Base View라고 하는데 보통은 왼쪽 영상이 Base View가 되지만 가끔은 오른쪽 영상이 Base View가 될 때도 있습니다.

기준 영상을 참조해서 압축되는 다른 한 쪽 영상은 기준 영상 없이는 디코딩이 불가능하기 때문에 Dependent View라고 부릅니다.


이제 본론으로 들어가서 블루레이 3D 영상의 인코딩 과정을 정리해 보겠습니다.

블루레이 3D 영상의 왼쪽과 오른쪽 영상을 디코딩해서 Side by Side, Over under, Frame Sequential 등의 방식으로 재인코딩하는 과정입니다.

처음 블루레이 3D 타이틀이 발매되기 시작했을 때에는 인코딩 방식도 복잡하고 속도도 아주 느렸지만 요즘엔 아주 간단하고 빨라졌습니다.



1. eac3to를 이용한 타이틀 구성 확인과 영상, 음성, 자막 등 추출

블루레이 3D 뿐만 아니라 블루레이 2D 인코딩에도 자주 쓰이는 툴입니다. (프리웨어라서 쉽게 구할 수 있습니다.)

블루레이 디스크가 삽입된 드라이브 또는 블루레이 디스크를 립핑한 폴더 경로를 입력하면 플레이 리스트 정보가 표시됩니다.

아래는 m:에 iso파일을 마운트해 놓고 eac3to에서 m:를 지정한 경우입니다.

C:\...\eac3to>eac3to m:

1) 00001.mpls, 00001.m2ts, 1:35:38

   - Chapters, 16 chapters

   - h264/AVC  (left eye), 1080p24 /1.001 (16:9)

   - h264/AVC (right eye), 1080p24 /1.001 (16:9)

   - DTS Master Audio, English, multi-channel, 48kHz

   - AC3, English, multi-channel, 48kHz

   - DTS Master Audio, French, multi-channel, 48kHz

   - AC3, Spanish, multi-channel, 48kHz

   - AC3, English, stereo, 48kHz

   - AC3, English, stereo, 48kHz


플레이 리스트가 1) 번 하나 뿐이고 하나의 m2ts 파일로 구성되어 있음을 알 수 있습니다.

하지만 플레이 리스트가 여러개의 m2ts 파일로 구성되는 경우도 가끔 있기 때문에 플레이 리스트의 구성 정보를 꼭 확인해야 합니다.

여러개의 m2ts 파일로 구성되는 경우 아래와 같은 형태로 표시됩니다.

1) 00006.mpls, 00001.m2ts+00002.m2ts+00003.m2ts+00004.m2ts+00005.m2ts, 1:42:43


다음으로 아래와 같이 플레이 리스트 1)을 추가로 입력하면 해당 플레이 리스트 1)의 트랙 리스트가 표시됩니다.

C:\...\eac3to>eac3to m: 1)

M2TS, 2 video tracks, 6 audio tracks, 9 subtitle tracks, 1:35:38, 24p /1.001

1: Chapters, 16 chapters

2: h264/AVC  (left eye), 1080p24 /1.001 (16:9)

3: h264/AVC (right eye), 1080p24 /1.001 (16:9)

4: DTS Master Audio, English, 5.1 channels, 24 bits, 48kHz

   (core: DTS, 5.1 channels, 24 bits, 1509kbps, 48kHz)

5: AC3, English, 5.1 channels, 640kbps, 48kHz

6: DTS Master Audio, French, 5.1 channels, 16 bits, 48kHz

   (core: DTS, 5.1 channels, 16 bits, 1509kbps, 48kHz)

7: AC3, Spanish, 5.1 channels, 640kbps, 48kHz

8: AC3 Surround, English, 2.0 channels, 192kbps, 48kHz

9: AC3 Surround, English, 2.0 channels, 192kbps, 48kHz

10: Subtitle (PGS), English

11: Subtitle (PGS), English

12: Subtitle (PGS), French

13: Subtitle (PGS), Spanish

14: Subtitle (PGS), French

15: Subtitle (PGS), Spanish

16: Subtitle (PGS), English

17: Subtitle (PGS), English

18: Subtitle (PGS), Spanish


표시된 트랙 리스트들을 보고 추출 또는 인코딩하려는 음성, 자막 트랙을 선택해서 각각의 출력 위치를 지정해 주면 추출, 인코딩이 진행됩니다.

여기에서는 2: 3: 번 트랙의 좌, 우 영상과 4: 번 트랙의 DTS-core 스트림을 각각 E:\bluray 폴더에 추출해 보겠습니다.

C:\...\eac3to>eac3to m: 1) 2: E:\bluray\left.h264 3: E:\bluray\right.h264 4: E:\bluray\bluray.dts -core

M2TS, 2 video tracks, 6 audio tracks, 9 subtitle tracks, 1:35:38, 24p /1.001

1: Chapters, 16 chapters

2: h264/AVC  (left eye), 1080p24 /1.001 (16:9)

3: h264/AVC (right eye), 1080p24 /1.001 (16:9)

4: DTS Master Audio, English, 5.1 channels, 24 bits, 48kHz

   (core: DTS, 5.1 channels, 24 bits, 1509kbps, 48kHz)

5: AC3, English, 5.1 channels, 640kbps, 48kHz

6: DTS Master Audio, French, 5.1 channels, 16 bits, 48kHz

   (core: DTS, 5.1 channels, 16 bits, 1509kbps, 48kHz)

7: AC3, Spanish, 5.1 channels, 640kbps, 48kHz

8: AC3 Surround, English, 2.0 channels, 192kbps, 48kHz

9: AC3 Surround, English, 2.0 channels, 192kbps, 48kHz

10: Subtitle (PGS), English

11: Subtitle (PGS), English

12: Subtitle (PGS), French

13: Subtitle (PGS), Spanish

14: Subtitle (PGS), French

15: Subtitle (PGS), Spanish

16: Subtitle (PGS), English

17: Subtitle (PGS), English

18: Subtitle (PGS), Spanish

s10 Extracting subtitle track number 10...

a04 Extracting audio track number 4...

a04 Extracting DTS core...

a04 Creating file "e:\bluray\bluray.dts"...

s10 Creating file "e:\bluray\bluray.sup"...

Video track 2 contains 137567 frames.

Video track 3 contains 137568 frames.

Subtitle track 10 contains 853 captions.

eac3to processing took 9 minutes, 49 seconds.

Done.


-core 옵션은 DTS-HD MA 트랙에서 core 스트림만 추출하는 옵션입니다. 이 외에 자세한 eac3to 옵션은 아래 링크를 참고하시면 됩니다.

http://en.wikibooks.org/wiki/Eac3to


2. AVS 스크립트 작성

블루레이 3D 영상의 디코딩에는 DGMVCSource 소스 필터를 사용하겠습니다.

(DGMVCSource의 자세한 사용법은 링크를 참조하세요.)

먼저 Side by Side 영상의 인코딩 스크립트입니다.

source=DGMVCSource("E:\bluray\left.h264", "E:\bluray\right.h264", view=0, frames=137567, hw=0)

left=selecteven(source)

right=selectodd(source)

stackhorizontal(left,right)

lanczosresize(1920,1080)


다음은 Over Under 영상의 인코딩 스크립트입니다.

source=DGMVCSource("E:\bluray\left.h264", "E:\bluray\right.h264", view=0, frames=137567, hw=0)

left=selecteven(source)

right=selectodd(source)

stackvertical(left,right)

lanczosresize(1920,1080)


마지막으로 Frame Sequential 영상의 인코딩 스크립트입니다. 아래와 같이 작성합니다.

DGMVCSource("E:\bluray\left.h264", "E:\bluray\right.h264", view=0, frames=137567, hw=0)


3. x264 인코딩

이렇게 만들어진 AVS 스크립트를 적당한 이름으로 저장하고 인코딩합니다.

여기에서는 Half Over Under 방식으로 스크립트를 작성하고 mvc.avs 로 저장해서 인코딩 하겠습니다.

cmd 창을 열고 다음과 같이 명령어를 입력하면 영상 인코딩이 시작됩니다.

E:\...\x264>x264 --crf 20 --preset slow --ref 4 --frame-packing 4 --output bluray3d.264 mvc.avs


avs [info]: 1920x1080p 0:0 @ 24000/1001 fps (cfr)

x264 [info]: using cpu capabilities: MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT

x264 [info]: profile High, level 4.1

[0.1%] 107/137569 frames, 5.87 fps, 3540.18 kb/s, eta 6:30:12


--crf 옵션은 압축 수준을 정해주는 옵션입니다. 숫자가 낮을수록 화질이 좋아지고 파일 크기는 커집니다. 기본값은 23입니다.

--preset 옵션은 압축 효율을 정해주는 옵션입니다. ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo 를 사용할 수

있습니다. 기본값은 medium 입니다. 뒤로 갈수록 인코딩 속도는 느려지지만 압축 효율이 좋아집니다.

--ref 옵션은 참조 프레임의 수를 정해줍니다. AVC 레벨 4.1을 넘지 않기 위해서 4로 제한했습니다. PC에서 재생하는 경우에는 레벨 4.1을 넘어도

상관없지만 하드웨어 재생기의 경우 레벨 4.1을 넘는 영상은 제대로 재생을 못 하는 경우가 있기 때문입니다.

--frame-packing 옵션은 파일 헤더에 3D 영상의 포맷을 알려주는 플래그를 삽입해주는 옵션입니다. 아직은 해당 플래그를 제대로 인식하는 플레이어가

거의 없기 때문에 불필요한 옵션이지만 혹시 모르니 해놓으면 좋겠죠. 옵션 별 포맷은 다음과 같습니다.

- 0: checkerboard - pixels are alternatively from L and R

- 1: column alternation - L and R are interlaced by column

- 2: row alternation - L and R are interlacedby row

- 3: side by side - L is on the left, R on the right

- 4: top bottom - L is on top, R on bottom

- 5: frame alternation - one view per frame

--output 옵션은 출력 파일의 위치를 정해주는 옵션입니다.

mvc.avs 처럼 명령줄의 마지막에 인풋 파일을 적어주면 됩니다.


4. 영상, 음성, 자막 등 합치기(먹싱)

마지막 단계입니다.

추출 또는 인코딩한 영상, 음성, 자막 등을 각종 컨테이너에 담아 줍니다.

mkvmerge, mp4box, tsmuxer 등으로 각각의 파일들을 불러와서 먹싱(Multiplexing) 해주면 완성입니다.






Posted by 김코덱