MEDIABROWSER 공개 릴리스 - 설치자/패키지 배포 전용 (소스는 별도 저장소)
Find a file
2026-08-15 15:22:44 +09:00
build deploy: remote build scripts (build-remote.sh, install-buildkey.ps1) + self-hosted build machine setup 2026-08-15 13:33:44 +09:00
VideoDownloader.App Phase C (T2-1..T3-10): command palette, reader mode (real Readability.js, E2E), boost force-dark, screenshot, split view, vertical tabs, Glance (Alt+click), tab groups (6 colors), workspaces, speed dial, InPrivate tabs, quick find, source view, print, PiP, TTS (94 tests GREEN) 2026-08-15 15:22:44 +09:00
VideoDownloader.Avalonia Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
VideoDownloader.Browser Phase C (T2-1..T3-10): command palette, reader mode (real Readability.js, E2E), boost force-dark, screenshot, split view, vertical tabs, Glance (Alt+click), tab groups (6 colors), workspaces, speed dial, InPrivate tabs, quick find, source view, print, PiP, TTS (94 tests GREEN) 2026-08-15 15:22:44 +09:00
VideoDownloader.Cli Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
VideoDownloader.Core refactor(3): VideoDownloader.Browser library - tabs/find/search-engine/zoom/bookmark-history stores extracted from App (66 GREEN) 2026-08-15 15:02:23 +09:00
VideoDownloader.Tests Phase C (T2-1..T3-10): command palette, reader mode (real Readability.js, E2E), boost force-dark, screenshot, split view, vertical tabs, Glance (Alt+click), tab groups (6 colors), workspaces, speed dial, InPrivate tabs, quick find, source view, print, PiP, TTS (94 tests GREEN) 2026-08-15 15:22:44 +09:00
.env.example deploy: .env template + gitignore hardening (.env* ignored, template whitelisted) 2026-08-15 12:39:36 +09:00
.gitignore deploy: .env template + gitignore hardening (.env* ignored, template whitelisted) 2026-08-15 12:39:36 +09:00
BACKLOG.md Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
BROWSER_FEATURES_PLAN.md Phase A: tab architecture integrated into MainWindow - tab strip UI, per-tab WebView2 lifecycle, new-window->tab w/ deferral, audio indicator/mute, session save/restore, shortcuts; E2E on real window (56 tests GREEN) 2026-08-15 14:48:17 +09:00
DEPLOYMENT_PLAN.md deploy: self-hosted build machines operational (vd-linux/vd-mac) - 4 artifacts built & native-exec E2E passed (HLS download EXIT=0 on both) 2026-08-15 13:46:05 +09:00
downloader.py Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
MOBILE_PLAN.md Phase A: tab architecture integrated into MainWindow - tab strip UI, per-tab WebView2 lifecycle, new-window->tab w/ deferral, audio indicator/mute, session save/restore, shortcuts; E2E on real window (56 tests GREEN) 2026-08-15 14:48:17 +09:00
README.md Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
requirements.txt Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
VideoDownloader.slnx refactor(3): VideoDownloader.Browser library - tabs/find/search-engine/zoom/bookmark-history stores extracted from App (66 GREEN) 2026-08-15 15:02:23 +09:00

비디오 다운로더 (HLS / MP4)

maccms 계열 스트리밍 사이트(tvchak208 등)의 영상을 다운로드하는 도구입니다. HLS(.m3u8) 분할 재생과 직접 MP4 모두 지원합니다.

기능

  • 페이지 URL 자동 분석: 재생페이지 URL만 넣으면 player_aaaa 설정 / 정규식 / iframe 플레이어에서 m3u8·mp4 주소를 자동 추출
  • HLS 완전 지원: 마스터 재생목록(최고 화질 자동 선택), AES-128 복호화, fMP4(#EXT-X-MAP) 초기화 세그먼트
  • 병렬 다운로드 + 이어받기: 도중에 끊겨도 재실행 시 받은 분할은 건너뜀
  • ffmpeg 자동 리먹스: TS / fMP4 → MP4 (-c copy, 무손실·빠름)
  • 커스텀 헤더: --referer 등으로 CDN 토큰 인증 대응

준비

pip install -r requirements.txt
# ffmpeg 권장 (https://ffmpeg.org). PATH에 있으면 자동 인식됨.

사용법

1) 가장 간단 — 페이지 URL만

python downloader.py "https://tvchak208.com/index.php/vod/play/id/123367/sid/1/nid/1.html" -o 영상제목

2) m3u8 주소를 직접 넘기기 (가장 확실, 아래 참고)

python downloader.py "https://cdn.example.com/.../index.m3u8" -o 영상제목 --referer "https://tvchak208.com/"

3) 추가 헤더가 필요한 경우

python downloader.py "https://.../index.m3u8" -o 영상제목 \
    --referer "https://tvchak208.com/" \
    -H "Origin: https://tvchak208.com"

옵션 요약

옵션 설명
-o, --output 출력 파일명 (확장자 생략 가능, 기본 video)
--referer Referer 헤더. 403/401 날 때 페이지 주소를 지정
-H "K: V" 추가 헤더 (여러 개 가능)
-c, --concurrency 동시 연결 수 (기본 8)
--user-agent User-Agent 재정의
--keep-parts 병합 후 분할 임시파일 유지(디버그)

이 사이트에서 m3u8 주소 직접 구하기 (추천)

페이지 자동 추출이 안 될 때(사이트마다 난독화가 다름) 가장 확실한 방법:

  1. Chrome/Edge로 재생페이지 열기
  2. F12 → Network(네트워크) 탭
  3. 필터에 m3u8 입력
  4. 영상 재생 버튼 클릭
  5. 목록에 뜬 .m3u8 요청 위에서 우클릭 → Copy → Copy link address
  6. 그 주소를 다운로더에 넘김:
    python downloader.py "복사한_m3u8_주소" -o 영상제목 --referer "https://tvchak208.com/"
    

팁: index.m3u8(마스터)과 *.m3u8(미디어)이 모두 뜰 수 있는데, 마스터를 넘겨도 최고 화질을 자동 선택합니다. 가장 위쪽 m3u8을 고르면 됩니다. 403/401 에러가 나면 반드시 --referer로 재생페이지 주소를 지정하세요.

문제 해결

  • 페이지에서 영상 주소를 찾지 못했습니다 → 위 "m3u8 주소 직접 구하기" 방법 사용
  • 403/401 → --referer "페이지 주소" 추가 (필요시 -H "Origin: ..." 도 함께)
  • 암호화 영상입니다. pycryptodome 필요 → pip install pycryptodome
  • MP4로 안 변환됨 → ffmpeg 설치 확인 (ffmpeg -version)