요즘 SBS에서 3DTV 본방송을 일부 편성하는 것 같더군요.

지상파 3DTV는 듀얼스트림이라는 방식을 사용하는데 언뜻 봐서는 일반 2DTV와 별 차이가 없어보이지만

녹화된 파일 안에는 (왼쪽, 오른쪽) 두 개의 영상이 함께 들어있습니다.

재생을 해보면 일반 2DTV처럼 왼쪽 영상 하나만 보이기 때문에 녹화된 파일이 3DTV 영상인지 잘 확인해 봐야 합니다.


녹화된 파일이 3DTV 영상인지 확인하는 방법도 여러가지가 있지만..가장 간단하게 TsRemux로 열어보시면 됩니다.

TsRemux0212.exe


TsRemux로 녹화된 파일을 열어보면 아래와 같은 화면이 보일 겁니다.


보시는 것처럼 하나의 파일에 왼쪽 영상(MPEG2)과 오른쪽 영상(AVC / H.264)이 함께 들어있죠.

이 중 오른쪽 영상인 AVC 스트림에만 체크를 하고 Remux 버튼을 눌러서 추출하시면 됩니다.


이제 인코딩 방법은 간단합니다.

위 그림에서 사용한 원본 영상인 3dtv_sample.ts 파일과 추출된 오른쪽 영상인 3dtv_right.ts 파일로 예를 들면

먼저 원본 영상은 일반 2DTV와 별로 다르지 않기 때문에 DGIndex로 d2v 파일을 만들거나 평소 사용하는 방법으로 avs 스크립트에서 불러옵니다.

다음으로 추출된 오른쪽 영상도 grf 파일을 만들거나 directshowsource, dss2 등의 소스필터로 불러옵니다.

그런 다음 아래와 같이 스크립트를 만들어서 좌, 우로 붙이거나(stackhorizontal) 상, 하로 붙여서(stackvertical) 인코딩하면 됩니다.

left=MPEG2Source("3dtv_sample.d2v")

right=DSS2("3dtv_right.ts")

stackvertical(left,right) # stackhorizontal(left,right)

lanczosresize(1920,1080)


3DTV는 대부분 인터레이스 영상이니까 디인터레이스나 IVTC 등도 필요하면 해주는 것이 좋습니다.

그리고 3DTV 인코딩에서 가장 중요한 부분이 좌, 우 영상의 싱크를 맞추는 일입니다.

한 프레임도 오차가 있으면 안 되기 때문에 앞부분 100~300 프레임 정도만 테스트 인코딩을 먼저 해보시는 게 좋습니다.

예를 들어 테스트 인코딩 결과 왼쪽 영상이 5 프레임 느리게 재생된다면 왼쪽 영상의 처음 5 프레임을 삭제하면 되겠죠.

아래와 같이 deleteframe(0,1,2,3,4) 나 loop(0,0,4) 를 왼쪽 영상에 추가해서 좌, 우 싱크를 맞춰줍니다.

left=MPEG2Source("3dtv_sample.d2v").loop(0,0,4)

right=DSS2("3dtv_right.ts")

stackvertical(left,right) # stackhorizontal(left,right)

lanczosresize(1920,1080)


이런식으로 싱크를 맞춘 avs 스크립트로 인코딩을 하고 음성과 함께 먹싱해주면 완성입니다.

배치파일로 만들어보려고 했는데..ffmpeg로는 좌, 우 영상의 싱크를 맞출 수가 없어서 간단하게 가이드만 작성해 봤습니다.






Posted by 김코덱