YouTube transcript API vẫn chạy khi video không có phụ đề

YouTube transcript API giúp bạn lấy lời trong video ngay từ một link. Có phụ đề phù hợp thì dùng phụ đề; không có thì AI chuyển âm thanh thành văn bản. Bạn nhận JSON, TXT, SRT hoặc VTT để dùng trong ứng dụng.

  • Ưu tiên phụ đề, dùng AI khi không có phụ đề phù hợp
  • Phụ đề hay AI đều tính 1 credit/phút
  • Nhận link watch, youtu.be, Shorts và embed

Chọn phụ đề có sẵn hay chuyển lại từ âm thanh

Dùng link bạn đang có
Link watch, youtu.be, Shorts, embed và /live/ đều xác định được video, có hoặc không có www. Video đang phát trực tiếp thì chưa xử lý được.
Giữ lời trong phụ đề gốc
Với source=auto, phụ đề do người đăng tải lên được ưu tiên hơn phụ đề tự động. API không lấy các bản phụ đề dịch tự động.
Không có phụ đề vẫn lấy được lời nói
Nếu không có phụ đề phù hợp, AI sẽ xử lý âm thanh. Đặt source=stt nếu bạn muốn lấy transcript từ âm thanh ngay từ đầu.
Biết văn bản đến từ đâu
Trường transcript_source cho biết nguồn là youtube_captions hay speech_to_text. Ứng dụng có thể lưu thông tin này cùng bản transcript.
Tính phí theo thời lượng video
Mỗi phút tính 1 credit, làm tròn lên từng phút, dù dùng phụ đề hay AI. Nếu xử lý thất bại hoặc bạn hủy job, bạn không mất credit.

Lấy transcript YouTube tự động từ ứng dụng của bạn

Gửi link bằng POST /v1/transcriptions kèm khóa API. Python hay bất kỳ HTTP client nào cũng dùng được. Với wait=60, request chờ tối đa 60 giây; xem các trường và mã phản hồi trong tài liệu tạo transcript.

Tạo khóa API trong bảng điều khiển rồi dùng từ server hoặc script. Khi tạo job thành công, lưu ngay id trả về. Request hết thời gian chờ không có nghĩa là job thất bại: hãy đọc tiếp bằng GET /v1/transcriptions/:id, đừng gửi lại request tạo mới.

Job có thể đi qua queued, fetching và transcribing. Chỉ đọc transcript khi status là completed; với failed, xử lý lỗi tương ứng. Đừng biến một lần chờ mạng hoặc video không truy cập được thành bản transcript trống mà ứng dụng lại báo thành công.

cURL
curl -X POST "https://api.transcript1.com/v1/transcriptions?wait=60" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"youtube","url":"https://youtu.be/dQw4w9WgXcQ"}'

Dùng transcript_source để kiểm tra nguồn văn bản

API cho biết transcript lấy từ phụ đề hay âm thanh, và caption_kind phân biệt loại phụ đề. billed_minutes là thời lượng video làm tròn lên từng phút. Tài liệu đối tượng transcription giải thích các trường trong phản hồi.

Nếu cần đối chiếu nguồn, lưu cả transcript_source và caption_kind. Phụ đề do người đăng tải lên giữ nguyên lời đã công bố nhưng không có mốc thời gian từng từ. Phụ đề YouTube tự động có thời điểm bắt đầu từ; AI có cả thời điểm bắt đầu, kết thúc và độ tin cậy.

Mỗi segment có thời điểm bắt đầu và kết thúc tính bằng giây, để người đọc quay lại đúng đoạn video. Chỉ thêm include=words khi giao diện cần dữ liệu từng từ. JSON bên dưới minh họa cấu trúc phản hồi, không trích lời từ video trong request mẫu.

Phản hồi JSON rút gọn
{
  "id": "tr_8fK2Lm0PqRsTuVwXyZaBcD",
  "status": "completed",
  "transcript_source": "youtube_captions",
  "caption_kind": "auto_generated",
  "language": "en",
  "billed_minutes": 4,
  "transcript": {
    "text": "Welcome back to the channel. Today we are looking at how transcripts are made.",
    "segments": [
      { "start": 0, "end": 4.2, "speaker": null, "language": "en", "text": "Welcome back to the channel." }
    ]
  }
}

Khi nào dùng auto, captions hoặc stt?

source mặc định là auto. Chọn captions (chỉ phụ đề) nếu bạn cần đúng phần phụ đề đã có; thiếu phụ đề phù hợp thì job báo no_captions và không tính phí. Chọn stt để luôn xử lý âm thanh. Xem cách chọn nguồn trước khi ghép các tùy chọn.

Cần nhận diện người nói thì dùng AI. Với auto và diarize=true, API bỏ qua phụ đề. Nếu ghép captions với diarize=true, request bị từ chối chứ API không âm thầm bỏ tùy chọn nhận diện người nói.

language cũng ảnh hưởng đến việc chọn phụ đề: bản phụ đề phải đúng ngôn ngữ bạn yêu cầu, hoặc đúng ngôn ngữ gốc của video khi để auto. Không dùng phụ đề dịch tự động. Với AI, language chỉ là gợi ý nhận diện, không phải yêu cầu dịch.

Body để luôn xử lý âm thanh
{
  "platform": "youtube",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "source": "stt"
}

Kiểm tra lỗi trước khi gửi lại video

Video riêng tư, giới hạn độ tuổi hoặc đang phát trực tiếp cần nguồn khác; gửi lại cùng link không giải quyết được. Nếu gặp no_captions, hãy quyết định xem transcript từ âm thanh có phù hợp không. Nếu job còn chạy, đọc tiếp bằng id. Danh sách lỗi giúp bạn chọn đúng cách xử lý.

Khi cần gửi lại request tạo job do lỗi kết nối, làm theo quy tắc Idempotency-Key. Tái sử dụng transcript gần đây là tùy chọn riêng, chỉ khớp khi cùng video và cùng bộ tùy chọn. Transcript trong cache vẫn có thể bị tính như job mới; đọc lại một job đã hoàn tất thì không mất phút.

Ứng dụng nhận nhiều nền tảng nên kiểm tra nguồn và tùy chọn hỗ trợ. Cùng endpoint này nhận cả TikTok, Instagram và các link được hỗ trợ khác, nhưng không phải nền tảng nào cũng lấy được phụ đề.

Dùng thử với 60 phút miễn phí

Xác minh email để nhận 60 phút miễn phí một lần. Không cần thẻ.

Lấy khóa API

Câu hỏi thường gặp

Bạn cần hỏi thêm? Gửi câu hỏi cho chúng tôi

Video không có phụ đề thì sao?

Với source=auto, AI sẽ chuyển âm thanh thành văn bản nếu không có phụ đề phù hợp. Nếu chỉ chấp nhận phụ đề đã có, dùng source=captions; khi đó job báo no_captions thay vì dùng AI.

API nhận những kiểu link YouTube nào?

Link watch, youtu.be, Shorts, embed và /live/. Link phải dẫn tới một video cụ thể; trang kênh hoặc link chỉ có playlist sẽ báo 422 invalid_url. Link /live/ xác định được video, nhưng video đang phát trực tiếp vẫn không xử lý được.

Tôi có dùng được video riêng tư không?

Không. API chỉ lấy được video công khai hoặc không công khai (unlisted). Video riêng tư, giới hạn độ tuổi và đang phát trực tiếp không dùng được. Nếu có file của mình, bạn có thể tải file lên.

Một video tốn bao nhiêu credit?

1 credit cho mỗi phút video, làm tròn lên, cùng mức cho phụ đề và AI. Tài khoản mới nhận 60 phút miễn phí một lần sau khi xác minh email, không cần thẻ.

Đây có phải thư viện Python youtube-transcript-api không?

Không. transcript1 là REST API được lưu trữ sẵn. Nếu dùng Python, bạn gửi HTTP request kèm khóa API, không cần chạy thư viện youtube-transcript-api.