콘텐츠로 이동

27. yt-dlp로 유튜브 영상 리서치 자동화

콘텐츠 만들기 전에 "유튜브에 이런 영상이 이미 있는지" 11개를 한번에 보고 싶을 때. 하나씩 영상 보면 11편 = 5시간. yt-dlp로 자막만 뽑으면 30분이면 다 훑음.

yt-dlp가 뭐야?

유튜브, 트위치, 카카오TV 등 1500개+ 사이트의 영상/자막/메타데이터를 다운로드하는 명령줄 도구. "유튜브 영상 도둑질"이 아니라 공개된 자막을 텍스트로 받아 분석용으로 쓰는 합법 도구. 설치: pip install yt-dlp 또는 winget install yt-dlp

비유로 이해하기

유튜브 = 도서관, 영상 = 책. 영상을 직접 보는 건 책을 처음부터 끝까지 읽는 것. yt-dlp 자막 추출 = "책 내용을 텍스트 파일로 받아서 Ctrl+F로 검색"하는 것. 11편 책을 다 읽지 않고도 "내가 다루려는 주제 키워드가 어디 나오는지" 즉시 잡힘.

실전 패턴

1. 자막만 일괄 다운로드 (영상 X)

yt-dlp --skip-download \
  --write-auto-subs \
  --sub-langs "ko,en" \
  --sub-format vtt \
  --sleep-requests 2 \
  -o "%(id)s.%(ext)s" \
  "URL1" "URL2" "URL3" ...

옵션 풀이: - --skip-download: 영상 본체는 받지 마. 자막만. - --write-auto-subs: 자동 생성 자막도 받아 (사용자가 단 자막 없을 때 대비). - --sub-langs "ko,en": 한국어 + 영어 둘 다. - --sleep-requests 2: 요청 사이 2초 쉬기. YouTube의 "너무 빨라" 차단(429 에러) 방지 ★ - -o "%(id)s.%(ext)s": 파일명을 영상 ID로 (제목에 한글/특수문자 있으면 에러 안 남)

2. 메타데이터만 따로 (조회수, 업로드 날짜, 채널 등)

yt-dlp -j --skip-download "URL"
→ JSON 한 덩어리로 모든 정보 출력. Python으로 파싱해서 필요한 필드만 추출.

import subprocess, json
r = subprocess.run(["yt-dlp", "-j", "--skip-download", url],
                   capture_output=True, text=True, encoding="utf-8")
d = json.loads(r.stdout)
print(d["title"], d["upload_date"], d["view_count"])

3. VTT 자막을 깨끗한 텍스트로 변환

받은 .vtt 파일은 타임스탬프 + HTML 태그 + 같은 줄 중복 떡칠. 정리 필요:

import re
raw = open("video.ko.vtt", encoding="utf-8").read()
raw = re.sub(r"<[^>]+>", "", raw)  # HTML 태그 제거
lines = []
for ln in raw.splitlines():
    ln = ln.strip()
    if not ln or "-->" in ln or ln.startswith(("WEBVTT", "Kind:", "Language:")) or ln.isdigit():
        continue
    if not lines or lines[-1] != ln:  # 중복 제거
        lines.append(ln)
text = " ".join(lines)
→ 11개 영상 자막을 5만 자 한 줄로 합쳐서 검색 + 분석 쉬워짐.

주의사항 (실제로 마주친 것)

429 Too Many Requests 에러

한 번에 11개 영상 자막을 두 언어씩 받으려고 하면 YouTube가 막음. 해결: 1. --sleep-requests 2 (요청 간격) + 영상 사이 sleep 8 추가 2. 한 언어씩 따로 받기 (ko 먼저, 5분 후 en) 3. 그래도 안 되면 영상 ID 단위로 하나씩 + sleep

Windows cp949 출력 에러

yt-dlp 출력에 이모지(✅ 등)가 있으면 콘솔에 그대로 print 시 cp949 에러. 해결: - python -X utf8 script.py 로 실행 (Python UTF-8 모드) - 또는 stdout 출력 안 하고 파일에 바로 저장

info.json 다운로드 실패 케이스

--write-info-json 옵션이 자막 다운 마지막에 실행되는데, 중간에 429 나면 info.json 못 받음. → 자막 따로 + -j로 메타 따로 두 번 받는 게 안정적.

콘텐츠 만들 때 활용 시나리오

시나리오 1: "이 주제 영상이 한국에 있나?" 조사

  1. 키워드로 검색 → 상위 5개 영상 URL 수집
  2. yt-dlp로 자막 일괄 추출
  3. 자막 텍스트에서 "내가 다룰 핵심 메시지"가 이미 있는지 grep
  4. 결론: 한국 0건이면 블루오션 = 영상 만들 가치

시나리오 2: 영상 시리즈 기획 전 사전 조사

  1. 영문권 11개 + 한국어 6개 = 17개 영상 자막 추출 (40분)
  2. 각 영상 description + 자막에서 언급된 도구·서비스 이름 모두 수집
  3. 공식 사이트로 팩트체크 → 영상 vs 공식 충돌 발견
  4. 차별화 메시지 = "직접 다 써보고 좋은 것만"

시나리오 3: 경쟁 채널 분석

  1. 경쟁 채널의 인기 영상 10개 자막 추출
  2. 30초마다 어떤 단어/패턴 나오는지 분석
  3. 인트로 후크 / 광고 시점 / 마무리 패턴 학습

yt-dlp의 한계

  • 자동 자막은 음성 인식 결과라 오타 많음 (예: "Qwen"이 "Q&A"로 들림)
  • 인용된 도구 이름이 헷갈리면 영상 description으로 보충 (description은 정확)
  • 영상에서 보여준 화면 정보는 자막에 없음 → 핵심 영상은 결국 직접 봐야

더 나아가기

  • 자막 텍스트를 Claude에게 던져 "이 영상에서 언급된 도구 다 정리해줘" 시키면 5분
  • 11개 영상 동시 처리 시 자막 폴더 통째로 첨부하면 종합 분석 가능
  • yt-dlp는 cookies 옵션으로 비공개/유료 영상도 받을 수 있음 (라이센스 주의)