해결하는 문제
구어, 코드 스위칭, 저자원 언어를 연구하는 연구자들은 자연스러운 대화 데이터를 충분히 구하기 어렵습니다. 자막이 없는 영상이 많고, 있는 자막도 품질이 제각각인 사람·자동 출처가 섞여 있습니다. 여러 언어를 다루면서 각 자막의 출처를 기록하는 일관된 파이프라인이 필요합니다.
첫 버전에 넣을 기능
- 영상별 사용 가능한 자막 언어 감지
- 자막 없는 영상을 위한 99개 언어 AI 음성 인식
- 여러 언어가 섞인 발화를 위한 코드 스위칭 지원
- 정렬을 위한 단어 단위 타임스탬프
- 모든 자막의 언어 및 자막 출처 메타데이터
단계별 개발 방법
- 01
후보 영상 찾기
대상 언어가 나오는 것으로 알려진 채널이나 재생목록을 조회하고, /transcripts/{video_id}/languages를 호출해 어떤 자막 트랙이 있는지 확인합니다.
- 02
자막이 있으면 활용
수동 자막이 있으면 그것을 가져오세요. 보통 가장 정확합니다.
- 03
음성 인식으로 공백 채우기
자막이 없는 영상은 언어를 지정하거나 자동 감지로 ASR을 요청하고, 여러 언어가 섞인 발화에는 codeSwitching을 활성화하세요.
- 04
정렬 데이터와 함께 저장
단어 단위 타임스탬프를 위해 format.words를 요청하고, 각 자막의 언어와 출처를 텍스트와 함께 저장합니다.
스타터 코드
이 아이디어는 "레시피 3: 재생목록을 지식 베이스에 일괄 적재하기" 패턴을 기반으로 합니다. 채널, 프롬프트, 저장소는 원하는 대로 바꿔 쓰세요.
import requests
API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}
playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
"limit": 100}).json()
ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
"video_ids": ids,
"format": {"timestamp": True, "paragraphs": True},
}).json()
# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
if r["status"] == "completed":
for p in r["data"]["transcript"].get("paragraphs") or []:
store(video_id=r["video_id"], start=p["start"], text=p["text"]) # your vector DB만들 가치가 있는 이유
연구실과 AI 팀은 다른 방법으로는 수집 비용이 비싼 언어의 평가·연구 데이터를 얻습니다. 특정 언어나 도메인에 대해 잘 정제되고 문서화된 데이터셋은 모델 개발사에게도 가치가 있습니다.
피해야 할 실수
- 자동 자막을 정답 데이터로 가정하기: 출처를 표시하고 일부 표본을 수작업으로 검증하세요.
- 메타데이터 없이 방언 섞기: 결과를 해석할 수 있도록 채널과 지역을 기록하세요.
- 라이선스 간과하기: 데이터셋을 재배포하기 전에 플랫폼 약관과 저작권을 확인하세요.
이 아이디어에 대한 질문
음성 인식은 몇 개 언어를 지원하나요?
AI 음성 인식은 99개 언어를 지원하며, 자동 언어 감지와 여러 언어가 섞인 발화를 위한 선택적 코드 스위칭 기능을 제공합니다.
단어 단위 타임스탬프를 받을 수 있나요?
네. format.words를 요청하면 단어마다 타이밍을 받을 수 있어 정렬과 음성학 연구에 유용합니다.
YouTube로 만든 데이터셋을 재배포할 수 있나요?
YouTube 약관, 저작권법, 소속 기관의 정책에 따라 다릅니다. 많은 연구자는 자막 자체 대신 영상 ID와 코드를 공유합니다.