Tất cả bài viếtAll articles

youtube-transcript-api: lấy transcript YouTube gọn cho AI workflow

·16 Th7 · 6 phút đọcJul 16 · 6 min read
youtube-transcript-api: lấy transcript YouTube gọn cho AI workflow

Vì sao thư viện này đáng giá

Nếu bạn từng cần biến một video YouTube thành dữ liệu text cho AI, research hoặc repurpose nội dung, phần mệt nhất thường không phải là prompt hay model. Phần mệt là lấy transcript đủ ổn định mà không phải mở headless browser, không xin API key và không tự vá logic mỗi lần giao diện YouTube thay đổi. youtube-transcript-api giải quyết đúng khoảng trống đó: một thư viện Python nhỏ gọn để lấy subtitle/transcript từ YouTube bằng video_id via GitHub.

README của dự án mô tả thư viện có thể lấy transcript/subtitle cho một video YouTube, hoạt động với subtitle tự động, hỗ trợ dịch subtitle và không cần headless browser. Phần About cũng nêu rõ thư viện không cần API key hoặc headless browser. Với dev đang dựng workflow nội dung, đây là một primitive rất thực dụng: cài nhanh, API dễ đọc, output có cấu trúc và đủ linh hoạt để đưa vào pipeline phía sau.

Quick start: dùng video_id, không dùng URL

Cách dùng cơ bản hiện tại là tạo instance YouTubeTranscriptApi rồi gọi fetch(video_id). Chi tiết quan trọng nhất: truyền ID của video, không truyền full URL. Ví dụ https://www.youtube.com/watch?v=12345 thì video_id12345 via PyPI.

from youtube_transcript_api import YouTubeTranscriptApi

ytt_api = YouTubeTranscriptApi()
transcript = ytt_api.fetch("12345")

for snippet in transcript:
    print(snippet.text, snippet.start, snippet.duration)

fetch() trả về một FetchedTranscript. Object này có thể iterate, index và lấy length như một list. Mỗi snippet có text, start, duration; object cũng giữ metadata như video_id, language, language_codeis_generated. Khi cần serialize hoặc đưa sang job khác, gọi to_raw_data() để nhận list dictionary sạch hơn cho JSON, queue hoặc vector pipeline.

Sơ đồ luồng transcript sạch từ video_id, ngôn ngữ, lọc manual hoặc generated đến raw data
Luồng tốt nên bắt đầu bằng video_id, đặt ưu tiên ngôn ngữ rõ ràng, rồi mới đưa dữ liệu sang AI hoặc content pipeline.

Chọn ngôn ngữ có chủ đích

Mặc định, thư viện ưu tiên transcript tiếng Anh. Nếu kênh của bạn có video tiếng Việt, tiếng Đức hoặc nhiều ngôn ngữ lẫn nhau, đừng để default quyết định toàn bộ workflow. Hãy truyền languages như một danh sách language code theo thứ tự ưu tiên giảm dần. Ví dụ ["vi", "en"] nghĩa là thử tiếng Việt trước, nếu không có thì fallback sang tiếng Anh.

transcript = ytt_api.fetch(
    "12345",
    languages=["vi", "en"],
)

Chi tiết này nhỏ nhưng ảnh hưởng lớn đến chất lượng dữ liệu. Nếu bạn dùng transcript làm input cho summarization, RAG hoặc topic clustering, sai ngôn ngữ ngay từ đầu sẽ làm model phải xử lý thêm noise. Với workflow chạy hàng loạt, nên để language priority thành config theo từng kênh hoặc từng thị trường thay vì hard-code một ngôn ngữ duy nhất.

Manual, generated và preserve_formatting

YouTube có thể có transcript thủ công và transcript tự động. youtube-transcript-api hỗ trợ cả hai. Khi gọi list(video_id), bạn nhận được TranscriptList để xem transcript nào đang có, ngôn ngữ nào được hỗ trợ, transcript có phải generated không, có thể translate không và các ngôn ngữ có thể dịch.

Theo README và source của dự án, find_transcript() ưu tiên transcript thủ công nếu cùng ngôn ngữ có cả bản thủ công lẫn bản tự động. Nếu muốn kiểm soát rõ hơn, bạn có thể dùng find_manually_created_transcript() hoặc find_generated_transcript() via GitHub source.

transcript_list = ytt_api.list("12345")

manual = transcript_list.find_manually_created_transcript(["vi", "en"])
generated = transcript_list.find_generated_transcript(["vi", "en"])

Nếu transcript có định dạng quan trọng, preserve_formatting=True giúp giữ một số HTML formatting element như italic và bold. Tùy chọn này hữu ích khi bạn cần trích dẫn, làm note hoặc chuyển video thành bản nháp bài viết, vì formatting đôi khi mang ý nghĩa nhấn mạnh chứ không chỉ là trang trí.

CLI, raw data và formatter

Không phải workflow nào cũng cần import Python trong app chính. Thư viện có CLI để bạn truyền một hoặc nhiều video ID, chọn ngôn ngữ bằng --languages, dịch transcript bằng --translate, hoặc liệt kê transcript khả dụng bằng --list-transcripts via GitHub.

youtube_transcript_api 12345 --languages vi en --format json > transcripts.json
youtube_transcript_api --list-transcripts 12345

Với team data hoặc content ops, CLI là cách rất nhanh để gắn transcript vào cron job, notebook, batch script hoặc backend worker. Bạn có thể lưu JSON vào storage, index theo timestamp, gom đoạn theo chapter, hoặc đưa từng snippet vào queue xử lý. Khi output đã có text, startduration, việc tạo quote có timestamp, semantic search hoặc video summary trở nên rõ ràng hơn nhiều.

Use case cho AI, research và repurpose

Use case rõ nhất là biến video dài thành dữ liệu có cấu trúc. Từ đó, bạn có thể làm summarization, Q&A, entity extraction, topic clustering, semantic search hoặc RAG trên một tập video. Với marketing và growth team, transcript là nguyên liệu tốt để repurpose: một video webinar có thể thành outline blog, caption social, newsletter, sales note hoặc danh sách insight cho campaign.

Với research, transcript giúp đọc nhanh nhiều video mà không cần xem từng phút. Bạn có thể tìm keyword, gom đoạn liên quan, so sánh cách nhiều kênh nói về cùng một chủ đề, hoặc kiểm tra claim trước khi viết bài phân tích. Với dev build internal tool, điểm mạnh là thư viện không cố làm quá nhiều thứ. Nó lấy transcript, trả dữ liệu có cấu trúc, còn phần phân tích và xuất bản để pipeline của bạn quyết định.

Thư viện này hợp nhất khi bạn cần transcript như một bước trong workflow rộng hơn, không phải một sản phẩm transcript độc lập. Ví dụ: lấy nội dung video để tạo brief, dựng hệ thống tìm kiếm nội bộ, làm dữ liệu kiểm chứng insight, hoặc gom nhiều video thành knowledge base cho đội content. Nếu yêu cầu của bạn là SLA cao, khối lượng request lớn và ít được phép gián đoạn, hãy xem nó như lớp thu thập ban đầu rồi bọc thêm cache, giám sát và fallback.

Lưu ý trước khi đưa vào production

Cần nhìn thẳng một điểm: đây không phải API chính thức của YouTube. README cảnh báo thư viện dùng một phần không được document của YouTube web-client, nên không có bảo đảm rằng nó sẽ luôn hoạt động nếu YouTube đổi hành vi via GitHub. Vì vậy, production không nên chỉ là một vòng lặp gọi thẳng fetch() vô hạn.

Checklist production gồm cache transcript, xử lý thiếu subtitle, rate limit, retry và fallback IP
Ở quy mô lớn, cache, retry, rate limit và fallback quan trọng không kém phần gọi API.

Hãy cache transcript đã lấy, xử lý exception cho video không có subtitle hoặc không có ngôn ngữ mong muốn, giới hạn tốc độ request và có queue để tránh spike. Nếu chạy trên cloud, cần chuẩn bị khả năng bị block IP hoặc cần proxy hợp lệ. Theo PyPI, phiên bản mới nhất khi kiểm tra là 1.2.4, phát hành ngày 29/01/2026, yêu cầu Python từ 3.8 đến dưới 3.15 và dùng MIT License via PyPI.

Tóm lại, youtube-transcript-api là lựa chọn đáng thử khi bạn cần một cách gọn để đưa nội dung YouTube vào AI workflow. Dùng đúng video_id, đặt languages có chủ đích, chọn manual/generated transcript khi cần và thiết kế production với cache/fallback ngay từ đầu. Khi làm vậy, thư viện nhỏ này có thể trở thành một mắt xích rất hữu ích giữa video, research và hệ thống nội dung tự động.

youtube-transcript-api: lấy transcript YouTube gọn cho AI workflow — BADO Agency