로컬 기반 LLM을 활용한 자막 번역 시스템 구축
- Develop/Release
- 2025. 6. 25.

개요
기존에는 Papago API나 DeepL과 같은 외부 번역 API를 활용해 자막 파일을 번역해왔습니다. 이들 서비스는 번역 품질이 우수하지만, 대부분 일정량의 무료 크레딧이 일일 혹은 월 단위로 제한되어 있어, 대용량 번역 작업이나 지속적인 사용에는 비용 부담이 발생합니다.
이에 따라 최근에는 로컬(Local) 환경에서 실행 가능한 LLM(Language Model) 기반의 자막 번역 시스템을 구현해보았습니다.
다운로드
- update: 2025.06.26
✅ 로컬 LLM을 사용하는 이유
로컬 LLM을 활용하면, 현재 사용 중인 PC의 리소스를 기반으로 번역 작업을 수행하게 됩니다. 따라서 추가적인 비용 없이 전력 사용량만으로도 충분히 번역 기능을 이용할 수 있다는 장점이 있습니다.
또한, 사용자의 하드웨어 성능, 특히 GPU(VGA) 성능에 따라 다음과 같은 다양한 오픈소스 LLM 모델들을 선택적으로 사용할 수 있습니다:
- Gemma
- LLaMA
- DeepSeek
- Mistral
- Falcon
- Phi
- Qwen
- Exaone (국내 개발 모델)
💡 향후 활용 방안
이 시스템은 단순히 로컬에서만 작동하는 것이 아니라, 향후 다음과 같은 방향으로 확장 가능합니다:
- REST API 서버로 구축하여 외부 웹서비스 형태로 제공
→ 번역 기능을 다양한 클라이언트와 연동 가능 - 개인 맞춤형 번역 도구나 오프라인 기반 번역기 형태로 활용
→ 인터넷 연결 없이도 고품질 번역 제공
🔒 향후 개선 및 보완할 사항
현재는 자막 파일 내 각 문장을 개별적으로 번역하고 있습니다. 하지만 이 방식은 문맥(Context)을 고려하지 않기 때문에, 자연스러운 번역 결과를 위해 다음과 같은 개선이 필요합니다:
- 앞/뒤 문맥을 함께 고려한 번역 기능 구현
→ 예: Sliding window 방식의 문장 묶음 번역 - 자막 시간 정보와 함께 번역 흐름 최적화
→ 영상 내 대화 흐름에 맞춘 자연스러운 결과 도출
📝 마무리
이제 누구나 자신의 PC에서 무료로 LLM 기반 자막 번역기를 만들어 활용할 수 있는 시대입니다. 적절한 모델과 환경만 갖춘다면, 기존 유료 API에 의존하지 않고도 높은 수준의 번역 결과를 얻을 수 있습니다. 앞으로도 관련 기능들을 지속적으로 개선하여, 더욱 자연스럽고 실용적인 번역 도구로 발전시켜 나갈 예정입니다.
🧾 전체 요구사항 정리(Python + LLM)
📁 0. 개요(목표)
- LM Studio의 Rest API를 이용하여, python기반 Local LLM을 이용하여 번역 모듈 구성
📁 1. 자막 파일 처리 대상
- subtitles/ 폴더 안의 .srt, .vtt 파일 대상
- 하위 폴더 포함하여 재귀 탐색 (rglob) 처리
- 다양한 언어명이 포함된 파일명 처리 (예: English, Dutch, _en, .en 등)
🔤 2. 번역 처리
- LLM(로컬 혹은 OpenAI API) 이용하여 영어 → 한국어 (또는 설정값 기반) 자동 번역
- LLM은 OpenAI Chat Completion 포맷 사용 (messages 기반)
- 프롬프트는 외부 텍스트 파일(prompt_template.txt)에서 관리
🏷️ 3. 파일명 처리
- 번역된 파일은 기존 자막 파일명에서 언어표시(English, en, 등)를 제거한 형태로 저장
- 파일명 정리는 LLM을 이용해 수행하며, 그 프롬프트는 filename_prompt_template.txt에서 관리
- LLM 응답 후 불필요한 접두어(Output: 등)를 제거하며, Windows 파일 시스템에 허용되지 않는 문자는 제거
📂 4. 출력 구조
- 출력 디렉토리는 .env에서 OUTPUT_PATH로 지정
- 결과 파일은 output/ 폴더 아래에 subtitles/와 동일한 하위 폴더 구조로 저장
- 예: subtitles/a/b/video.en.srt → output/a/b/video.ko.srt
# 입력 경로(input path)
📁 subtitles/
├── 📁 a/
│ └── lecture.en.srt
└── 📁 b/
└── 📁 b1/
└── video.en.vtt
# 출력 경로(output path)
📁 output/
├── 📁 a/
│ └── lecture.ko.srt
└── 📁 b/
└── 📁 b1/
└── video.ko.vtt
⚙️ 5. 환경 및 설정 관리
- setting.env 파일로 주요 환경 설정 관리:
LM_API_URL=http://localhost:1234/v1/chat/completions
LM_MODEL=lgai-exaone/exaone-3.5-2.4b-instruct
SOURCE_LANG=en
TARGET_LANG=ko
SEARCH_PATH=./subtitles
OUTPUT_PATH=./output
- 프롬프트 정의 파일:
- prompt_template.txt: 자막 번역용
- filename_prompt_template.txt: 파일명 정리용 - (옵션) filename_rule.txt: 정규표현식을 통한 후처리 규칙 적용 가능
⚙️ 6. 프롬프트(prompt) 설정
- 사용자 프롬프트를 이용하여 번역 스타일 및 자막파일의 형식을 지정할 수 있도록 함
- 번역스타일: prompt_template.txt
- 자막파일 형식: filename_prompt_template.txt
- prompt_template.txt (예시)
You are a professional subtitle translator.
Translate the following sentence from {SOURCE_LANG} to {TARGET_LANG}.
Only return the translated result without explanation or extra formatting.
Input:
{text}
Output:
- filename_prompt_template.txt (예시)
You are a filename normalizer.
Your job is to remove only the language indicators such as "English", "Dutch", "Indonesian", or language suffixes like "_en", ".en", "-en" when they appear at the end of a filename — just before the file extension.
Do not remove or change any other part of the filename. Keep all punctuation, numbers, and spacing intact.
Example 1:
Input: 12 - Creating a Random Subtitle.en
Output: 12 - Creating a Random Subtitle
Example 2:
Input: 90 - Constructive Feedback Dutch
Output: 90 - Constructive Feedback
Input: {base_name}
Output:
🧠 6. 향후 확장 고려
- 변환 실패 항목 로그 저장 (예: error_log.txt)
- CLI 옵션으로 설정값 오버라이드 (ex. --source-lang en --target-lang ko)
지원 포맷 확장 (.ass, .sbv, .ttml 등)
'Develop > Release' 카테고리의 다른 글
로컬 기반 LLM을 활용한 자막 번역 시스템 사용 방법 (0) | 2025.06.26 |
---|---|
자막(*.srt) 번역 프로그램(Kmelon Translator) v2.0.1.3 (43) | 2021.10.11 |
키워드(태그)를 이용한 음악파일 관리 툴 r2.1.3.2 (4) | 2020.12.30 |
폰트 뷰어 관리자 툴 R.105 (4) | 2020.12.20 |
바탕화면 자동 변경 모듈 (DesktopWallpaper) R.104 (0) | 2020.12.18 |
한글 인코딩 변환 작업 (0) | 2020.12.14 |
리소스 관리 툴 (0) | 2020.12.11 |
자율주행 자동차 데이터셋 관리 툴 소개 (0) | 2020.11.24 |
Visual Studio Project Cleaner (프로젝트 청소기) (0) | 2020.11.20 |
Visual studio에서 openCV 라이브러리 초간단 설정 방법 (0) | 2020.11.20 |