# Dùng transcript1 từ terminal

> Cài CLI để lấy transcript từ link video hoặc file. Chạy cả thư mục, lưu phụ đề, hoặc dùng JSON trong script và AI agent.

Canonical: https://transcript1.com/vi/docs/cli
Language: vi
Last updated: 2026-10-18

Đưa link video hoặc đường dẫn file cho lệnh `transcript1` để lấy transcript ngay trong terminal. CLI chạy độc lập, không cần cài Node.js. Bạn có thể dùng link YouTube, X, TikTok, Instagram, Facebook, Bluesky và các nền tảng bổ sung bên dưới. Trước khi gửi, kiểm tra [dạng link và giới hạn của từng nguồn](https://transcript1.com/vi/docs/sources-and-options).

Với link mạng xã hội, cần CLI từ 1.2.0. Bản 1.1.0 trở xuống chỉ nhận YouTube; các link mới bị chặn ngay ở client, chưa gửi đến API. Cập nhật bằng `transcript1 update`.

Mốc phiên bản trên áp dụng cho sáu nền tảng ban đầu. Để dùng Twitch, Dailymotion, Pinterest, LinkedIn hoặc Snapchat, cần bản CLI đã bổ sung nền tảng đó. Client cũ có thể từ chối link trước khi gọi API.

Chỉ gửi bài đăng công khai. Nếu bài có nhiều video, CLI lấy transcript của video đầu tiên. Xem [Link video và tùy chọn](https://transcript1.com/vi/docs/sources-and-options) để kiểm tra link rút gọn nào dùng được và các giới hạn khác.

## Cài đặt

Với macOS hoặc Linux, hỗ trợ cả x64 và ARM64:

```bash
curl -fsSL https://transcript1.com/install.sh | sh
```

File thực thi được cài vào `~/.local/bin`. Nếu cần chỉnh PATH, trình cài đặt sẽ in hướng dẫn. Muốn đổi thư mục cài, đặt `TRANSCRIPT1_INSTALL_DIR`.

Sau khi cài, bạn có thể gõ ngắn là `t1` thay cho `transcript1`. Với zsh, trình cài đặt thêm `alias transcript1='noglob transcript1'` vào `~/.zshrc` để dùng link chứa `?` mà không cần dấu nháy. Nếu không muốn sửa cấu hình shell, đặt `TRANSCRIPT1_NO_MODIFY_SHELL=1`.

Với Windows x64, chạy trong PowerShell:

```powershell
irm https://transcript1.com/install.ps1 | iex
```

Trình cài đặt dùng thư mục `%LOCALAPPDATA%\Programs\transcript1`, tạo lệnh gọi ngắn `t1.cmd` và thêm thư mục vào PATH của tài khoản Windows. Mở terminal mới sau khi cài.

## Đăng nhập

Đăng nhập bằng lệnh:

```bash
transcript1 login
```

CLI mở transcript1.com trong trình duyệt. Nếu đang dùng SSH hoặc máy không có giao diện đồ họa, bạn sẽ nhận link để tự mở. Kiểm tra mã trên trang có trùng mã trong terminal không rồi bấm “Approve”. Sau khi bạn cho phép, CLI lưu khóa có tên `transcript1 CLI (<computer name>)`. Bạn có thể quản lý khóa ở [“API keys”](https://transcript1.com/dashboard/account/tokens).

Muốn chỉ lấy link mà không mở trình duyệt, chạy `transcript1 login --no-browser`.

Có sẵn khóa API thì dùng `transcript1 login --with-key` rồi dán khóa. Bạn cũng có thể truyền qua stdin: `transcript1 login < key.txt`.

Trong CI hoặc AI agent, đặt biến môi trường `TRANSCRIPT1_API_KEY`. CLI ưu tiên biến này hơn khóa lưu trên máy. Nếu AI agent chưa có khóa hoặc không có terminal, nó có thể chạy `transcript1 login < /dev/null` rồi gửi bạn link để cho phép truy cập.

Chạy `transcript1 logout` để thu hồi khóa CLI và xóa bản lưu trên máy. Nếu không thu hồi được, CLI vẫn xóa bản lưu và nhắc bạn thu hồi tại “API keys”. Với khóa tự dán vào, bạn cần thu hồi trực tiếp trên trang đó.

## Lấy transcript từ link

```bash
transcript1 'https://youtu.be/dQw4w9WgXcQ'
```

CLI chờ xử lý xong rồi ghi transcript ra stdout; thông tin tiến độ đi ra stderr. Với YouTube, X, TikTok, Bluesky, Dailymotion và LinkedIn, hệ thống tìm phụ đề phù hợp bằng ngôn ngữ gốc trước. Không dùng được phụ đề thì AI chuyển audio thành văn bản.

Trong zsh, nên đặt link trong dấu nháy. Nếu không, `&` sẽ tách lệnh và `?` sẽ được hiểu là glob. Alias do trình cài đặt thêm chỉ xử lý trường hợp `?`.

## Lấy transcript từ file

```bash
transcript1 interview.mp3
transcript1 -f srt -o interview.srt interview.mp3
```

CLI tự tải file lên rồi chờ transcript. Dung lượng tối đa là 2 GB (2.000.000.000 byte). File cần có đuôi mp3, wav, m4a, flac, ogg, opus, mp4, mov, webm hoặc mkv.

## Chạy nhiều link hoặc file

Bạn có thể đưa vào nhiều link, nhiều file hoặc cả thư mục:

```bash
transcript1 interview.mp3 lecture.mp4
transcript1 -o transcripts/ ./recordings
transcript1 --jobs 4 -o transcripts/ interview.mp3 'https://youtu.be/dQw4w9WgXcQ'
```

CLI nhận mẫu đường dẫn như `recordings/*.mp3`, kể cả trên Windows. Khi truyền thư mục, CLI chỉ lấy file audio và video ngay trong thư mục đó, rồi sắp xếp theo tên. Nếu có nhiều đầu vào, mặc định mỗi transcript được lưu thành một file trong `./transcripts`. Dùng `--jobs` để chọn số đầu vào xử lý đồng thời, từ 1–20; mặc định là 2.

Muốn đọc từ stdin, dùng `-` và đặt mỗi link hoặc đường dẫn file trên một dòng. Ví dụ trong shell macOS hoặc Linux:

```bash
transcript1 -o transcripts/ - < inputs.txt
```

CLI bỏ qua dòng trống và dòng bắt đầu bằng `#`. Đầu vào trùng hoàn toàn chỉ được xử lý một lần.

Nếu chỉ có một đầu vào, `-o` chỉ đường dẫn file để lưu. Nếu đường dẫn đó là thư mục có sẵn hoặc kết thúc bằng `/`, CLI lưu vào thư mục. Với nhiều đầu vào, `-o` luôn chỉ thư mục. CLI tạo thư mục đích nếu chưa có.

Với link YouTube và file trên máy, CLI bỏ qua đầu vào nếu file transcript đích đã tồn tại. Thêm `--overwrite` nếu muốn chạy lại và ghi đè:

```bash
transcript1 --overwrite -o transcripts/ ./recordings
```

## Định dạng và tùy chọn

| Tùy chọn | Cách dùng |
|---|---|
| `-f`, `--format` | Chọn `text`, `srt`, `vtt` hoặc `json`; mặc định là `text`. Định dạng JSON chứa object transcription của API. |
| `--speakers` | Bật nhận diện người nói với nhãn Speaker 1, Speaker 2… |
| `--timestamps` | Thêm `[hh:mm:ss]` ở đầu từng dòng, chỉ dùng với định dạng `text`. |
| `--language` | Chọn mã ISO 639-1 hoặc để `auto` như mặc định. |
| `--source` | Chọn `auto` (mặc định) hoặc `stt`. Nếu video có track phù hợp, YouTube, X, TikTok, Bluesky, Dailymotion và LinkedIn còn nhận `captions`. Chế độ `captions` (chỉ phụ đề) không tải audio, không chuyển sang STT. |
| `--fresh` | Xử lý link lại từ đầu thay vì dùng job cũ trong 24 giờ qua. |

Ví dụ bật nhận diện người nói và thêm mốc thời gian:

```bash
transcript1 --speakers --timestamps --language en interview.mp3
```

Không kết hợp `--speakers` với `--source captions`. Với `auto`, bật nhận diện người nói sẽ bỏ qua phụ đề. YouTube và X vẫn giữ cách xử lý phụ đề hiện có; TikTok, Bluesky, Dailymotion và LinkedIn cũng cho phép lấy track phụ đề sẵn có. Ngoài YouTube, phụ đề chỉ có mốc thời gian theo đoạn (`words: null`), kể cả bản tự động. Xem [Link video và tùy chọn](https://transcript1.com/vi/docs/sources-and-options) để tra cứu khả năng của từng nguồn và cách chọn ngôn ngữ.

## Script và AI agent

Nếu AI agent truy cập được shell, nó có thể cài CLI, đặt `TRANSCRIPT1_API_KEY`, rồi chạy `transcript1 <link>` hoặc `transcript1 <file>`. Nếu client dùng MCP, làm theo [hướng dẫn kết nối MCP server](https://transcript1.com/vi/docs/mcp).

Để script dễ đọc stdout, thêm `--json`. Mỗi đầu vào xử lý xong sẽ có một dòng JSON riêng, không kèm tiến độ, phần tổng kết hay thông báo cập nhật:

```bash
transcript1 --json 'https://youtu.be/dQw4w9WgXcQ'
```

Với job đã kết thúc, dòng JSON chứa object transcription của API cùng `input` và `reused`. Nếu đã lưu transcript ra file, dòng đó có `file` thay cho `transcript`. Nếu lỗi xảy ra trước khi có ID, bạn nhận `input` và object `error` gồm `code`, `message`. Đầu vào bị bỏ qua có `input`, `skipped` (`exists` hoặc `out_of_minutes`), cùng `file` nếu có. Giá trị `exists` chỉ dùng cho link YouTube và file trên máy.

Nếu chỉ gửi một đầu vào và không đặt `-o`, `--json` trả cả transcript trong object và bỏ qua `-f`. Nếu gửi nhiều đầu vào mà không đặt `-o`, CLI lưu transcript vào `./transcripts`; mỗi dòng JSON trả đường dẫn `file`, không kèm `transcript`. Bất cứ khi nào lưu ra file, định dạng file do `-f` quyết định. Nếu chỉ muốn ẩn tiến độ và phần tổng kết mà vẫn xem transcript cùng lỗi, dùng `-q` hoặc `--quiet`.

Muốn gửi job trước rồi quay lại lấy transcript sau:

```bash
transcript1 --no-wait interview.mp3
transcript1 get <id>
```

Lấy ID lệnh đầu in ra để thay cho `<id>`. Với `--no-wait`, CLI chỉ in ID và trạng thái; thêm `--json` thì in object. Lệnh `get` sẽ chờ nếu job còn chạy. Bạn có thể dùng cùng `-f`, `-o`, `--timestamps`, `--no-wait`, `--json` và `-q`.

## Cập nhật

```bash
transcript1 update
```

Khi stderr trỏ đến terminal, CLI kiểm tra bản mới tối đa một lần mỗi 24 giờ và thông báo nếu có. Đặt `TRANSCRIPT1_NO_UPDATE_CHECK=1` để tắt kiểm tra. Dùng `--json` hoặc `-q` cũng ẩn thông báo này.

## Mã thoát

| Mã | Khi nào trả về |
|---|---|
| 0 | Tất cả đầu vào đã xử lý xong, hoặc được bỏ qua vì đã có file transcript (link YouTube và file trên máy). |
| 1 | Có ít nhất một đầu vào gặp lỗi hoặc bị bỏ qua vì không đủ phút. |
| 2 | Dùng lệnh chưa đúng hoặc có vấn đề đăng nhập. |
| 130 | Lệnh bị ngắt. |

Xem đầy đủ lệnh và flag bằng `transcript1 --help`, hoặc chỉ chạy `transcript1`.
