제작일지

오프닝 소리가 8.8% 빨랐다 — 라벨 하나를 믿은 죄

오프닝과 모놀로그, 두 동영상에 한국어 자막을 새로 구워 넣었습니다. 크기도 맞고, 파일 안 자물쇠(해시)도 통과하고, 프레임 수까지 원판과 같았습니다. 그런데 소리가 빨랐습니다.

  • 원판보다 8.8% 빠르고, 음정이 1.5반음 높았습니다.
  • 끝이 잘려 무음이 됐습니다 — 오프닝 약 9초, 모놀로그 약 5초.
  • 영상은 멀쩡해서 뒤로 갈수록 입모양이 벌어졌습니다.

원인 — 도구가 뱉은 숫자를 믿었다

원판 동영상의 소리는 44,100Hz 입니다. 그런데 소리를 풀어내는 도구가 결과 파일 머리에 48000 이라고 적어서 내놓았습니다. 내용물은 멀쩡한데 이름표만 틀린 상태였습니다.

저는 그 이름표를 믿고 「48000 짜리를 44100 으로 바꿔야겠다」며 멀쩡한 소리에서 샘플의 8.16% 를 실제로 버렸습니다.

그리고 이게 모든 검사를 통과했습니다. 다시 인코딩한 프레임 수가 원판과 똑같이 나오는 바람에 슬롯 크기도, 해시 자물쇠도, 구조 검사도 전부 초록불이었습니다. 크기와 해시를 맞춘다고 내용이 맞는 게 아니었습니다.

자막도 같이 어긋나 있었다

더 나빴던 건 자막입니다. 자막 타임코드를 그 잘못된 소리 파일로 뽑았습니다. 그러니 자막과 (빠른) 소리는 서로 맞고, 둘이 같이 영상보다 앞서 가는 상태가 됐습니다.

여기서 소리만 고쳤다면 자막이 최대 5초·9초씩 빨라져 더 나빠졌을 겁니다. 반드시 같이 고쳐야 했습니다.

어떻게 잡았나

크기·해시 비교로는 절대 안 잡힙니다. 그래서 소리의 크기 변화 곡선을 원판과 우리 것에서 각각 뽑고, 시간축을 늘였다 줄였다 하며 제일 잘 겹치는 배율을 찾았습니다.

제일 잘 겹치는 배율이 1.000 이 아니라 0.918 이었습니다.
그리고 44100 ÷ 48000 = 0.91875. 숫자가 그대로 나왔습니다.

고친 방법

소리를 다시 변환하지 않았습니다. 이름표만 바로잡아 넣었습니다. 그랬더니 인코딩 결과가 원판과 형상까지 같게 나와서, 아예 원판의 소리 데이터를 통째로 그대로 넣을 수 있었습니다.

결과: 소리가 원판과 바이트 단위로 똑같습니다. 다시 인코딩하면서 생기는 손실조차 없습니다.

자막은 ×48000/44100 으로 타임코드를 다시 계산해 맞췄습니다. 자막 글꼴도 이때 바꿨습니다 — 원래 쓰던 것이 윈도우 번들 글꼴이라 다시 배포할 수 없어서, 자유롭게 쓸 수 있는 글꼴로 갈아탔습니다.

남긴 것

같은 사고가 다시 나면 안 되니 회귀 검사를 만들어 뒀습니다. 동영상을 건드릴 때마다 소리가 원판과 바이트 동일한지, 프레임 형상과 타임스탬프가 맞는지, 자막이 영상 길이 안에 들어오는지를 전부 봅니다.

교훈은 하나입니다. 도구가 알려주는 숫자를 그냥 믿지 않는다. 컨테이너가 말하는 길이와 교차 검산해서 안 맞으면, 내용을 의심하기 전에 라벨을 의심한다.

※ 이 수정은 v1.0 에 들어갔습니다. 잘못된 판은 배포되지 않았습니다. v1.1 에서는 동영상을 다시 손봤는데, 그건 다른 문제였습니다 — 다음 편으로 안 넘어가던 버그와 자막 글꼴·문구 손질입니다.