No. [ 용어사전 ]

Forced Alignment란?

Forced Alignment은 이미 가지고 있는 음성과 텍스트를 단어 단위 타임코드로 정밀하게 맞추는 기술입니다. 자막 싱크의 핵심입니다.

Forced Alignment은 이미 가지고 있는 음성과 그에 대응하는 텍스트(대본·자막)를 입력하면, 각 단어가 음성의 어느 시점에 나오는지 타임코드를 자동으로 찾아주는 기술입니다. “강제 정렬”이라는 이름 그대로, 텍스트를 음성에 강제로 맞춰 붙이는 작업입니다.

STT(음성을 텍스트로 받아쓰는 기술)와 헷갈리기 쉬운데, 방향이 반대입니다. STT는 음성만 듣고 텍스트를 새로 만들어냅니다. Forced Alignment은 정답 텍스트가 이미 있다는 전제에서, 그 텍스트가 음성의 몇 초 몇 프레임에 등장하는지 위치만 찾습니다. 받아쓸 필요 없이 맞추기만 하니까 정확도가 훨씬 높고, 단어 하나하나에 시작·끝 시각을 붙일 수 있습니다.

그래서 자막 타임코드를 단어 단위로 동기화할 때, 노래 가사 싱크, 더빙 립싱크, 언어 학습 앱의 발음 하이라이트 같은 데 쓰입니다. 내부적으로는 음성을 음소(phoneme) 단위로 쪼갠 뒤 텍스트의 음소 열과 매칭하는 방식이며, Montreal Forced Aligner(MFA), Gentle, whisperX 같은 도구가 대표적입니다.

저는 유튜브 영상을 편집하면서 자막을 만들 때 이 forced alignment을 기성 도구 없이 직접 짜서 씁니다. 이유가 있어요. 제 유튜브 영상은 대본을 먼저 쓰고 그다음에 녹음을 하거든요. 그러니까 “정답 텍스트”가 이미 손에 있는 셈이죠. 받아쓸 필요가 없으니 남는 건 이 대본을 음성에 맞춰 붙이는 일뿐입니다.

워크플로우는 이래요. 대본을 쓸 때 줄바꿈을 “한 줄 = 한 호흡”(22자 안쪽)으로 미리 끊어둡니다. 녹음하고, 컷편하고, 워드레벨로 전사한 다음, 그 대본 줄바꿈을 SRT 자막을 끊는 절대 경계로 삼아서 음성 타임스탬프에 앵커처럼 정렬시킵니다. 대본 단어와 전사된 단어를 difflib로 퍼지 매칭하는 스크립트를 직접 만들어 돌려요.

한국어라서 생긴 삽질도 많았습니다. STT가 “클로드”, “앤트로픽” 같은 고유명사를 자꾸 엉뚱하게 받아써서 교정 사전을 78개 넘게 쌓았고, 화면에 보일 표기와 매칭에 쓸 표기를 따로 관리합니다. 게다가 타임스탬프가 늘 200ms쯤 밀려서 그 보정도 들어가요. 그래서 “완벽한 자막은 결국 손을 한 번 더 타야 나온다”가 제 결론입니다.

#Forced Alignment#자막#STT