2025년 3월, DeepSRT 사용자 1만 명 돌파를 알린 게시물에 이렇게 썼다.
whisper를 결합해 원하는 자막을 만드는 방법도 알려드리고, CC 자막을 제공하지 않는 영상까지 완전히 커버하겠습니다.
이 문장은 1년 반 가까이 잠들어 있었다. 1.3.0이 그것을 지킨다 — 다만 whisper로는 아니다.
계획은 whisper였다. 왜 답이 달라졌나
음성 인식이 어려웠던 적은 없다. 어려운 건 오디오를 손에 넣는 것이다. 영상은 YouTube 공식 플레이어 안에서 재생되고, 그 오디오를 뽑아낼 API는 존재하지 않는다. 남은 길은 전부 막혀 있었다.
시스템 오디오를 캡처한다? 화면 기록 권한이 필요하다 — 사용자가 요청하지도 않은 기능을 위해 macOS에서 가장 위압적인 허가 대화상자를 띄우는 일이다. 오디오 스트림을 다운로드한다? DeepSRT는 다운로더가 아니라고 공개적으로 말해왔다. 다운로드도, 변환도, 저장도 하지 않는다. 기능 하나를 위해 아키텍처의 선을 넘을 가치는 없다.
그러니까 whisper의 문제는 인식 능력이 아니라, 오디오에 손이 닿지 않고, 더러운 방법으로 가져올 생각이 없다는 것이었다.
답은 김이 빠질 만큼 단순하다
Gemini는 공개된 YouTube URL을 그대로 영상 입력으로 받는다.
그게 전부다. 앱이 URL을 건네면 모델이 영상을 보고, 타임스탬프가 붙은 대본이 돌아온다. 다운로드도 변환도 저장도 없다 — 「서버가 없다」는 설계와 완전히 일치하고, 당신 자신의 키 위에서 돌아간다.
측정이 설계를 다시 썼다. 두 번이나
첫 번째 측정. 같은 영상에 대해 요약만 요청하면 input이 19,393토큰, 전체 대본을 요청하면 19,431토큰 — 거의 동일하다. 영상을 집어넣는 것이 고정비이고, 무엇을 묻는지는 상관없다. 결론은 명확했다. 요약과 대본을 위해 영상 호출을 두 번 하면 안 된다. 같은 영상에 두 번 돈을 내는 셈이다.
그래서 긴 영상을 10분짜리 창으로 잘랐다. 안정성을 위해, 점진적 표시를 위해. 그런데 두 번째 측정이 왔다. 모든 창이 영상 전체를 다시 집어넣고 있었다. 28분짜리 영상의 마지막 8분만 요청해도 청구는 전체 분량인 156,762토큰. 셋으로 자르면 세 배를 낸다.
우리가 커밋 로그에 직접 적어 넣은 설계 근거가, 우리 자신의 측정에 뒤집혔다. 최종 버전은 발상을 뒤집는다. 먼저 낙관적으로 전체를 한 번에 요청하고, 출력이 실제로 끊긴 구간만 창으로 보충한다. 비용은 3분의 1로 떨어졌다.
모델은 게으름을 피운다. 그것도 구체적인 방식으로
로그에서 꺼낸 두 가지 이야기.
긴 영상의 마지막 구간을 요청하면, 모델은 가끔 SRT가 아닌 무언가를 돌려준다 — 사과, 영상 묘사, 자막만 빼고 전부. 해결책은 재시도 한 번, 형식 요구를 더 강하게 다시 말하는 것. 「설명하지 마라, 사과하지 마라, 1이라는 줄부터 출력을 시작하라.」 그걸로 충분했다.
전체를 한 번에 요청하니 28분에 큐 60개가 돌아왔다 — 평균 29초. 단어는 맞았고 요약에는 영향이 없었지만, 라이브 자막으로는 쓸 수 없었다. 글자 벽이 화면에 30초씩 걸려 있는 꼴이다. 「각 큐는 최대 8초」 한 줄을 더하니 207개, 평균 8.3초가 됐다. 추가 비용? 약 1센트.
정직한 가격표
자막이 전혀 없는 30분짜리 영상을 자신의 Gemini 키로 한 번 옮기는 데 약 0.05달러(Google의 YouTube URL 입력은 현재 프리뷰 단계라 실제로는 무료).
이 기능은 기본적으로 꺼져 있다. 당신 자신의 AI 크레딧을 쓰기 때문에, 스스로 켜는 스위치로 만들었다 — 설정 > 자막이 없는 영상 — 그리고 실행 중에는 진행 표시가 지금 무엇을 하고 있는지 분명히 말한다. 비용을 대신 내지 않고, 숨기지도 않는다. 첫날부터 그런 약속이었다.
그 1만 명 게시물의 마지막 문장은 「2만을 넘을 때 다시 만나요」였다. 지켰다. 「CC 자막이 없는 영상 커버」 — 이제 이것도 지켰다.
DeepSRT는 한 번 구매, 구독 없음. Mac App Store에서.