우선 3DSubtitler 라는 툴을 사용하면 2D 자막을 손쉽게 3D 로 만들 수 있다는 것을 말씀드립니다.

가능하면 이 툴을 이용하는 편이 좋고..그렇지 않을 때에만 아래에서 설명하는 방법을 쓰시기 바랍니다.



Half Side by Side 또는 Half Over Under 방식으로 인코딩된 영상에 2D 일반 자막을 입혀서 재인코딩하는 스크립트입니다.

입혀진 자막의 싱크가 맞지 않거나 오타가 있어도 인코딩 후에는 수정할 수 없기 때문에 영상에 자막을 직접 입혀서 재인코딩하는 것은

되도록이면 피하는 것이 좋습니다만..여러가지 이유로 3D 자막을 보기 힘들다면 감상용으로 이 방법을 쓰는 것도 나쁘지 않을 것 같습니다.

(감상 후 원본 영상은 놔두고 자막이 입혀진 영상만 삭제하면 되니까요.)


먼저 자막을 입히는 과정을 이해하기 쉽도록 그림으로 만들어 봤습니다.

예를 들어 Half Over Under 방식의 원본 3D 영상이 있다고 하면 아래와 같이 왼쪽과 오른쪽 영상으로 분리합니다.




다음으로 왼쪽 영상을 원본 크기로 리사이즈한 후 오른쪽에 검은 여백을 추가합니다.


오른쪽 영상도 원본 크기로 리사이즈한 후 왼쪽에 검은 여백을 추가합니다.




다음으로 왼쪽 영상에 검은 여백이 추가된 상태에서 자막을 입힌 후에 검은 여백은 제거해 줍니다.

(이렇게 하면 자막이 화면의 중앙에서 오른쪽으로 이동하게 됩니다.)


오른쪽 영상도 검은 여백이 추가된 상태에서 자막을 입힌 후에 검은 여백을 제거해 줍니다.

(이번에는 자막이 화면의 중앙에서 왼쪽으로 이동하게 됩니다.)




마지막으로 좌, 우 영상을 위, 아래로 붙여주고 다시 원본 크기로 리사이즈하면 완성입니다.



지금까지 그림으로 설명드린 내용을 스크립트로 정리하면 아래와 같습니다.

source=DirectShowSource("X:\원본 영상 위치.mkv")

sub2d3d(source, format=2, depth=70)


function sub2d3d(clip src, int "format", int "depth")

{

sub="X:\자막 파일 위치.smi"

orgw=src.width

orgh=src.height

tabh=orgh/2

sbsw=orgw/2

(format==1) ? stackhorizontal(crop(src,0,0,-sbsw,0).lanczosresize(orgw,orgh)

\.addborders(0,0,depth,0).textsub(sub).crop(0,0,-depth,0),

\crop(src,sbsw,0,0,0).lanczosresize(orgw,orgh)

\.addborders(depth,0,0,0).textsub(sub).crop(depth,0,0,0))

\              : stackvertical(crop(src,0,0,0,-tabh).lanczosresize(orgw,orgh)

\.addborders(0,0,depth,0).textsub(sub).crop(0,0,-depth,0),

\crop(src,0,tabh,0,0).lanczosresize(orgw,orgh)

\.addborders(depth,0,0,0).textsub(sub).crop(depth,0,0,0))

return lanczosresize(last,orgw,orgh)

}


위 스크립트에서 X:\원본 영상 위치.mkv 와 X:\자막 파일 위치.smi 를 상황에 맞게 바꿔서 사용하면 됩니다.

원본 영상이 Half Side by Side 인 경우에는 format을 1로, Half Over Under 일 경우에는 2로 설정합니다.

depth 는 자막의 입체감(검은 여백의 크기)을 조절하는 옵션입니다. 아래에 50, 100, 150 의 값을 사용해서 인코딩한 샘플 영상을 첨부합니다.

샘플 영상을 직접 확인해보고 적당한 값을 사용하면 되겠습니다.

(같은 depth 값을 사용했다고 하더라도 원본 영상의 해상도에 따라 입체감이 달라집니다. 샘플 영상의 원본은 1920x1080 해상도입니다.)


depth=50.zip

depth=100.zip

depth=150.zip




Posted by 김코덱
,