2010년 1월 31일 일요일

여러 개로 분리된 동영상을 다시 합치면 싱크문제가 생기는 이유

동영상 관련 지식을 가진 분들껜 상식적인 얘기지만, 지인들과 얘기하다보니 의외로 모르는 분들이 많아 간단히 정리.

2개 이상으로 분리된 동영상을 다시 합쳐보면 수많은 어려움이 존재한다.
우선, 동영상 포맷에 따라 적절한 도구를 찾는 것부터 난관이 크다.

펼치기..



그런데, 어찌저찌 잘 합쳐지더라도 오디오와 싱크가 맞지 않기가 십상이다.
싱크문제를 이해하려면 우선 오디오와 비디오의 압축 방식을 조금 이해해야할 필요가 있다.

비디오/오디오 모두 압축을 할 때 일정 단위로 묶어서 압축한다.

펼치기..



그리고, 일단 압축이 되고 나면 이 비디오/오디오 그룹은 다시 분리될 수 없다.
(물론, 긴 시간을 들여 다시 인코딩하면 분리는 가능하다)
이렇게 압축된 그룹 하나하나는 zip파일과 유사한 방식으로 저장되기 때문이다.

프레임 단위로 저장하는 비디오의 경우 그룹 뒤쪽 일부를 잘라내는 기능은 있지만, 오디오의 경우 얄짤없다.
오디오는 프레임 단위 이하로는 분리될 수 있는 방법이 없다.

그런데, 아래와 같은 비디오/오디오 스트림이 있다고 해보자.

그림1. 원래의 A/V 스트림


이 파일의 크기가 너무 커서 파일을 둘로 나누려고 한다.
그런데, 이 파일을 아래와 같이 둘로 나누면 아무런 문제가 없다.
손실되는 데이터도 없고, 나중에 다시 합쳐도 깔끔한 결과물을 볼 수 있다.

그림2. 이상적으로 분리된 A/V 스트림


하지만, 실제로 그렇게 운좋은 상황을 만나기는 쉽지 않다.
보통은 아래와 같은 상황을 만나게 되며, 이런 상황이 되면 골치가 아프다.
동영상을 자르는 프로그램이 굉장히 똑똑하고, 다시 합칠 것이란 것을 안다면 이론상으론 아래와 같이 저장할 수 있다.

그림3. 현실세계에서의 A/V 스트림 분리 #1


하지만, 현실은 언제나 시궁창...
보통 동영상을 자르면 아래와 같은 형태로 저장한다.

그림4. 현실세계에서의 A/V 스트림 분리 #2


이 경우 두 동영상을 잘라붙이면 아래와 같은 결과가 된다.
그야말로 안습의 동영상이 탄생하는 것이다.

그림5. 다시 합쳐진 안습의 동영상


실제로 그림 4과 같은 경우를 만나면 이미 잘려진 오디오를 다시 만들어낼 방법은 없다.
이 경우 두 동영상을 다시 합치려면 비디오의 길이를 약간 잘라줘야 한다.

그림6. 일부 비디오를 희생시켜 다시 합친 결과


이러니 비디오 편집은 삽질의 연속일 수 밖에 없다...


덧1. 잘라붙였을 때 200ms 이하의 간격이라면 A/V 싱크 문제가 그리 부각되지 않는다.
이런 경우는 걍 합치고 마는 것이 속편하다.

덧2. 오디오의 경우 그림에 나온 블럭 하나가 실제의 프레임을 의미하지는 않는다.
오디오 블럭 하나에 프레임이 여러개씩 들어간다.
따라서, 길이를 맞추기 위해 오디오를 자르는 경우도 있다.

댓글 14개:

  1. trackback from: 분할된 AVI 동영상 합치기
    대세는 블루레이라지만 누구나 하드를 뒤져보면 여전히 SD 영상들이 우글우글할 것이다. 특히 오래된 자료들은 몇몇 걸작들이 재발매 된 경우를 제외하면 BDRip이 거의 없는데, 그나마 DVD급 고화질 영상들도 CD의 용량에 맞추어 700MB 단위로 쪼개놓은 것이 대부분일 듯 하다.이렇게 쪼개진 동영상을 하나로 합쳤을 때 얼마나 대단한 장점이 있는지는 아직도 의심스럽지만 걍 옥토씨처럼 여러개보다 한개가 좋다는 분들을 위해 삽질기를 남겨본다. 미리 밝히...

    답글삭제
  2. 역시 동영상은 나누는게 아닌가 봅니다ㄷㄷㄷ



    오타 있네요.

    [q]지인들'와' 얘기하다보니 의외로...[/q]

    답글삭제
  3. @okto - 2010/01/31 19:08
    이게 의외로 재미있긴 하지만, 워낙에 삽질의 연속이다보니...

    답글삭제
  4. 이 분야에는 아직 신의 손처럼 쓸 만한 만능 프로그램이 없는 건가요 ㅜㅠ

    답글삭제
  5. @Un-i-que - 2010/01/31 20:08
    그런거 하나 만들면 좋겠군요.

    하지만, 워낙에 복잡한 분야라 직접 손대볼 엄두는 나지 않네요.

    답글삭제
  6. @BLUEnLIVE - 2010/01/31 20:12
    아마 코덱은 오픈 소스에 몇몇 있을테니 라이브러리로 구축할 수 있지 않을까요? =_=



    물론 저도 손대기는 힘들겠습니다...

    답글삭제
  7. @Un-i-que - 2010/01/31 20:08
    재인코딩을 아예 안 한다고 해도 컨테이너쪽 구조를 완전히 알고, 비디오/오디오 raw 데이터를 trim하는 방법을 완전히 알아야 하니... ㄷㄷㄷ

    답글삭제
  8. 그냥 포기하면 편해요 ㅋㅋㅋ

    답글삭제
  9. @구차니 - 2010/02/01 00:51
    [img=http://pds12.egloos.com/pds/200809/10/55/d0017355_48c75a6f84c4e.jpg]

    답글삭제
  10. 안주무시고 모하시나요 ㅋㅋㅋ

    답글삭제
  11. @구차니 - 2010/02/01 01:26
    잡니다. (응?)

    답글삭제
  12. 포기를 모르는 조커님 덕분에 사용자는 그저 편하게 슥삭-_-;; 응?

    답글삭제
  13. trackback from: melt-snow의 생각
    음원 인코딩시 VBR 방식은 고음역대도 잘려나가고(cut-off), 편집할 땐 싱크 문제도 일으킨다. 옛날엔 CBR 방식에 비해 용량을 줄일 수 있는 기술로 나와서 지금은 보편화가 되었지만, 편집할 땐 악몽이다. 음원을 무손실로 넣는 요즘 시대에 VBR은 자제했으면…

    답글삭제
  14. 상세하고 알기 쉬운 명쾌한 설명 감사합니다.

    예전부터 VirtualDub으로 동영상을 합치면서 싱크가 틀어지는 현상이 발생해서

    왜 그런지 몰랐는데 이런 이유였군요. 여태껏 이런 설명을 국내는 어디서도 보지 못했습니다.



    그런데 음원 압축이 VBR 방식으로 된 동영상의 경우 위의 현상이 두드러지는 것 같더군요.

    CBR 방식으로 되었을 땐 합쳤을 때도 문제가 없는 동영상이 있었습니다.



    옛날 VBR 방식으로 인코딩된 mp3도 자를 때 제 위치가 안 맞아서 엉뚱하게 되거나 하던데,

    용량의 이득을 보는 대신 편집에는 안 좋은 방식 같습니다. 스트리밍을 할 게 아니라면 약간 용량이 더 부가

    되더라도 CBR 방식이 낫지 않나 싶네요. 동영상에서 대부분의 용량은 영상이 차지하니까요.



    그리고 mkvmerge를 이용해서 분리된 avi 영상을 합쳤더니 싱크가 밀리는 현상이 없더군요.

    컨테이너가 mkv로 되어 저장이 되는데 matroska의 특성상 각각의 스트림이 단위 별로 저장되기 때문에 싱크 문제가 생기지 않는 것 같습니다.



    avi에선 피할 수 없는 문제로 보이네요. 게다가 이미 잘린 avi 영상은 소리가 끝부분에서 살짝 잘리기 때문에, mkv로 합쳐도 영상 이음새 부분에선 잠시 소리가 끊기더군요.

    답글삭제