유튜브 영상 전체가 아닌 필요한 구간만 MP4/MP3로 다운로드하는 도구(Sliceyt.com)를 만들었습니다.
Built A Tool That Lets You Download Youtube Videos into MP4 / MP3 File Only the part You need Not the Whole Video (Sliceyt.com)
핵심 요약
유튜브 영상 전체를 받을 필요 없이 필요한 구간만 바이트 단위로 추출해 다운로드하는 효율적인 도구입니다.
- 핵심 기술 — yt-dlp의 --download-sections 플래그를 활용해 필요한 구간만 바이트 단위로 추출함.
- 최적화 방식 — FFmpeg의 -c copy 옵션으로 재인코딩 없이 빠르게 리먹싱하여 CPU 사용량을 최소화함.
- 인프라 구성 — Railway 환경에서 단일 Gunicorn 워커를 사용하여 파일 경로 충돌 문제를 방지함.
- 봇 탐지 우회 — Deno 런타임을 스레드 락으로 감싸 유튜브의 봇 탐지를 효과적으로 우회함.
sliceyt.com
핵심 아이디어: 30초짜리 클립을 얻으려고 2시간짜리 영상을 통째로 다운로드하는 대신, 필요한 바이트 범위만 가져오는 방식입니다.
기술 스택:
백엔드 — Python/Flask, yt-dlp의 --download-sections 플래그 사용 (이게 핵심입니다. 전체 파일이 아닌 유튜브 CDN에서 요청한 바이트 범위만 가져옵니다), 리먹싱을 위한 FFmpeg, 유튜브 봇 탐지 우회를 위한 Deno 런타임, gevent 워커를 사용하는 Gunicorn
인증 — Supabase (Google OAuth), Flask 세션
결제 — 웹훅 검증을 포함한 Razorpay 구독
인프라 — Railway, 단일 Gunicorn 워커 (중요함 — 워커가 여러 개면 /tmp가 공유되지 않아 파일 찾기 오류가 발생함)
프론트엔드 — Flask에서 제공하는 순수 HTML/CSS/JS, React나 프레임워크 사용 안 함
흥미로운 부분:
yt-dlp의 --download-sections 플래그는 필요한 바이트 범위만 가져옵니다. 3시간짜리 영상에서 1분 클립을 따는 시간이나 5분짜리 영상에서 1분 클립을 따는 시간이나 동일합니다.
Deno는 유튜브의 봇 탐지를 처리합니다. 동시 다발적인 Deno 프로세스로 인한 OOM(메모리 부족) 종료를 방지하기 위해 스레드 락으로 감쌌습니다.
FFmpeg는 영상이 이미 h264/aac인지 감지하고 재인코딩 대신 -c copy로 리먹싱을 수행하는데, 이는 10배 더 빠르고 CPU를 거의 사용하지 않습니다.
sliceyt.com에서 사용해 볼 수 있습니다. 스택에 대한 피드백이나 yt-dlp를 사용하면서 겪은 엣지 케이스가 있다면 알려주세요.

