- reader_page: 그림 · 만화 · PDF 보기. 오른쪽 1/3 누르면 다음, 왼쪽은 이전, 가운데는 막대 보이기 · 숨기기, 좌우로 밀어도 넘김. 한 쪽 맞추기 · 좌우 맞추기, 넘기는 방향 (오른쪽→왼쪽 만화), 어둡게 · 밝게, 쪽 막대. - 그림: 탐색기의 지금 정렬 순서대로 같은 폴더 그림을 넘김. 대상 확장자는 환경 설정 > 파일 탐색기에서 고름. - PDF (pdfrx): 보기, 페이지 지우기, 그림을 페이지로 넣기, 저장 (빈 새 문서에 보이는 순서대로 조립 - 원본 문서 페이지 목록을 바꾸면 pdfrx 가 엉뚱한 페이지를 남겼음). 원본은 사본으로 열어 덮어쓰기 가능하게. - 그림 → PDF: 탐색기 메뉴 "PDF 로 만들기" (표시한 그림들을 한 장씩). - ZIP · CBZ: 목록 · 골라서 / 모두 풀기 (다른 창 · 새 폴더 · 같은 폴더), 만화 보기 (설정에서 바로 보기 켜기 · 끄기). - 탐색기 메뉴 "보기", WebDAV 파일도 (받아서). - 시험: reader_test (ZIP · 넘기기 · 설정), integration_test/pdf_test (실제 pdfium). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| android | ||
| assets | ||
| integration_test | ||
| lib | ||
| packages | ||
| test | ||
| test_assets | ||
| test_driver | ||
| tool | ||
| windows | ||
| .gitignore | ||
| .metadata | ||
| LICENSE | ||
| README.md | ||
| THIRD_PARTY_NOTICES.txt | ||
| analysis_options.yaml | ||
| pubspec.lock | ||
| pubspec.yaml | ||
README.md
![]()
JJ_MKVMaker
동영상에 자막을 넣어 MKV 로 만들고, 자막을 편집 · AI 로 생성 · 번역하고, 동영상을 재생하는 무료 Windows 프로그램입니다. (Android 이식 예정)
- 모든 AI 처리(음성인식 · 번역)는 내 PC 안에서 이루어집니다. 영상이나 자막을 외부로 보내지 않습니다.
- 설치 없이 폴더째 실행합니다. 필요한 프로그램이 없으면 처음 실행할 때 물어보고 받아 줍니다.
- 무료 · 오픈 소스 (MIT) · 광고 없음
주요 기능
| 기능 | 내용 |
|---|---|
| MKV 만들기 | 동영상 + 자막(여러 언어) → jj_mkv\동일파일명.mkv. 같은 폴더의 자막 자동 추가, 내장 자막 삭제·수정, 언어 태그 |
| 인코딩 | 원본 유지(재인코딩 없음) 또는 H.264 · H.265 · VP9 · AV1 · MPEG-4, 720p ~ 8K, 화질 3단계 |
| 자막 편집 | SRT · SMI · ASS · VTT · 내장 자막 편집, 문자셋 변환(UTF-8 · CP949 · Shift-JIS · GBK · UTF-16) |
| 싱크 맞추기 | 영상을 보면서 편집, 타임라인에서 끌어서 이동·길이 조절, "선택 줄부터 여기로 맞추기" |
| AI 자막 | Whisper 음성인식 → 파일명_AI.srt, NLLB 번역 → 파일명_ko.srt · _en · _ja … (200개 언어) |
| 자막 번역 | 이미 있는 자막(예: 영어)을 원하는 언어로 번역해 MKV 에 추가. 인터넷에서 받은 자막도 한국어로 함께 번역 |
| 인터넷 자막 찾기 | OpenSubtitles.com 검색 (영상 해시로 "이 파일용" 자막 우선) |
| 동영상 플레이어 | 재생 목록, 전체 화면, 팝업(항상 위), 원본의 0.5·1·2·4배, 자막·음성 트랙 선택, 속도 |
| 탐색기 연결 | 오른쪽 클릭 "JJ_MKVMaker 로 재생" / "JJ_MKVMaker 로 자막 만들기", 끌어다 놓기. 더블클릭(연결 프로그램)으로 열면 바로 재생 또는 목록에 추가, 켜져 있는 창 / 새 창 (환경 설정) |
| 창 · 종료 | 창 위치 · 동영상 목록 기억, 여러 창의 목록 자동 맞춤. 종료(✕)를 누르면 백그라운드로 계속 / 모두 종료 / 매번 고르기 (환경 설정). 완전 종료는 트레이 아이콘 > 종료 |
| 다운로드 | Ctrl+C 로 복사한 YouTube 주소 → yt-dlp, 마그넷 · .torrent → aria2 (백그라운드, 트레이). 다 받은 영상은 편집 목록에 자동 추가 |
| 웹 브라우저 | 앱 안 브라우저(Edge WebView2)로 보다가 [다운로드], 즐겨찾기(Chrome · Edge · Whale 에서 가져오기), 로그인 쿠키를 yt-dlp 와 공유, 다른 언어 페이지를 화면 언어로 자동 번역 (Google 번역), JavaScript 끄기 |
| 작업 대기열 · 화면 분할 | AI 자막 · 번역 · MKV 만들기를 차례로 백그라운드 실행, 브라우저 옆 [작업 현황] 에서 진행 확인 |
| 일괄 작업 | 동영상 목록에서 여러 개를 체크(전체 선택 · 이름/날짜 정렬) → [자막 만들기] · [자막 만들기 & MKV 만들기] · [선택한 파일 재생] · [MKV 만들기] |
| 상태 표시 · 화면 크기 | 모든 화면 오른쪽 위에 CPU · MEM · 다운로드 디스크 남은 용량, 화면 크기 [−] 100% [+], 환경 설정 · 종료 버튼 |
| 끌어다 놓기 · 오른쪽 클릭 | 어느 화면에서든 동영상 · 폴더를 놓으면 목록에 추가. 목록에서 오른쪽 클릭: 폴더 열기 · 재생 · 자막 만들기 · 자막 찾기 · 삭제 |
실행
- Releases 에서
JJ_MKVMaker_v*_win64.zip을 받아 원하는 폴더에 풉니다. jj_mkvmaker.exe를 실행합니다. (Windows 10/11 64비트)- 폴더 전체가 프로그램입니다. 맨 위의
jj_mkvmaker.exe는Lib\안의 프로그램을 실행하는 시작 프로그램이고, 작업 기록은Logs\에 남습니다. exe 파일 하나만 옮기면 동작하지 않습니다.
처음 쓸 때 내려받는 것 (한 번만):
| 항목 | 크기 | 언제 |
|---|---|---|
| Whisper base / small 음성인식 모델 | 148MB / 488MB | 처음 "AI 자막 만들기" 할 때 |
| NLLB-200 번역 모델 | 약 910MB | 처음 번역할 때 |
모델은 프로그램 폴더의 models\ 에 저장됩니다. (환경 변수 JJ_MKVMAKER_MODELS 로 위치 변경 가능)
인터넷 자막 찾기 (선택)
OpenSubtitles 의 무료 API 키가 필요합니다.
- opensubtitles.com 가입
- 프로필 → API consumers → New consumer 에서 키 만들기
- 프로그램의 환경 설정 → 인터넷 자막 에 키 입력 (아이디·비밀번호는 선택, 넣으면 하루 받기 횟수가 늘어남)
단축키
| 화면 | 단축키 |
|---|---|
| 플레이어 | Space 재생/정지 · ←/→ 10초 · Shift+←/→ 1분 · ↑/↓ 음량 · F 전체 화면 · Esc 나가기 · N/P 다음/이전 · M 음소거 · S 자막 · L 재생 목록 |
| 자막 편집 | Ctrl+Space 재생/정지 · Alt+←/→ 1초 · Alt+Shift+←/→ 0.1초 · F7 새 줄 · F8 선택 줄 재생 · F9 시작=현재 · F10 끝=현재 |
| 브라우저 | Ctrl+L 주소창 · F5 새로고침 · Alt+←/→ 뒤로/앞으로 · Ctrl+D 즐겨찾기 · Ctrl+Shift+B 즐겨찾기 관리 · Ctrl+Shift+J 작업 현황 |
| 어디서나 | Ctrl+Shift+X 창 보이기 / 트레이로 숨기기 (환경 설정에서 변경) |
버전
년.월.일_순번 (예: 2026.09.30_001). 같은 날 다시 내면 순번이 늘고, 날이 바뀌면 001 부터 다시 시작합니다.
번호 올리기: powershell -File tool\next_version.ps1 (pubspec.yaml 에는 Flutter 형식 2026.9.30+1 로 적힙니다)
소스에서 빌드
필요: Flutter 3.47+, Visual Studio 2022 Build Tools (C++ 데스크톱), Windows 개발자 모드, PATH 에 nuget.exe (앱 안 브라우저 WebView2 빌드용)
git clone <이 저장소>
cd app
powershell -File tool\fetch_ffmpeg.ps1 # third_party\ffmpeg\windows 에 FFmpeg 준비
powershell -File tool\fetch_tools.ps1 # third_party\tools\windows 에 yt-dlp · aria2 · Deno 준비
powershell -File tool\fetch_rsync.ps1 # third_party\rsync\windows 에 rsync (MSYS2, SHA256 고정) 준비
flutter pub get
flutter build windows --release # build\windows\x64\runner\Release
Android 의 rsync: Git Bash 에서 sh tool/build_rsync_android.sh (Android NDK 로 rsync 3.4.1 소스를 빌드해 third_party/rsync/android 에 둠, APK 에 들어감)
테스트: flutter test (AI 모델 · 인터넷이 필요한 테스트는 자동으로 건너뜀)
구조
lib/
├─ core/ 자막 · 문자셋 · FFmpeg 명령 · 재생 목록 규칙 등 순수 로직 (플랫폼 무관)
├─ app/ 화면 상태 · 설정 · 다운로드 관리
├─ ui/ 화면 (어두운 테마)
├─ services/ 플랫폼 경계 (인터페이스)
└─ platform/
├─ common/ Windows · Android 공용 구현 (mpv 플레이어, Whisper, NLLB, OpenSubtitles)
└─ windows/ Windows 전용 (FFmpeg 프로세스, 트레이, 단축키, 탐색기 메뉴, yt-dlp, aria2)
packages/whisper_ggml/ Windows 힙 손상 버그를 고친 whisper_ggml 사본 (JJ_PATCH.md)
Android 이식 시 platform/android/ 구현과 services/platform_services.dart 분기만 추가하면 됩니다.
라이선스
- JJ_MKVMaker 소스 코드: MIT
- 포함 · 사용하는 구성 요소: THIRD_PARTY_NOTICES.txt
- FFmpeg (GPLv3) · aria2 (GPLv2) 는 수정하지 않은 별도 실행 파일로 함께 제공
- libmpv (LGPL), whisper.cpp · ONNX Runtime (MIT), yt-dlp (Unlicense), Deno (MIT)
- NLLB-200 번역 모델은 CC-BY-NC 4.0 (비상업적 이용만) — 이 프로그램은 무료 배포이며, 모델은 사용자가 직접 내려받습니다
주의
- YouTube 등에서 받은 영상, 토렌트로 받은 파일, 인터넷에서 받은 자막의 저작권 책임은 이용자에게 있습니다. 권리가 있는 콘텐츠만 받으세요. YouTube 이용 약관도 확인하세요.
- 토렌트는 받는 동안 다른 사용자에게 조각을 올려 줍니다. 받기가 끝나면 올려 주기(시딩)는 바로 멈춥니다.
- "CapCut", "MakeMKV", "VLC" 는 각 소유자의 상표이며 이 프로그램과 관계가 없습니다.