어순이 다른 언어의 자막은 왜 어색해지는가 — subtitle-pro 공개
기존에 쓰던 자막 생성기 앱을 웹 서비스로 바꿔 AGPL-3.0 오픈소스로 공개한다. 문장 단위로만 번역하면 어색해지는 영한 자막을 어떻게 다뤘는지, 생성 과정과 비용, 한계까지 정리했다.

유튜브에서 자동 생성되는 자막의 품질이 아쉬울 때가 많았습니다. 특히 영어와 한국어는 어순이 다르기 때문에 단순히 문장 단위로 번역하면 자막이 어색해지거나, 영상의 흐름과 맞지 않는 경우가 많았는데요.
조금 더 간편하고 빠르게 자막을 생성하면서도 자연스러운 영한 번역이 가능하도록 여러 프롬프트와 번역 방식을 실험해 적용했습니다. 기존에 사용하던 자막 생성기 앱을 이번에 웹 서비스 기반으로 변경하여 AGPL-3.0 오픈소스로 공개합니다.
https://github.com/revfactory/subtitle-pro
자막 생성 과정
- yt-dlp로 원본 영상에서 음성을 MP3로 추출
- AssemblyAI의 STT(Speech-to-Text)를 이용해 영문 자막 생성
- Anthropic Sonnet 5를 이용해 한글 자막으로 변환
- 생성된 자막을 기존 유튜브 영상 위에 오버레이하여 재생
25분 영상 기준 1분 40초 정도 걸립니다.
사용 방법
유튜브 영상 주소가 다음과 같다면,
https://www.youtube.com/watch?v={video_id}
로컬 웹 서비스에서는 아래와 같이 접속해 자막이 적용된 영상을 볼 수 있습니다.
http://localhost:3001/watch?v={video_id}
화면은 영상 시청에 집중할 수 있도록 심플하게 구성했으며, Tailwind CSS와 shadcn/ui를 사용했습니다. 자세한 내용은 GitHub 내 README를 참고해주세요.
필요한 API 키와 비용
필요한 키는 Anthropic API Key와 AssemblyAI API Key 두 개입니다.
- AssemblyAI: 정해진 쿼터 내에서 무료 사용 가능
- Anthropic Sonnet 5: 25분 영상 기준 약 0.5~1달러 수준
캐싱 적용 여부와 자막 분량에 따라 비용은 달라질 수 있습니다. 발생한 비용은 cache 폴더 내부의 JSON 파일에 계산되어 저장됩니다.
사용한 하네스 프롬프트
/harness 유튜브 영상의 프리미엄 한글 자막 서비스를 만들고자 합니다.
예를 들어 웹사이트 URL이 https://www.youtube.com/watch?v={video_id}일 때,
http://localhost:3001/watch?v={video_id}로 입력하면 해당 영상의 자막을 생성해
기존 유튜브 영상에 오버레이하여 보여주는 서비스입니다.
한글 자막 생성 로직은 subtitle-translator-v2 프로젝트를 참고하여 구현합니다.
레이아웃은 심플하면서도 영상을 보기에 최적화된 UX/UI를 제공하며,
Tailwind CSS와 shadcn/ui를 사용합니다.
현재 한계점
- 새롭게 등장한 기술 용어나 고유명사가 잘못 인식될 수 있습니다.
- 영한 번역 과정에서 일부 문장이 과도하게 의역되거나 생략되는 경우가 있습니다.
- 영상과 자막의 타이밍이 완벽하게 일치하지 않는 구간이 발생할 수 있습니다.
라이선스
이 오픈소스는 AGPL-3.0 라이선스가 적용됩니다.
아직 개선할 부분은 많지만, 유튜브 영어 영상을 조금 더 편하게 시청하는 데 도움이 되길 바랍니다. 관심 있으신 분들은 사용해보시고 이슈나 개선 의견을 남겨주세요.