Go to file
RyuJongJin 9a786f3496 WIP 88 SFTP 2/3: 화면 - 환경 설정 SFTP 서버 · 탐색기 탭 · 처음 키 확인 · 고르는 곳 · 라이선스 고지 (미완)
- 환경 설정 > 파일 탐색기 > SFTP (lib/ui/sftp_settings.dart): 추가 · 고치기 · 지우기 (쓰는 곳 알림), 서버 주소 · 포트 · 아이디 ·
  비밀번호 · 개인 키 파일 고르기 (내용만 안전 저장소에, 원래 경로는 저장하지 않음) · 키 암호 · 시작 폴더 · 오래된 ssh-rsa 허용,
  [연결 확인] 에서 처음 보는 키는 지문을 보이고 [믿고 연결], 믿은 키 보기 · [믿은 키 지우기] (마스터 비밀번호 뒤).
- 파일 탐색기 · Rsync 화면: SFTP 서버 탭 (🔑), 탭 길게 누르기 = 고치기, 끝 버튼에 [SFTP 서버 추가] (좁으면 ⋮ 메뉴에).
  처음 연결: 목록 대신 "처음 연결하는 서버입니다 · 지문" 안내와 [지문 확인하고 연결] → 확인 창 [믿고 연결] → 지문을 설정에 저장하고 읽음.
  바뀐 키: 막고 예전 · 지금 지문, [서버 설정 고치기]. 경로 복사는 sftp://아이디@서버:포트/경로 (비밀번호 없음).
- 실시간 동기화 · 모니터링의 폴더 고르기에 SFTP 서버도. 화면 경로 "🔑 서버 › 폴더".
- WebDAV 에만 맞던 글 6개를 "WebDAV · SFTP" 로 (풀기 · ZIP · 분석 · MKV 목록 · Rsync 안내 · 빠른 보기). 탐색기 ⋮ 이름 "경로 입력 · 네트워크 서버".
- 파일 고르기: 확장자 목록이 비면 모든 파일 (확장자가 없는 개인 키 파일 - Windows · Android).
- 라이선스: dartssh2 4.1.0 (MIT) 를 두 고지에 (pointycastle · pinenacl · asn1lib 원문은 패키지 라이선스 화면), 판이 바뀌면 시험이 알림.
- 번역 en · ja · zh-Hans (빠진 번역 0).
- 시험: sftp_explorer_test (시험 서버로 처음 연결 → 지문 → 믿고 연결 → 목록 · 지문 저장), test/support/sftp_server.dart 로 서버 띄우기 공용,
  글이 바뀐 시험 3곳 고침. 전체: 이 4곳 말고 통과, 새로 남은 임시 폴더 0 (move_settled 1번은 powershell 실행 "액세스 거부" - 다시 돌려 통과).
- 내 판단: 끝 버튼 줄에 [SFTP 서버 추가] 아이콘을 하나 더 (WebDAV 와 따로 바로 보이게).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 22:28:35 +09:00
android WIP 86 Android: 7-Zip 25.01 을 공식 소스에서 NDK 로 빌드 (lib7zz.so) - Android 에서도 7z · RAR 풀기 (검토 대기) 2026-10-17 15:17:01 +09:00
assets WIP 88 SFTP 2/3: 화면 - 환경 설정 SFTP 서버 · 탐색기 탭 · 처음 키 확인 · 고르는 곳 · 라이선스 고지 (미완) 2026-10-17 22:28:35 +09:00
integration_test WIP Windows 통합 시험 회귀 (지시 10): 바뀐 동작 · 바깥 주소에 맞게 시험 3곳 고침 (검토 대기) 2026-10-17 18:00:19 +09:00
lib WIP 88 SFTP 2/3: 화면 - 환경 설정 SFTP 서버 · 탐색기 탭 · 처음 키 확인 · 고르는 곳 · 라이선스 고지 (미완) 2026-10-17 22:28:35 +09:00
packages Chrome 엔진: 관리자 권한이면 시작 안 함 (설정으로 허용) · 20초 안전망 · 인증 없는 숨긴 문 (207) · DNS 강제를 앱 시작 맨 앞에 2026-10-12 00:23:20 +09:00
test WIP 88 SFTP 2/3: 화면 - 환경 설정 SFTP 서버 · 탐색기 탭 · 처음 키 확인 · 고르는 곳 · 라이선스 고지 (미완) 2026-10-17 22:28:35 +09:00
test_assets JJ_MKVMaker v1.0.0 2026-09-30 19:35:19 +09:00
test_driver JJ_MKVMaker v1.0.0 2026-09-30 19:35:19 +09:00
tool WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완) 2026-10-17 22:11:07 +09:00
windows WIP 86 보충 (관리자 · 15): 덮어쓰기에도 받는 쪽이 더 새것이면 그대로 · Windows 에서 쓸 수 없는 이름은 미리 건너뜀 · 릴리스에 7-Zip 꼭 (검토 대기) 2026-10-17 14:47:39 +09:00
.gitignore whisper_ggml 사본: 분석에서 build · 플랫폼 폴더 제외, 플러그인 사본의 pubspec.lock 무시 2026-10-02 21:57:44 +09:00
.metadata JJ_MKVMaker v1.0.0 2026-09-30 19:35:19 +09:00
LICENSE JJ_MKVMaker v1.0.0 2026-09-30 19:35:19 +09:00
README.md 라이선스 고지 (62 · 63 · 64) · AI 릴리스 전 수정 (152 · 156 · 157 · 159) 2026-10-09 16:20:15 +09:00
analysis_options.yaml 모르는 구성 요소 보존 (225) · Tor 대기 표시 (226) · 막은 파일 주소 되돌림 (227) · 포트 다시 잡기 2026-10-11 22:56:22 +09:00
pubspec.lock WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완) 2026-10-17 22:11:07 +09:00
pubspec.yaml WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완) 2026-10-17 22:11:07 +09:00

README.md

JJ_MKVMaker

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% [+], 환경 설정 · 종료 버튼
끌어다 놓기 · 오른쪽 클릭 어느 화면에서든 동영상 · 폴더를 놓으면 목록에 추가. 목록에서 오른쪽 클릭: 폴더 열기 · 재생 · 자막 만들기 · 자막 찾기 · 삭제

실행

  1. Releases 에서 JJ_MKVMaker_v*_win64.zip 을 받아 원하는 폴더에 풉니다.
  2. jj_mkvmaker.exe 를 실행합니다. (Windows 10/11 64비트)
  3. 폴더 전체가 프로그램입니다. 맨 위의 jj_mkvmaker.exe 는 Lib\ 안의 프로그램을 실행하는 시작 프로그램이고, 작업 기록은 Logs\ 에 남습니다. exe 파일 하나만 옮기면 동작하지 않습니다.

처음 쓸 때 내려받는 것 (한 번만):

항목 크기 언제
Whisper base / small 음성인식 모델 148MB / 488MB 처음 "AI 자막 만들기" 할 때
NLLB-200 번역 모델 약 910MB 처음 번역할 때

모델은 프로그램 폴더의 models\ 에 저장됩니다. (환경 변수 JJ_MKVMAKER_MODELS 로 위치 변경 가능)

인터넷 자막 찾기 (선택)

OpenSubtitles 의 무료 API 키가 필요합니다.

  1. opensubtitles.com 가입
  2. 프로필 → API consumers → New consumer 에서 키 만들기
  3. 프로그램의 환경 설정 → 인터넷 자막 에 키 입력 (아이디·비밀번호는 선택, 넣으면 하루 받기 횟수가 늘어남)

단축키

화면 단축키
플레이어 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 (라이선스 원문: assets/licenses)
    • FFmpeg · yt-dlp 실행 파일 · rsync (GPLv3+) · aria2 (GPLv2+) 는 수정하지 않은 별도 실행 파일로 함께 제공
    • libmpv (LGPL), PDFium (BSD), whisper.cpp · ONNX Runtime · stable-diffusion.cpp (MIT), Deno (MIT)
    • Android 판은 GPLv3 구성 요소 (FFmpegKit · youtubedl-android · rsync) 를 포함하며, 대응 소스는 같은 판 번호의 태그 (예: v1.2.3) 입니다.
    • NLLB-200 번역 모델은 CC-BY-NC 4.0 (비상업적 이용만) — 이 프로그램은 무료 배포이며, 모델은 사용자가 직접 내려받습니다

주의

  • YouTube 등에서 받은 영상, 토렌트로 받은 파일, 인터넷에서 받은 자막의 저작권 책임은 이용자에게 있습니다. 권리가 있는 콘텐츠만 받으세요. YouTube 이용 약관도 확인하세요.
  • 토렌트는 받는 동안 다른 사용자에게 조각을 올려 줍니다. 받기가 끝나면 올려 주기(시딩)는 바로 멈춥니다.
  • "CapCut", "MakeMKV", "VLC" 는 각 소유자의 상표이며 이 프로그램과 관계가 없습니다.