XENIX(제닉스)

버추얼덥으로 정확히 구간자르기

VirtualDub 2010.02.22 댓글 XENIX

목차


    버추얼덥을 이용하여 구간의 시작과 끝을 지정한 후에 다이렉트 스트림 카피 모드로 두고 선택된 구간을 Save as AVI 할경우 선택한 구간만 칼같이 잘라져야 하는데 불필요한 부분이 끼어드는걸 볼 수 있습니다. 테스트를 통해서 그 원인을 살펴보고 해결방법을 모색해보겠습니다.

    먼저 테스트에 사용할 동영상을 하나 준비했습니다. 버추얼덥으로 테스트 영상을 만들었구요 총 1000프레임으로 구성되어 있으며 300프레임 단위로 Key Frame이 삽입되어 있습니다. 즉 0, 300, 600, 900 이렇게 4개의 키프레임이 있는거죠 (그림을 클릭하시면 크게 보실수 있습니다)


    테스트는 이렇게 진행했습니다. 300번째 프레임이 키프레임이므로 이 키프레임을 기준으로 시작점을 (앞/키프레임/뒤)로 시작해서 끝지점을 다음 키프레임 즉 600번째 프레임의 (앞/키프레임/뒤) 가지 선택한 후 Direct Stream Copy 모드로 둔 후 저장하였습니다.



    그결과를 AVIcodec이라는 동영상 정보를 보는 프로그램을 이용하여 확인해보았습니다.

    1번 그룹은 원래 키프레임이 300번째 프레임인데 그보다 50프레임 앞인 250번째 프레임에서 잘랐습니다. 그 결과 250번째 프레임부터 잘라진게 아니라 바로 앞 키프레임인 프레임번호 0번부터 잘라졌습니다. 따라서 이 경우는 실패

    2번 그룹은 정확히 키프레임에서부터 시작해서 끝지점을 다양하게 놓고 시도를 해봤습니다. 그 결과 보시는 바와 같이 정확히 원하는 프레임만 잘라넬 수 있었습니다. 따라서 이 경우는 성공

    3번 그룹은 원래 키프레임(300)보다 뒤에서 잘라봤습니다. 결과는 1번 그룹의 경우와 마찬가지로 300번째 키프레임부터 선택한 끝지점까지 잘라내게 되었습니다. 즉 350-500으로 150프레임만 잘라내려던것이 실제로는 300-500이 되어  200프레임이 잘라지게 된거죠. 따라서 이 경우도 실패

    이 테스트의 결과를 보고 버추얼덥으로 Direct Stream Mode로 구간을 자를때 칼같이 잘라지지 않는 이유를 대충 짐작하실 것입니다. 문제의 원인은 선택구간의 시작점의 위치입니다. 시작점의 위치가 정확히 키프레임이 아니라면 문제가 생기는 것입니다.

    키프레임이라는것은 프레임의 데이타정보를 온전하게 가지고 있는 프레임입니다. 다른 프레임들은 이 키프레임으로부터 시작해서 차이가 나는 변동데이타만을 가지고 있어서 자체로는 온전한 이미지로 보이지 않습니다. 이러한 방식이 동영상 압축의 핵심원리라고 이해하시면 되겠구요 키프레임에 관한 자세한 내용은 위키백과를 참고하셔도 좋겠습니다.


    그렇다면 어떻게 해야 원하는 프레임만을 잘라낼 수 있을까요? 방법은 여러가지가 있겠지만 가장 간단한 방법은 Direct Stream Copy를 하지말고 Full processing mode에서 코덱으로 인코딩하여 저장하는 방법입니다.
     아래 그림은 위에 테스트했던 대로 구간을 선택한 후 Direct stream copy 모드가 아니라 Full processing mode 에서 XviD 코덱을 선택하여 인코딩한 결과물입니다.


    보시듯이 그 결과가 정확히 원하는 프레임만 잘라내어 저장된걸 보실 수 있습니다.

    버추얼덥으로 동영상의 구간을 자를때 Direct stream copy를 하는 이유는 원본의 화질을 유지하고자 이 모드를 이용하는데 커팅작업같은 경우 이 모드에서는 원하는 결과가 나오지 않을 수도 있습니다. 따라서 D.S.C 모드에서 커팅을 할 경우 키프레임을 시작점으로 잡으시고 그게 여의치 않을 경우 구간선택 후 F.P.M로 한 후 코덱으로 인코딩하여 저장하는것이 원하는 결과를 얻을 수 있는 길이라 봅니다.

    댓글