YTDL 튜브저장소
YouTube 영상을 다양한 포맷과 화질로 변환·저장할 수 있는 웹 애플리케이션입니다.
프로젝트 소개
YTDL · 튜브저장소는 YouTube 영상을 다양한 포맷과 화질로 변환·저장할 수 있는 웹 애플리케이션입니다. Apache + PHP 환경에 추가 서버 설정(리버스 프록시, Node.js, Flask 등) 없이 바로 올려서 사용할 수 있도록 설계되었습니다.
주요 기능
📥 다운로드 포맷 및 화질
| 포맷 | 설명 | 화질 선택 |
|---|---|---|
| MP4 | 영상 + 오디오 병합 | 144p · 360p · 480p · 720p · 1080p · 2160p (4K) |
| MP3 | 오디오 추출 | 128 · 192 · 256 · 320 kbps |
| WEBM | 웹 최적화 영상 | 144p ~ 4K |
| M4A | 고품질 오디오 | 최고 품질 고정 |
🎬 동영상 분석
분석 버튼 클릭 시 메타데이터를 수집해 표시합니다.
- 제목 · 채널명 · 조회수 · 좋아요 수 · 업로드일 · 재생시간
- 설명 (최대 300자, 펼치기/접기)
- 사용 가능한 해상도 dot 표시 (실제 스트림 기준)
- YouTube Shorts 자동 감지 — 원본 URL의
/shorts/경로 또는 재생시간 60초 이하
▶ 미리보기
- 썸네일 클릭 시 YouTube 임베드 플레이어 인라인 로드 (autoplay)
- 다운로드 완료 후 MP4·WEBM은 브라우저 내 영상 미리보기 플레이어 표시
⚙️ 내장 옵션
| 옵션 | 지원 포맷 | 내용 |
|---|---|---|
| 자막 포함 | MP4 전용 | 한국어·영어 자동자막 SRT 내장 (--embed-subs) |
| 썸네일 저장 | MP4 · MP3 · M4A | 커버아트 내장 (--embed-thumbnail) |
| 메타데이터 | 전 포맷 | 제목·채널·날짜 태그 내장 (--embed-metadata) |
🕘 다운로드 히스토리
- 세션 중 최근 6개 목록 유지
- 썸네일 · 제목 · 포맷 · 화질 표시
- 항목별 재다운로드 버튼 (로딩 애니메이션 포함)
- 썸네일 로드 실패 시
hqdefault.jpg폴백 - 회원 / 비회원 구분 다운로드 제한
🎨 UI · 테마
- 6종 컬러 팔레트 — Ocean · Violet · Emerald · Rose · Amber · Slate
- PHP 세션 기반 랜덤 배정 (새로고침 유지 · 새 탭 재추첨)
- 다크/라이트 각각 별도 CSS 변수 세트
- 야간/주간 모드 토글 (localStorage 저장)
- 로딩 점 애니메이션 (분석 중 · 히스토리 재다운로드 중)
- 진행률 바 시뮬레이션 (변환 중 0→95%, 완료 시 100%)
- 토스트 알림 (성공/오류 구분)
- 반응형 레이아웃
기술적 특징
썸네일 폴백 시스템
서버 사이드 curl로 maxresdefault → sddefault → hqdefault → mqdefault → default 순으로 실제 존재 여부를 확인 후 리다이렉트합니다. 브라우저에 404가 전달되지 않습니다. 결과값을 1시간 캐시하며 하루 1회 만료 파일을 자동 청소합니다.
파일명 완벽 처리
Content-Disposition: filename*=UTF-8''... RFC 5987 방식으로 한글·이모지·특수문자 파일명을 정상 처리합니다. ASCII 안전본(filename=)을 동시에 제공해 구형 브라우저도 대응합니다.
임시 파일 자동 관리 변환 완료 후 영상·자막·썸네일 등 관련 파일 전체를 즉시 삭제합니다. 다운로드 요청마다 1시간 초과 잔여 파일도 함께 청소합니다.
URL 정규화
/shorts/ID → watch?v=ID, youtu.be/ID → watch?v=ID 자동 변환. watch?v= · shorts/ · youtu.be/ · embed/ · live/ 5가지 형식 지원.
보안
- Referer 검증 (다운로드 엔드포인트)
escapeshellarg()로 커맨드 인젝션 방지- YouTube 도메인 정규식 화이트리스트 검증
- Video ID 패턴 검증
이 개발자의 다른 프로젝트
수정 이력 (4)
다운로드 인코딩 변환 과정 실시간 확인
인코딩시 영상과 음성 싱크 개선
비회원 1일 다운로드 횟수 제한, 회원 무제한
회원 비회원 다운로드 권한 선택 기능 추가
좋아요! 주소 입력창에 전에 입력했던 주소 삭제 버튼만 추가 됐으면 더 좋겠습니다!
붙여넣기 클릭하면 자동으로 교체 됩니다.^^
붙여넣기 클릭하면 자동으로 교체 됩니다.^^