yt-dlp 자막 vs 스크립트 API: 어느 것을 사용할 것인가

yt-dlp는 기본적으로 모든 YouTube 비디오에 대한 자막을 다운로드할 수 있으며, 미디어 다운로드를 위해 사용했다면 이미 플래그를 발견했을 것입니다. 합법적으로 훌륭한 도구입니다. 나는 모든 곳에 설치 유지합니다. 하지만 "자막을 다운로드할 수 있음"과 "서비스에서 스크립트를 얻는 올바른 방법"은 다른 주장이며, 나는 합치는 것으로 인해 타격을 받았습니다. 아무도 경고하지 않는 정리 단계를 포함하여 각 접근 방식이 실제로 어떻게 보이는지입니다.
yt-dlp 방식, 끝에서 끝까지
비디오를 다운로드하지 않고 자동 생성된 영어 자막을 가져오기:
yt-dlp --write-auto-sub --sub-lang en --skip-download \
-o "%(id)s" "https://www.youtube.com/watch?v=VIDEO_ID"
(인간이 업로드한 트랙의 경우 --write-sub 또는 두 플래그를 함께 사용하십시오.) VIDEO_ID.en.vtt 파일을 떨어뜨립니다. 열면 완료되지 않은 이유를 볼 수 있습니다:
WEBVTT
Kind: captions
Language: en
00:00:00.320 --> 00:00:02.879
so today we're going to look at
00:00:01.760 --> 00:00:04.560
so today we're going to look at
how youtube handles
자동 자막은 "롤링" 캡션입니다. 각 큐는 이전 줄을 반복하므로 순진한 제거는 모든 문장을 두 번 제공합니다. 이 길을 가는 모든 사람은 결국 이의 일부 버전을 작성합니다:
import re, pathlib
lines = []
for line in pathlib.Path("VIDEO_ID.en.vtt").read_text().splitlines():
if "-->" in line or line.startswith(("WEBVTT", "Kind:", "Language:")) or not line.strip():
continue
line = re.sub(r"<[^>]+>", "", line).strip() # strip inline timing tags
if not lines or line != lines[-1]: # collapse rolling duplicates
lines.append(line)
text = " ".join(lines)
명령, subprocess 처리, 파일 I/O, 중복 제거 - 평문 텍스트를 갖기 전에 40줄의 글루라고 부르세요.
yt-dlp가 올바른 답인 곳
- 대량 오프라인 아카이빙. 채널 URL을 가리키면 자막을 포함한 모든 비디오를 걷고, 재개 가능하고 무료입니다. 홈 연결에 개인 아카이브를 구축하는 경우 아무것도 이기지 못합니다.
- 자막 파일 자체를 원합니다. srt/vtt with timing이 배송 가능한 경우. 비디오 편집기에 공급, 정확한 큐 타이밍 보존. yt-dlp는 원본 아티팩트를 제공합니다.
- 어차피 미디어를 다운로드하고 있습니다. 이미 Whisper 기록을 위해 오디오를 가져오고 있습니까?
--write-auto-sub을 추가하는 것은 한 플래그입니다. - 예산 없음, 개인 규모. 인간 속도의 주거용 IP에서 그냥 작동합니다.
서버에서 상처를 입는 곳
yt-dlp가 백엔드로 이동하는 순간 3개의 별도 유지 보수 부담이 나타납니다:
- 바이너리 러닝머신. YouTube는 내부를 지속적으로 변경하고, yt-dlp는 지속적으로 수정을 배송합니다. 기능이지만 프로덕션 종속성이 자주 업데이트하거나 추출이 실패하기 시작해야 함을 의미합니다.
- IP 차단. AWS/GCP/Heroku 주소에서 "봇이 아닌지 확인하기 위해 로그인하세요" 오류를 기대하세요. 이것은 클라우드의 youtube-transcript-api를 차단하는 동일한 벽입니다. 도구를 전환해도 IP 평판이 전환되지 않습니다.
- 글루 코드. Subprocess 관리, 임시 파일, 위의 vtt 정리, 비 영어 트랙, stderr 파싱을 통한 누락된 캡션 감지.
API 방식
위의 전체 파이프라인의 호스팅된 엔드포인트 버전:
curl -s "https://youtube2text.org/api/transcribe?url=VIDEO_ID" \
-H "x-api-key: yt_YOUR_KEY"
JSON을 반환합니다. {"result": {"videoId", "title", "pubDate", "content", ...}} 이미 중복 제거된 평문, 구조화된 오류 포함 (TRANSCRIPT_UNAVAILABLE 캡션이 없을 때 대신 stderr 고고학). 공유 데모 키는 한 호출 거리에 있습니다 (curl -s https://youtube2text.org/api/demo-key, IP당 월 5개 비디오). 전체 빠른 시작은 curl로 스크립트 추출에 있습니다.
정직한 각주
두 접근 방식 모두 같은 장소에서 같은 캡션을 가져오고, 자동화된 트래픽을 원하지 않는 YouTube를 다루어야 합니다. yt-dlp는 그것을 당신의 문제로 만듭니다. 랩톱에서는 좋지만, 서버의 프록시 프로젝트입니다. 호스팅된 API는 그것을 제공자의 문제로 만듭니다: youtube2text.org는 서버 측을 통해 회전하는 주거용 프록시를 통해 fetch를 라우팅하며, 이는 정확히 데이터센터 IP에서 쉽게 복제할 수 없는 부분입니다. 스크립트에 대해 비용을 지불하지 않습니다. 운영하지 않기 위해 비용을 지불합니다.
내 분할: 자신의 기계에서 아카이브 및 일회용의 경우 yt-dlp, 무인으로 실행되는 모든 것을 위한 API. 그것이 당신의 상황과 일치한다면, 키는 youtube2text.org/app/keys에 있습니다. Google 로그인, 무료 5/월 계층, $5.99부터 유료.