Lab Note 018
Making the Marker Land Where the Voice Is
StatusSHIPPED
The problem
설명 영상에서 지금 말하는 부분이 화면에 표시돼야 한다. 그러려면 두 가지를 알아야 한다. 그 단어가 슬라이드의 **어디**에 있는지, 그리고 음성이 **언제** 그 단어를 말하는지. 둘 다 어려웠다.
Where — the coordinates kept drifting
위치는 PPT 를 PDF 로 바꾸고 OCR 로 글자를 찾아 얻는다. 그런데 PDF 좌표계와 이미지 좌표계가 다르다. 원점이 아래인지 위인지부터 다르다. 변환을 고치고 나서도 어긋났다. 이번엔 이미지 크기 때문이었다. 슬라이드 비율이 영상 비율과 안 맞으면 스케일 후 여백을 채워야 하는데, 그 여백만큼 좌표가 통째로 밀린다. 스케일과 패딩을 같은 규칙으로 계산하게 만들고서야 마킹이 제자리에 앉았다. 같은 날 그 계산이 인코딩 오류도 같이 잡았다. 짝수가 아닌 해상도를 libx264 가 받지 않는데, 패딩이 그걸 정리해 준 것이다.
When — I was guessing at first
타이밍은 처음에 글자 수로 추정했다. 대본을 글자 수로 나눠 몇 초쯤 걸리겠다고 계산한 것이다. 안 맞았다. 한국어는 글자 수와 발음 길이가 비례하지 않는다. 숫자와 영문 약어가 섞이면 더 어긋난다. TTS 가 만든 오디오의 **실제 길이**를 재서 타이밍을 다시 잡는 쪽으로 바꿨다. 추정을 버리고 측정으로 옮긴 것이다.
길이를 계산하지 말고 재라. 재는 게 되면 재는 게 맞다.
And a delay
그래도 어색했다. 마킹이 음성보다 먼저 뜨면 정답을 미리 알려주는 꼴이 된다. 0.4초 딜레이를 넣었다. 사람이 말하면서 짚는 것과 같은 순서가 됐다. 하루에 여덟 커밋이 이 문제 하나였다. OCR 캐싱과 자막 번인도 같은 날 붙었다.
PPT to Video
Slides in, narrated lesson video out