MEDIABROWSER 공개 릴리스 - 설치자/패키지 배포 전용 (소스는 별도 저장소)
Find a file
2026-08-15 12:14:35 +09:00
build Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
VideoDownloader.App Phase 0 (T1-3/4/7/9/11): find bar w/ native Find API + search engine + site zoom + force reload + F11, wired into MainWindow, E2E smoke (39 tests) 2026-08-15 12:14:35 +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.Cli Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
VideoDownloader.Core Phase 0 (T1-3/4/7/9/11): find bar w/ native Find API + search engine + site zoom + force reload + F11, wired into MainWindow, E2E smoke (39 tests) 2026-08-15 12:14:35 +09:00
VideoDownloader.Tests Phase 0 (T1-3/4/7/9/11): find bar w/ native Find API + search engine + site zoom + force reload + F11, wired into MainWindow, E2E smoke (39 tests) 2026-08-15 12:14:35 +09:00
.gitignore Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +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 Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +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 Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +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 T1-4/T1-7: search engine resolver + site zoom store (TDD RED->GREEN, 32 tests) 2026-08-15 12:04: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)