동영상 관련 지식을 가진 분들껜 상식적인 얘기지만, 지인들과 얘기하다보니 의외로 모르는 분들이 많아 간단히 정리.
2개 이상으로 분리된 동영상을 다시 합쳐보면 수많은 어려움이 존재한다.
우선, 동영상 포맷에 따라 적절한 도구를 찾는 것부터 난관이 크다.
펼치기..
확장자(컨테이너)가 WMV인가 또는 MKV/OGM/AVI인가에 따라 작업하는 방식이 다르다.
게다가 WMV의 경우 한방에 잘라주는 프로그램이 있기도 하지만, MKV/OGM은 아주 많은 수작업을 거쳐야 한다.
AVI의 경우 한방에 잘라주는 프로그램이 있지만, 내부 코덱에 따라 변수는 다양하다.
그런데, 어찌저찌 잘 합쳐지더라도 오디오와 싱크가 맞지 않기가 십상이다.
싱크문제를 이해하려면 우선 오디오와 비디오의 압축 방식을 조금 이해해야할 필요가 있다.
비디오/오디오 모두 압축을 할 때 일정 단위로 묶어서 압축한다.
펼치기..
비디오의 경우 유사한 영상 단위로 묶어(이를 GoP, Group of Pictures라고 함) 압축한다.
(그 중 하나를 I프레임 또는 키프레임이라 하고, 다른 프레임들은 예측 프레임이라고 함)
키프레임의 간격은 일정할 수도 있지만, 최신 코덱들은 키프레임 간격을 영상 압축에 유리한 쪽으로 가변적으로 적용한다.
또한, 압축률 역시 상황에 맞게 가변적으로 적용한다. (이를 VBR이라 함)
오디오 역시 이와 유사한 개념으로 압축한다.
오디오 역시 샘플을 프레임이라 부르는 단위로 묶어서 압축한다.
물론, 오디오의 압축률 역시 VBR을 적용하는 경우가 많다.
그리고, 일단 압축이 되고 나면 이 비디오/오디오 그룹은 다시 분리될 수 없다.
(물론, 긴 시간을 들여 다시 인코딩하면 분리는 가능하다)
이렇게 압축된 그룹 하나하나는 zip파일과 유사한 방식으로 저장되기 때문이다.
프레임 단위로 저장하는 비디오의 경우 그룹 뒤쪽 일부를 잘라내는 기능은 있지만, 오디오의 경우 얄짤없다.
오디오는 프레임 단위 이하로는 분리될 수 있는 방법이 없다.
그런데, 아래와 같은 비디오/오디오 스트림이 있다고 해보자.
그림1. 원래의 A/V 스트림
이 파일의 크기가 너무 커서 파일을 둘로 나누려고 한다.
그런데, 이 파일을 아래와 같이 둘로 나누면 아무런 문제가 없다.
손실되는 데이터도 없고, 나중에 다시 합쳐도 깔끔한 결과물을 볼 수 있다.
그림2. 이상적으로 분리된 A/V 스트림
하지만, 실제로 그렇게 운좋은 상황을 만나기는 쉽지 않다.
보통은 아래와 같은 상황을 만나게 되며, 이런 상황이 되면 골치가 아프다.
동영상을 자르는 프로그램이 굉장히 똑똑하고, 다시 합칠 것이란 것을 안다면 이론상으론 아래와 같이 저장할 수 있다.
그림3. 현실세계에서의 A/V 스트림 분리 #1
하지만, 현실은 언제나 시궁창...
보통 동영상을 자르면 아래와 같은 형태로 저장한다.
그림4. 현실세계에서의 A/V 스트림 분리 #2
이 경우 두 동영상을 잘라붙이면 아래와 같은 결과가 된다.
그야말로 안습의 동영상이 탄생하는 것이다.
그림5. 다시 합쳐진 안습의 동영상
실제로 그림 4과 같은 경우를 만나면 이미 잘려진 오디오를 다시 만들어낼 방법은 없다.
이 경우 두 동영상을 다시 합치려면 비디오의 길이를 약간 잘라줘야 한다.
그림6. 일부 비디오를 희생시켜 다시 합친 결과
이러니 비디오 편집은 삽질의 연속일 수 밖에 없다...
덧1. 잘라붙였을 때 200ms 이하의 간격이라면 A/V 싱크 문제가 그리 부각되지 않는다.
이런 경우는 걍 합치고 마는 것이 속편하다.
덧2. 오디오의 경우 그림에 나온 블럭 하나가 실제의 프레임을 의미하지는 않는다.
오디오 블럭 하나에 프레임이 여러개씩 들어간다.
따라서, 길이를 맞추기 위해 오디오를 자르는 경우도 있다.