프로젝트 / 음성·오디오
음성·오디오실시간 번역Gemini LiveSwiftLLM 평가macOS
«DualCue» 화상 미팅 양방향 실시간 통역 자막
내 말은 상대 화면에만 영어 자막으로, 상대 말은 내 화면에만 한국어 자막으로 — 상대는 아무것도 설치하지 않는 macOS 앱
- 기간
- 2026.10
- 형태
- 사이드 프로젝트
- 상태
- 동작 확인
- 역할
- 구조 설계·macOS 앱 개발·회귀 평가 하네스 설계 1인 수행
48→8%반쪽 문장 확정 비율, 첫 버전→v2 (한국어→영어)
58:8블라인드 쌍비교 승패, 다듬은 자막 vs 초벌만 (p<0.001)
0.5~1초말한 뒤 초벌 자막 표시까지
22개회귀 평가 시나리오 (합성 18 + 실녹음 4) × 3회
문제
외국어 화상 미팅에서 쓸 수 있는 자막 도구는 대개 상대도 같은 도구를 설치해야 하거나, 미팅 플랫폼에 묶여 있습니다. 상대에게는 내 말의 번역만, 나에게는 상대 말의 번역만 보여야 하는데, 한 화면을 공유하면 두 자막이 섞입니다.
실시간 번역 모델의 초벌 자막을 그대로 쓰면 문장 경계에서 오역이 생기고, 문장 단위로 후보정하면 중복 번역과 누락이 생겼습니다. 말이 잠깐 멈춘 순간에 반쪽 문장이 확정되는 것도 큰 문제였습니다.
접근
- 오디오를 두 갈래로 나눴습니다. 내 마이크는 영어로, 시스템 소리는 한국어로 각각 Gemini Live Translate에 보냅니다. 영어 자막은 내 화면을 미러한 가상 디스플레이에 합성해 그 화면을 공유하고, 한국어 자막은 공유·녹화에 잡히지 않는 오버레이로 내 화면에만 띄웁니다.
- 문장 단위 후보정 대신 rolling 재번역을 택했습니다. 아직 확정되지 않은 구간의 원문 전체를 경량 LLM으로 다시 번역해 덮어쓰고, 문장 3개·원문 120자를 넘으면 앞 문장을 원문에서 정확히 잘라 확정합니다.
- 확정 타이밍은 발화 완결 판정 모델에 맡겼습니다. 원문이 늘 때마다 «화자가 생각을 끝까지 말했는가»를 약 0.2초에 판정하고, 아직 말하는 중이면 최대 8초까지 기다립니다. 판정을 쓸 수 없으면 문장부호·글자 수 규칙으로 돌아갑니다.
- 품질은 회귀 평가 하네스로 쟀습니다. 합성 18개와 실녹음 4개 시나리오를 3회씩 재생해 내용(문단)과 화면(시청자에게 보이는 2줄 프레임) 두 축으로 블라인드 판정하고, 부트스트랩 신뢰구간과 부호검정으로 차이를 확인합니다.
- 네트워크 끊김과 겹친 결과는 자동으로 무효 처리하고 다시 실행하도록 평가 장치에 감시를 넣었습니다.
구조
캡처내 마이크와 시스템 소리를 따로 받습니다. 무음 1.5초 뒤부터는 오디오를 보내지 않습니다.
초벌 번역실시간 번역 모델이 0.5~1초 안에 초벌 자막을 냅니다.
완결 판정원문이 늘 때마다 화자가 생각을 끝까지 말했는지 판정합니다.
재번역확정 전 구간 원문 전체를 용어집·맥락과 함께 다시 번역해 덮어씁니다.
확정·표시원문 문장 끝에서만 확정하고, 영어는 공유용 가상 화면에, 한국어는 내 화면 오버레이에 표시합니다.
주요 기능
상대 설치 0상대는 공유된 화면에서 영어 자막을 보기만 합니다. 미팅 플랫폼과 상대 운영체제에 무관합니다.
공유에 안 잡히는 내 자막내 화면의 한국어 자막 창은 화면 공유·녹화에 잡히지 않으며, 클릭 통과와 위치 이동을 지원합니다.
용어집·맥락 반영«한국어 = English» 용어 목록과 미팅 맥락을 재번역 단계에 넣어 전문용어를 고정합니다.
에코 방지스피커로 새어 들어온 상대 영어가 다시 번역되지 않도록 대상 언어 원문은 걸러 냅니다.
재생 기반 회귀 평가캡처한 이벤트를 재생해 초벌·규칙·판정 방식을 같은 입력으로 나란히 비교합니다.
결과
- 반쪽 문장 확정 비율이 첫 버전 대비 v2에서 한국어→영어 48%→8%, 영어→한국어 46%→7%로 줄었습니다.
- 블라인드 쌍비교에서 다듬은 자막이 초벌만 쓴 자막을 한국어→영어 58:8, 영어→한국어 48:18로 이겼습니다(모두 p<0.001). 규칙 방식 대비로는 한국어→영어 47:19로 유의하게 앞섰고, 영어→한국어는 유의차가 없었습니다.
- 초기 실녹음 재생 실험에서 재번역 호출이 39% 줄고 화면 깜빡임이 33% 줄었습니다.
- 한계도 함께 기록했습니다. 10점 만점 절대 점수는 아직 5.5 안팎이고 화면 안정성이 가장 약하며, 실제 원격 상대와의 10분 이상 미팅은 아직 검증 전입니다.
포인트
LLM 하나에 전부 맡기지 않고 역할을 나눈 것이 효과가 컸습니다. 번역은 LLM이, «언제 확정할지»는 작은 판정 모델이, 확정 경계는 원문 문장 끝만 인정하는 코드가 맡습니다. LLM이 지어낸 마침표를 문장 끝으로 인정하던 첫 가드가 반쪽 확정의 절반을 통과시킨 뒤에 얻은 결론입니다.
평가 기준도 처음에는 틀렸습니다. 내용만 보는 판정은 긴 문단을 한 번에 내는 초벌 쪽에 유리했고, 시청자가 실제로 보는 2줄 프레임을 별도 축으로 넣고 나서야 화면 품질 차이가 드러났습니다. 시스템 소리 캡처 방식이 화상 미팅 입장을 멈추게 하는 문제도 실측으로 찾아 다른 캡처 방식으로 바꿨습니다.
기술
SwiftAppKitScreenCaptureKitCGVirtualDisplayGemini Live TranslateGemini Flash-LitePython부트스트랩 통계 검정
상단 영상은 실제 화면이 아니라 구조를 보여 주는 재구성 목업입니다.