# Link video và tùy chọn

> Kiểm tra link được hỗ trợ, chọn phụ đề hay AI, bật nhận diện người nói và đặt ngôn ngữ cho transcript.

Canonical: https://transcript1.com/vi/docs/sources-and-options
Language: vi
Last updated: 2026-10-20

Bạn có thể gửi link YouTube, X, TikTok, Instagram, Facebook, Bluesky hoặc tải file lên. Các nền tảng khác và dạng link cho từng loại video công khai đã ghi hình nằm trong bảng dưới. Khi gọi `POST /v1/transcriptions`, thêm `source`, `diarize` và `language` vào body nếu muốn chọn nguồn transcript, bật nhận diện người nói hoặc đặt ngôn ngữ. Bạn có thể bỏ qua cả ba trường này để dùng mặc định.

## Gửi được link từ đâu?

Đặt link vào `url`; API sẽ tự nhận diện nền tảng. Chỉ truyền thêm `platform` khi cần, và giá trị phải khớp với link.

| Nền tảng | Dạng link dùng được |
|---|---|
| YouTube (`youtube`) | Xem bảng các dạng URL YouTube ở phần sau. |
| X (`x`) | Link bài đăng có video trên `x.com` hoặc `twitter.com`, chẳng hạn `https://x.com/user/status/1234567890`. |
| TikTok (`tiktok`) | Link bài đăng video trên `tiktok.com`. Link rút gọn `vm.tiktok.com`, `vt.tiktok.com` và `www.tiktok.com/t/` cũng dùng được. |
| Instagram (`instagram`) | Link Reels hoặc bài đăng video trên `instagram.com` có đường dẫn `/reel/`, `/reels/`, `/p/` hoặc `/tv/`. Chấp nhận cả link reel và bài đăng có tên người dùng đứng trước các đường dẫn này. |
| Facebook (`facebook`) | Link video và reel trên `facebook.com`, kể cả link watch. Các dạng chia sẻ `fb.watch`, `/share/v/` và `/share/r/` cũng dùng được. |
| Bluesky (`bluesky`) | Link bài đăng có video trên `bsky.app`, chẳng hạn `https://bsky.app/profile/user.example/post/3l3w4b5c6d7e2`. |
| [Twitch](https://transcript1.com/vi/features/transcript-twitch) (`twitch`) | VOD sau khi buổi phát kết thúc: `twitch.tv/videos/<id>` hoặc `/<channel>/v/<id>` (cũng chấp nhận `video`). Clip: `clips.twitch.tv/<slug>`, `twitch.tv/<channel>/clip/<slug>` hoặc `/clip/<slug>`. Chấp nhận host `twitch.tv`, `www`, `m`, `go` và `clips.twitch.tv`. |
| [Dailymotion](https://transcript1.com/vi/features/transcript-dailymotion) (`dailymotion`) | Link dạng `dailymotion.com/video/<id>`, có thể thêm `_title`; `/embed/video/<id>`; hoặc `dai.ly/<id>`. Dùng được cả host `www.dailymotion.com` và `touch.dailymotion.com`. |
| [Pinterest](https://transcript1.com/vi/features/transcript-video-pinterest) (`pinterest`) | Pin chứa video tải trực tiếp lên Pinterest trên `pinterest.com` hoặc `www.pinterest.com`: `/pin/<id>/` hay `/pin/<slug>--<id>/`. Chỉ lấy khối video native đầu tiên. Không nhận video nhúng từ ngoài, ảnh, board, link `pin.it` hoặc tên miền theo khu vực. |
| [LinkedIn](https://transcript1.com/vi/features/transcript-video-linkedin) (`linkedin`) | Link bài đăng video công khai trên `linkedin.com` hoặc `www.linkedin.com`: `/posts/<slug>-<activity-id>-<four-character-suffix>` hay `/feed/update/urn:li:activity:<id>/`. Không nhận link trang cá nhân, Learning, sự kiện hoặc `lnkd.in`. |
| [Snapchat Spotlight](https://transcript1.com/vi/features/transcript-snapchat-spotlight) (`snapchat`) | Link video dạng `/spotlight/<id>` trên `snapchat.com` hoặc `www.snapchat.com`. Không nhận story hay trang cá nhân. |

Với năm nền tảng bổ sung, URL phải dùng HTTPS, không kèm thông tin đăng nhập và không đặt cổng riêng. Mỗi link phải dẫn đến một video công khai đã ghi hình. Không nhận bài riêng tư, nội dung cần đăng nhập, buổi phát đang trực tiếp hoặc đang xử lý, trang cá nhân, feed hay bộ sưu tập. transcript1 không gửi cookie tài khoản khi lấy video. Tham số thời gian trên URL không cắt ngắn nội dung.

Giữ nguyên `media_id` mà API trả về cho clip Twitch và Snapchat Spotlight. Đây có thể là chuỗi ID không thể suy ra từ URL; đừng tự tách hay dựng lại ID.

Trên X, TikTok, Instagram, Facebook và Bluesky, hãy gửi link bài đăng công khai. Nếu bài có nhiều video, transcript1 chỉ lấy video đầu tiên. Trang cá nhân, story, trang livestream và bài ảnh TikTok không dùng được. Nếu nền tảng yêu cầu đăng nhập, job báo `login_required`. Nếu video không có track audio, job báo `no_audio`. Bạn không mất phút trong cả hai trường hợp.

YouTube, X, TikTok, Bluesky, Dailymotion và LinkedIn cho phép lấy phụ đề nếu video có bản phù hợp bằng ngôn ngữ gốc. Instagram, Facebook, Twitch, Pinterest và Snapchat chỉ chuyển giọng nói thành văn bản bằng AI: chọn `auto` hoặc `stt`, không chọn `captions`. Mọi nền tảng và file tải lên đều có cùng giá mỗi phút, tính theo thời lượng đo được.

Chỉ các dạng link rút gọn trong bảng trên mới dùng được. Nếu link chia sẻ chưa cho biết ID bài đăng lúc gửi request, API không thể tìm lại job cũ tương ứng. Muốn dùng lại transcript, hãy gửi link đầy đủ của bài đăng.

| Nguồn phụ đề | Lấy loại phụ đề nào, có mốc thời gian gì? |
|---|---|
| YouTube và X | Lấy track phụ đề sẵn có. Mốc thời gian từng từ chỉ có ở phụ đề tự động của YouTube. |
| TikTok | Lấy phụ đề VTT hoặc SRT của video nếu có. Chỉ có mốc thời gian theo đoạn. |
| Bluesky | Lấy phụ đề của video native trên PDS tin cậy mà transcript1 hỗ trợ. Không lấy từ host federated bất kỳ, video được trích dẫn hoặc video bên ngoài. Chỉ có mốc thời gian theo đoạn. |
| Dailymotion | Chỉ lấy file SRT trực tiếp, không lấy playlist phụ đề. Có mốc thời gian theo đoạn; track được nhận diện là `en-auto` hoặc `fr-auto` sẽ có loại `auto_generated`. |
| LinkedIn | Lấy track VTT sẵn có của bài đăng video native công khai, không lấy từ LinkedIn Learning. Chỉ có mốc thời gian theo đoạn. |

## Dạng link YouTube

Với YouTube, đặt link video vào `url` và bỏ qua `platform` hoặc đặt là `youtube`. Các dạng dưới đây đều dùng được, có hoặc không có `www.`:

| Loại link | Ví dụ |
|---|---|
| Trang xem video | `https://www.youtube.com/watch?v=dQw4w9WgXcQ` |
| Link rút gọn | `https://youtu.be/dQw4w9WgXcQ` |
| Shorts | `https://www.youtube.com/shorts/dQw4w9WgXcQ` |
| Link nhúng | `https://www.youtube.com/embed/dQw4w9WgXcQ` |
| Đường dẫn Live | `https://www.youtube.com/live/dQw4w9WgXcQ` |
| Bản di động và YouTube Music | `https://m.youtube.com/watch?v=dQw4w9WgXcQ`, `https://music.youtube.com/watch?v=dQw4w9WgXcQ` |

API bỏ qua tham số query như `t`, `list` và `si`. Các dạng link khác nhau của cùng một video vẫn trỏ đến cùng video đó. Gửi URL đầy đủ, không gửi riêng ID video dài 11 ký tự. Link kênh, link chỉ có playlist hoặc link không đúng dạng sẽ nhận `422 invalid_url`. Nếu `platform` không nằm trong danh sách hỗ trợ, API trả `422 unsupported_platform` kèm `supported_platforms`.

Bạn có thể gửi video công khai hoặc không công khai (unlisted), nhưng không gửi video riêng tư, giới hạn độ tuổi hay đang livestream. Các trường hợp này lần lượt báo `media_private`, `age_restricted` và `live_stream`. Nếu có file của mình, bạn có thể [tải file lên](https://transcript1.com/vi/docs/uploads).

## source

Chọn `source` để lấy transcript từ phụ đề sẵn có hoặc từ audio.

| Giá trị | Cách xử lý |
|---|---|
| `auto` (mặc định) | Tìm phụ đề phù hợp bằng ngôn ngữ gốc trên YouTube, X, TikTok, Bluesky, Dailymotion và LinkedIn trước. Nếu không dùng được phụ đề, AI chuyển audio thành văn bản. |
| `captions` | Chế độ `captions` (chỉ phụ đề) không tải audio, không chạy AI speech-to-text. Nếu không có track phù hợp, job báo `no_captions` và không tính phí. Nếu tải nội dung phụ đề bị lỗi, job báo `fetch_failed`. Nền tảng không hỗ trợ phụ đề sẽ trả `422 invalid_request`. |
| `stt` | Bỏ qua phụ đề và luôn dùng AI để chuyển audio thành văn bản. |

Với file tải lên, transcript1 luôn dùng speech-to-text. Chỉ đặt `source` là `auto` hoặc `stt`; chọn `captions` sẽ nhận `422 invalid_request`.

Phụ đề phải đúng ngôn ngữ bạn yêu cầu. Nếu `language` là `auto`, đó phải là ngôn ngữ gốc của video. Trên YouTube, transcript1 lấy bản do người đăng tải lên hoặc bản YouTube tự tạo bằng ngôn ngữ đó, không lấy bản dịch tự động. Thứ tự ưu tiên là phụ đề do người đăng tải lên, track không rõ nguồn gốc, rồi phụ đề tự động. Không rõ nguồn gốc không có nghĩa là do người đăng tải lên.

Trên X, transcript1 lấy track VTT sẵn có. Kể cả phụ đề tự động cũng chỉ có mốc thời gian theo đoạn, không có mốc thời gian từng từ. Chế độ `auto` có thể chuyển sang STT khi không lấy được nội dung phụ đề hoặc không parse được nội dung đó; lỗi route, lưu trữ hay lập trình không kích hoạt chuyển sang STT. Chọn `stt` thì luôn bỏ qua phụ đề.

## diarize

Bật `diarize` để nhận diện người nói trong transcript. Mặc định là `false`.

- Nhận diện người nói cần speech-to-text. Nếu đang dùng `source` là `auto`, đặt `diarize: true` sẽ bỏ qua phụ đề và xử lý audio ngay.
- Không kết hợp `source: "captions"` với `diarize: true`; API trả `422 invalid_request`.
- Người nói có nhãn `Speaker 1`, `Speaker 2`… Bạn đọc nhãn trong `transcript.speakers` và trường `speaker` của từng đoạn. Định dạng `text` và `srt` thêm tiền tố `Speaker 1: `; `vtt` dùng thẻ `<v Speaker 1>`.

```json
{ "platform": "youtube", "url": "https://youtu.be/dQw4w9WgXcQ", "source": "stt", "diarize": true }
```

## language

Để transcript1 tự chọn ngôn ngữ, giữ `language` là `auto` như mặc định. Bạn cũng có thể truyền mã ISO 639-1 gồm hai chữ cái, chẳng hạn `en`, `de` hoặc `es`.

- Khi lấy phụ đề, `language` chọn ngôn ngữ của track. Giá trị `auto` chọn ngôn ngữ gốc của video.
- Khi chạy speech-to-text, giá trị này là gợi ý ngôn ngữ gửi đến nhà cung cấp. Với `auto`, hệ thống tự nhận diện ngôn ngữ; từng đoạn có trường `language` riêng.

Trường `language` ở cấp object transcription cho biết ngôn ngữ chính của toàn bộ bản ghi.

## Đọc nguồn và nội dung transcript

Đọc `transcript_source` để biết văn bản lấy từ đâu: `youtube_captions`, `x_captions`, `tiktok_captions`, `bluesky_captions`, `dailymotion_captions`, `linkedin_captions` hoặc `speech_to_text`. Nếu lấy từ phụ đề, `caption_kind` có thể là `manual`, `auto_generated` hoặc `null`. Giá trị `null` chỉ có nghĩa là chưa rõ nguồn gốc; đừng hiển thị thành phụ đề do người đăng tải lên.

| | `youtube_captions`, `caption_kind` `manual` | `youtube_captions`, `caption_kind` `auto_generated` | `speech_to_text` |
|---|---|---|---|
| Cách chia đoạn | Mỗi cue phụ đề thành một đoạn | Mỗi cue phụ đề thành một đoạn | Tách đoạn khi đổi người nói, đổi ngôn ngữ, gặp dấu kết câu hoặc đủ 15 giây |
| Mốc thời gian từng từ qua `include=words` | Không có; `words` là `null` | Có thời điểm bắt đầu; thời điểm kết thúc là lúc từ tiếp theo bắt đầu | Có thời điểm bắt đầu, kết thúc và `confidence` |
| Nhận diện người nói | Không | Không | Có nếu đặt `diarize` là `true` |
| Ngôn ngữ | Theo track phụ đề | Theo track phụ đề | Xác định cho từng đoạn |

Phụ đề YouTube giữ nguyên nội dung được đăng, kể cả thẻ như `[Music]`. Speech-to-text xử lý bản ghi tối đa 5 giờ. Dài hơn sẽ báo `media_too_long`.

Với phụ đề X (`x_captions`), TikTok, Bluesky, Dailymotion và LinkedIn, mỗi đoạn chỉ có mốc thời gian của cả đoạn. Gọi `include=words` vẫn nhận `words: null`, kể cả với phụ đề tự động. Các nguồn này cũng không nhận diện người nói. Cần mốc thời gian từng từ thì chọn `source: "stt"`; cần nhãn người nói thì đặt `diarize: true` cùng `auto` hoặc `stt`.

## Tính phí thế nào?

Lấy phụ đề hay chạy speech-to-text đều tốn như nhau: một credit cho mỗi phút video hoặc audio, làm tròn lên. Bạn chỉ chọn cách lấy văn bản, không chọn mức giá khác. Xem [cách tính phút và giới hạn](https://transcript1.com/vi/docs/billing-and-limits).
