Whisper 무음 반복 자막 줄이기: 한국어 6조건 실험과 SRT 도구

Whisper 자막에 말하지 않은 문장이 반복된다면 먼저 무음 구간을 확인해 보자. Core Insight의 한국어 합성 음성 실험에서는 VAD와 단어별 시간 정렬을 함께 켰을 때 끝 무음의 반복 자막과 중간 무음에 길게 남는 자막을 줄일 수 있었다. 같은 입력에서 기본 설정은 16줄을 만들었고, 두 옵션을 적용한 결과는 발화에 해당하는 3줄이었다.

직접 쓸 수 있는 Windows용 SRT 생성 도구를 아래에 묶었다. 다만 이 실험은 한 목소리로 만든 합성 음성 6조건에 한정한다. 단어 오인식은 남았으며, 자연인 녹음이나 배경음악이 있는 영상까지 해결됐다는 뜻은 아니다.

한국어 합성 음성 실험에서 기본 설정은 반복 포함 16줄, VAD 적용은 3줄이며 중간 무음 자막 표시 시간은 단어 정렬 추가 후 33.08초에서 2.17초로 줄어든 비교
Core Insight가 직접 실행한 JSON 결과로 만든 비교. 숫자는 이 입력과 설정에서 측정한 값이다.

반복을 지웠더니 자막이 무음에 남았다

이번 실험의 출발점은 OpenScreen의 한국어 자막 검증에서 발견했던 무음 환각이다. 그 글에서는 현상을 기록했지만 해결하지 못했다. 이번에는 OpenScreen 프로젝트를 수정하지 않고, 별도의 faster-whisper로 오디오를 전사해 SRT를 만드는 경로를 시험했다.

무음에서 없는 말이 나오는 문제는 faster-whisper의 사용자 이슈에도 있다. 저장소 협업자는 VAD를 사용하라고 답했다. VAD는 음성 활동 감지 기능이다. 오디오에서 발화가 있다고 판단한 구간을 골라 전사하도록 돕는다.

공식 VAD 예제대로 켜 보니 끝 무음의 반복은 사라졌다. 그런데 중간에 무음 30초를 넣은 파일에서는 “조명을 켜고 녹화를 시작합니다”라는 자막의 시간이 7.08~40.16초가 됐다. 한 줄이 33.08초 동안 화면에 남는 셈이다. 줄 수만 세면 이 문제를 놓친다.

word_timestamps=True를 추가하자 같은 줄은 7.07~9.24초로 바뀌었다. 뒤에 이어지는 발화의 자막도 다시 생성됐다. 제공 도구에는 VAD와 단어별 시간 정렬을 함께 넣었다. 실제 발화와의 정밀한 동기화 정확도를 측정한 것은 아니므로 최종 타이밍은 귀로 확인해야 한다.

한국어 6조건을 같은 설정으로 비교했다

Windows의 Microsoft Heami Desktop으로 다음 문장을 합성했다. 외부 녹음이나 영상의 음성을 가져오지 않았다.

오늘은 상품 소개 영상을 만듭니다. 파란 머그컵을 책상 가운데에 놓으세요. 조명을 켜고 녹화를 시작합니다.

음성 파일 길이는 약 10.16초다. 이 파일의 음량과 무음 위치를 바꿨다. 모델은 base, 실행은 CPU int8, 언어는 한국어로 고정했다. beam_size=5, temperature=0, condition_on_previous_text=True도 같게 두고 VAD와 시간 정렬만 바꿨다. faster-whisper 버전은 1.2.1이다.

입력 조건 기본 설정 VAD만 VAD + 단어 정렬
30초 완전 무음 0줄 0줄 0줄
30초 낮은 백색 잡음 0줄 0줄 0줄
원래 음성 3줄 3줄 3줄
음성 뒤 무음 30초 16줄 3줄 3줄
음량 2% 음성 뒤 무음 30초 4줄 3줄 3줄
음성 사이 무음 30초 6줄 6줄 6줄

여기서 1줄은 모델이 반환한 자막 구간 하나다. 마지막 조건은 같은 세 문장을 앞뒤에 두 번 넣었으므로 발화가 여섯 줄이다. 모두 여섯 줄이 나왔지만, VAD만 적용한 결과에는 위에서 본 긴 표시 시간이 있었다.

끝 무음 조건의 기본 출력에는 발화 3줄 뒤로 같은 문장이 13번 더 붙었다. 음량을 2%로 낮춘 조건에서는 마지막 구간에 숫자 “4”가 길게 반복됐다. 두 경우 모두 VAD를 적용한 출력에서 무음의 반복이 사라졌다. 반면 원래 문장의 “상품 소개”는 “상품 속의”로 남았고, 낮춘 음량에서는 “상풍 속의”로도 인식했다. 생성된 자막에서 잘못 들은 단어는 직접 고쳐야 한다.

Windows에서 SRT 초안 만들기

한국어 VAD 자막 도구 ZIP 내려받기. 압축 파일에는 설치·실행 파일, 읽을 수 있는 Python 소스, 고정한 의존성 목록과 실험 결과 JSON이 들어 있다. 음성 모델 자체는 포함하지 않았다.

  1. Python이 없다면 Python 공식 Windows 다운로드에서 설치한다. 이번 검증 환경은 Python 3.11.15였다. 설치할 때 Python을 PATH에 추가해야 python 명령을 쓸 수 있다.
  2. ZIP을 압축 해제하고 setup.cmd를 실행한다. 라이브러리 설치가 끝나면 완료 문구가 나온다. 처음 설치할 때는 인터넷 연결이 필요하다.
  3. 오디오나 영상 파일 하나를 transcribe.cmd 위에 끌어 놓는다. 첫 전사는 Hugging Face에서 base 모델을 내려받으므로 인터넷이 필요하다. 이미 캐시에 있으면 그 모델을 재사용한다.
  4. 원본 파일 옆의 -vad.srt를 열어 원음과 대조한다. 같은 이름의 결과가 있으면 -vad-1.srt처럼 새 이름으로 저장한다. 설정과 인식 내용은 함께 생기는 JSON에서 확인할 수 있다.

예를 들어 설명 영상.mp4를 넣으면 설명 영상-vad.srt가 생긴다. 검증 때는 한글과 공백이 들어간 경로를 같은 .cmd에 인자로 넘겨 두 번 실행했다. 두 SRT가 각각 생성됐고 원본 파일의 해시는 바뀌지 않았다. 탐색기의 드래그 동작 자체를 육안으로 시험한 것은 아니다.

전사는 CPU에서 실행하며 이 코드에는 오디오 업로드나 유료 API 호출이 없다. 외부 설치 파일과 모델을 내려받는 단계는 별개다. 한국어 전용 설정이며 번역이나 화자 구분은 하지 않는다. SRT는 UTF-8 BOM으로 저장한다. MoneyPrinterTurbo의 한국어 자막 설정처럼 글꼴 때문에 글자가 네모로 보이는 문제와, 이 글에서 다루는 무음 인식 문제는 구분해서 확인하면 된다.

Python을 직접 쓰는 독자라면 아래가 핵심 설정이다. 공식 문서의 단어별 시간 옵션을 함께 적용했다.

segments, info = model.transcribe(
    "audio.wav",
    language="ko",
    beam_size=5,
    temperature=0,
    condition_on_previous_text=True,
    vad_filter=True,
    word_timestamps=True,
)

무음 전후와 조용한 대목을 다시 듣자

먼저 발화가 끝난 뒤에 새 문장이 생겼는지 본다. 다음으로 긴 쉼 전후의 자막을 재생해 한 줄이 무음 전체에 걸쳐 남지 않는지 확인한다. 조용한 대목과 고유명사는 원음과 따로 맞춘다. 이번 실험의 낮춘 음량 조건에서 문장은 남았지만, 그것만으로 모든 작은 목소리를 보존한다고 말할 수는 없다.

확인일은 2026년 9월 22일이다. 실험 18회는 한국어 합성 음성 한 종류에서 만든 여섯 입력을 대상으로 했다. 제공 도구의 설치와 파일 실행은 Windows 11·Python 3.11.15에서 확인했다. 다른 운영체제, 다른 모델, 긴 회의 녹음과 배경음악이 섞인 영상은 검증하지 않았다. 도구와 사용한 faster-whisper는 MIT 라이선스이며, 의존성은 각자의 라이선스를 따른다.

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다