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

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

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

펼치기..



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

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

펼치기..



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

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

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

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


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

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


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

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


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

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


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

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


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

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


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


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

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

Trackback 2 Comment 12
  1. Favicon of http://oktoya.net BlogIcon okto 2010.01.31 19:08 address edit & delete reply

    역시 동영상은 나누는게 아닌가 봅니다ㄷㄷㄷ

    오타 있네요.
    [q]지인들'와' 얘기하다보니 의외로...[/q]

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2010.01.31 19:45 address edit & delete

      이게 의외로 재미있긴 하지만, 워낙에 삽질의 연속이다보니...

  2. Favicon of http://un-i.tistory.com/ BlogIcon Un-i-que 2010.01.31 20:08 address edit & delete reply

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

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2010.01.31 20:12 address edit & delete

      그런거 하나 만들면 좋겠군요.
      하지만, 워낙에 복잡한 분야라 직접 손대볼 엄두는 나지 않네요.

    • Favicon of http://un-i.tistory.com/ BlogIcon Un-i-que 2010.01.31 20:50 address edit & delete

      아마 코덱은 오픈 소스에 몇몇 있을테니 라이브러리로 구축할 수 있지 않을까요? =_=

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

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2010.01.31 21:01 address edit & delete

      재인코딩을 아예 안 한다고 해도 컨테이너쪽 구조를 완전히 알고, 비디오/오디오 raw 데이터를 trim하는 방법을 완전히 알아야 하니... ㄷㄷㄷ

  3. Favicon of http://minimonk.tistory.com BlogIcon 구차니 2010.02.01 00:51 address edit & delete reply

    그냥 포기하면 편해요 ㅋㅋㅋ

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2010.02.01 01:11 address edit & delete

      [img=http://pds12.egloos.com/pds/200809/10/55/d0017355_48c75a6f84c4e.jpg]

  4. Favicon of http://minimonk.tistory.com BlogIcon 구차니 2010.02.01 01:26 address edit & delete reply

    안주무시고 모하시나요 ㅋㅋㅋ

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2010.02.01 01:39 address edit & delete

      잡니다. (응?)

  5. Favicon of http://mahabanya.com BlogIcon mahabanya 2010.02.01 22:02 address edit & delete reply

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

  6. melt-snow 2010.07.18 07:55 address edit & delete reply

    상세하고 알기 쉬운 명쾌한 설명 감사합니다.
    예전부터 VirtualDub으로 동영상을 합치면서 싱크가 틀어지는 현상이 발생해서
    왜 그런지 몰랐는데 이런 이유였군요. 여태껏 이런 설명을 국내는 어디서도 보지 못했습니다.

    그런데 음원 압축이 VBR 방식으로 된 동영상의 경우 위의 현상이 두드러지는 것 같더군요.
    CBR 방식으로 되었을 땐 합쳤을 때도 문제가 없는 동영상이 있었습니다.

    옛날 VBR 방식으로 인코딩된 mp3도 자를 때 제 위치가 안 맞아서 엉뚱하게 되거나 하던데,
    용량의 이득을 보는 대신 편집에는 안 좋은 방식 같습니다. 스트리밍을 할 게 아니라면 약간 용량이 더 부가
    되더라도 CBR 방식이 낫지 않나 싶네요. 동영상에서 대부분의 용량은 영상이 차지하니까요.

    그리고 mkvmerge를 이용해서 분리된 avi 영상을 합쳤더니 싱크가 밀리는 현상이 없더군요.
    컨테이너가 mkv로 되어 저장이 되는데 matroska의 특성상 각각의 스트림이 단위 별로 저장되기 때문에 싱크 문제가 생기지 않는 것 같습니다.

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