# CHO CLAUDE ĐỌC: Bước 17. Cắt video dài thành short tự động

> Tài liệu này viết cho Claude Code của học viên. Người học chỉ cần dán câu lệnh bên dưới vào Claude, Claude đọc file này rồi làm.
> Thuộc hệ thống triển khai AI 20 bước của Trương Minh Kiên. Trang bước này: https://trienkhaivideo.truongminhkien.vn

## Việc cần làm

AI săn đoạn đắt giá, tự gõ phụ đề tiếng Việt, cắt tiếng đệm, làm ảnh bìa, đăng thẳng lên Lark Base.

Câu lệnh học viên dán vào Claude:

```
Tải gói https://trienkhaivideo.truongminhkien.vn/cat-video-short.zip, giải nén, đọc CHO-CLAUDE-DOC.md rồi cài phần mềm cắt video short cho tôi và chạy thử với một video của tôi
```

## Luật khi làm

1. Đọc hết file này, kể cả phần bẫy, trước khi chạy lệnh nào.
2. Việc cần mật khẩu, mã OTP, token hay thanh toán thì dừng lại để học viên tự làm, không nhập hộ.
3. Không xoá dữ liệu, bản ghi DNS hay file cũ của học viên. Chỉ thêm.
4. Khoá bí mật chỉ nằm trong `.env` (đã có trong `.gitignore`), không ghi vào mã, wiki hay kết quả.
5. Xong mỗi bước thì kiểm tra thật (chạy thử, đọc lại) rồi mới báo xong.
6. Gói này chạy trên máy của học viên, không phải máy người soạn. Mọi đường dẫn tính từ thư mục giải nén hoặc thư mục vault của học viên; hỏi học viên nếu cần. Skill nào nhắc tới file `output/...` hay trang `wiki/...` mà vault học viên chưa có thì đó chỉ là nguồn tham khảo của người soạn: bỏ qua, dùng nội dung ngay trong skill. Riêng `wiki/concepts/bo-mau-thuong-hieu.md`: nếu chưa có, chép từ `mau/bo-mau-thuong-hieu.md` trong gói rồi hỏi học viên để điền.

## Skill trong gói

- `professional-video-editor`
- `tmk-mkt-bien-tap-video-viral-short-studio`

Cách cài skill: chép từng thư mục trong `.claude/skills/` của gói vào `.claude/skills/` của vault Obsidian (bước 1). Tên thư mục phải trùng tên skill, file chính tên `SKILL.md`.

## Cách cài đặt từng bước (làm theo thứ tự)

### CHO CLAUDE ĐỌC — cài Viral Short Studio (video dài → nhiều short tự động), có kinh nghiệm chạy thật

> Bạn là Claude Code trên máy một người mới. Họ vừa dán: *"…cài Viral Short Studio cho tôi…"*.
> Phần mềm của **Trương Minh Kiên** (nằm ngay trong gói zip này): chạy local,
> nghe video bằng Whisper, gọi `claude -p` chọn đoạn đắt giá, cắt 9:16, phụ đề, bìa, đưa về Lark Base.
> Gói zip có đủ mã phần mềm, kèm **bẫy đã trả giá khi chạy thật ngày 20/09/2026** (FFmpeg 9,
> driver NVIDIA 596, RTX 5060, Windows 11) và cách nghiệm thu. Đọc tệp này trước, rồi mới đọc
> `ĐỌC TÔI TRƯỚC.md` + `HƯỚNG DẪN.txt` của gói gốc.

## 0. Nói với người dùng trước

- Máy cần: Windows 10/11, ổ trống **≥ 50 GB** (video tạm rất nặng), Node, FFmpeg, Python, Claude Code
  đã đăng nhập. Card NVIDIA giúp nhanh gấp nhiều lần — nhưng **chỉ khi driver đủ mới** (bẫy 2).
- Mỗi lần "cắt tự động" gọi Claude 1–3 lần (tốn token của gói Claude). Video **chào hỏi/giới thiệu
  ngắn dưới 5 phút AI sẽ không chọn được đoạn nào** — phần mềm tự rơi về chia theo mật độ lời nói
  (bẫy 4). Đầu vào đúng: bài giảng, livestream, hội thảo ≥ 10 phút.
- Nối Lark Base là tuỳ chọn; muốn nối thì làm gói `tro-ly-lark` và `dang-facebook-tu-dong` trước.

## 1. Lấy gói và cài

Giải nén gói `https://trienkhaivideo.truongminhkien.vn/cat-video-short.zip` vào `C:\VIRAL-SHORT-STUDIO` (gói đã có đủ mã, không cần GitHub, không cần git).
Đường dẫn **không dấu, không khoảng trắng**, trên ổ có ≥ 50 GB trống. Chạy `CÀI ĐẶT (chạy 1 lần).bat`
(có thể phải chạy 2 lần — lần 1 cài Node/FFmpeg/Python, lần 2 cài Whisper/Claude/Lark). Sau khi cài
xong **mở cửa sổ mới** rồi chạy `node "KIỂM TRA HỆ THỐNG.mjs"` — phải thấy "Đủ công cụ bắt buộc".

## 2. Vá ba chỗ trước khi chạy lần đầu (bắt buộc với FFmpeg ≥ 7)

Kiểm `ffmpeg -version`. Nếu bản ≥ 7 (winget cài bản mới nhất, 09/2026 là **9.0.1**):

1. `lib/autoclip.mjs` dòng ~267: đổi `"-vsync", "cfr"` → `"-fps_mode", "cfr"`. Không vá: **mọi short
   đều lỗi** `Unrecognized option 'vsync'`, "XONG: 0/1 short" (bẫy 1).
2. Grep cả thư mục `lib/` chữ `vsync` — vá hết chỗ còn lại nếu có.
3. `START.bat`: cho trình duyệt mở **sau** máy chủ 7 giây (bẫy 11), nếu không lần đầu nào cũng thấy "từ chối kết nối".

## 3. Chạy thử một video ngắn — 2 pha

Mở phần mềm bằng `START.bat` (cửa sổ có tiêu đề — **không** dùng `MỞ PHẦN MỀM.vbs` ẩn cửa sổ, bẫy 8)
→ `http://localhost:5178`. Thử bằng API để đọc được log:

```
### Pha 1: nghe + chọn đoạn (không render)
curl -X POST http://localhost:5178/api/autoclip/plan -H "content-type: application/json" -d "{\"path\":\"C:/…/video.mp4\"}"
### → {"jobId":"acplan-…"}; đọc log: curl http://localhost:5178/api/job/<jobId>
### Pha 2: render đoạn đã duyệt
curl -X POST http://localhost:5178/api/autoclip/render -H "content-type: application/json" -d "{\"source\":\"…\",\"transcriptFile\":\"…\",\"clips\":[…từ pha 1…]}"
```
Đo thật 20/09/2026, video 2,7 phút, CPU: nghe (Whisper medium) ~20 s · render 1 short 59 s mất **55 s**
(tốc độ 1,07×) · file ra **169 MB** (23 Mbps — bẫy 6).

## 3b. Nối Lark Base (khi người dùng đã có bảng đăng Facebook)

Bảng đích là bảng "Đăng bài tự động" của gói `dang-facebook-tu-dong` (cột: Nội dung · Loại · Page · Ảnh/video · Lịch đăng bài).
Dò bảng bằng `POST /api/lark/probe {"baseLink": …}`; lưu bằng `POST /api/settings {"lark": {baseToken, tableId,
contentField:"Nội dung", attachField:"<field ID của Ảnh/video>", typeField:"Loại", typeValue:"Video", fanpageField:"Page",
fanpageRec:"<record_id Page trong bảng 14.1>"}}`. Thử `POST /api/lark-post {videoPath, thumbPath, caption}` rồi mở bảng:
dòng mới phải có Loại=Video, Page, 2 tệp đính kèm, **và có Lịch đăng bài** (bẫy 15).

## 4. Nghiệm thu

1. `node "KIỂM TRA HỆ THỐNG.mjs"`: FFmpeg ✅, Whisper ✅, Claude CLI ✅.
2. `curl http://localhost:5178/api/health` → `"ok":true`; ghi lại `"gpu":true/false` — **đây mới là
   sự thật về GPU**, không phải dòng "GPU NVENC có" của bước 1 (bẫy 2).
3. Pha 1 trên một video ≥ 10 phút: log có "AI trả … ký tự, đọc được N ứng viên" với N ≥ 1.
4. Pha 2: "XONG: 1/1 short", có `.mp4` + `-thumb.jpg` + `.txt` (caption) trong `work/out/<ngày>-<tên>/`.
   Mở video xem phụ đề, hook đầu video **không bị cắt cụt** (bẫy Kiên #3).

## 5. Bẫy đã trả giá (4 của Trương Minh Kiên + 11 đo thật 20/09/2026)

| # | Bẫy | Cách xử |
|---|---|---|
| 1 | **FFmpeg ≥ 7 bỏ `-vsync`** → mọi short lỗi "Unrecognized option 'vsync'" | Vá `lib/autoclip.mjs` → `-fps_mode` (mục 2) |
| 2 | **FFmpeg 9 đòi driver NVIDIA ≥ 610 cho NVENC** ("Required: 13.1 Found: 13.0"). Bước kiểm nói "GPU NVENC có" nhưng `api/health` trả `gpu:false` → render CPU chậm 1× thời gian thật | Cập nhật driver NVIDIA (GeForce Experience/NVIDIA App) **hoặc** cài FFmpeg 7.x. Kiểm bằng `ffmpeg -f lavfi -i color=c=black:s=256x256:d=0.1 -c:v h264_nvenc -f null -` |
| 3 | winget nâng FFmpeg → **đổi tên thư mục** (`ffmpeg-8.1.2…` → `ffmpeg-9.0.1…`); cửa sổ/tiến trình đang mở giữ PATH cũ → "FFmpeg THIẾU" dù đã cài | Mở cửa sổ mới; kiểm PATH người dùng trỏ đúng thư mục |
| 4 | Video ngắn/chào hỏi → Claude trả `[]` → "DÙNG DỰ PHÒNG: chia theo câu nói", điểm 60 cho mọi đoạn | Đầu vào phải là video nội dung ≥ 10 phút; hoặc dùng "Giữ trọn cả video, chỉ dọn gọn" |
| 5 | "Khởi động lại" nhưng tiến trình `node server.mjs` cũ vẫn giữ cổng 5178 → **bản vá không có hiệu lực** | Tắt bằng `TẮT PHẦN MỀM.bat` hoặc Stop-Process theo dòng lệnh `server.mjs`, rồi mở lại |
| 6 | File ra ~23 Mbps: 59 s = 169 MB — nặng khi đăng Lark/Facebook, đầy ổ nhanh | Hạ bitrate trong preset (`lib/presets.mjs`), chạy `DỌN KHO.bat` định kỳ; ổ dưới 20 GB là phần mềm cảnh báo |
| 7 | (Kiên) Cache tải Google Drive khớp nhầm transcript với video | Xoá cache rồi tải lại trước khi nghi chỗ khác |
| 8 | `MỞ PHẦN MỀM.vbs` chạy **ẩn cửa sổ** → không biết máy đang render, không tắt được | Dùng `START.bat`; "TỰ KHỞI ĐỘNG LẠI" chỉ bật khi người dùng đồng ý |
| 9 | (Kiên) Hook quá dài bị cắt cụt âm thầm | Hook ≤ 2–3 dòng; xem lại video trước khi đưa vào hàng chờ |
| 10 | (Kiên) Script gốc giả định ổ G: | Dùng tham số đường dẫn tuỳ chỉnh, không tạo ổ giả, không sửa cứng mã |
| 11 | `START.bat` mở trình duyệt **trước** khi `node server.mjs` lên → "localhost đã từ chối kết nối" ngay lần đầu | Sửa `START.bat`: `start "" /min cmd /c "timeout /t 7 /nobreak >nul & start "" http://localhost:5178"` rồi mới `node server.mjs`; hoặc bảo người dùng đợi 7 giây và Tải lại |
| 12 | Đường dẫn video có **dấu tiếng Việt / khoảng trắng** → "thiếu/không thấy file" | Chép video vào thư mục `video-vao/` với tên không dấu |
| 13 | Cột đính kèm tên có dấu **`/`** ("Ảnh/video") → lark-cli ghép vào URL thành `%2F` → **HTTP 404** khi upload, dù record đã tạo | Khai cột bằng **field ID** (`fldXXXX`, lấy từ `+field-list`) thay vì tên |
| 14 | Máy có nhiều app lark-cli, app mặc định bị tắt → "app is not enabled" | Vá `lib/larkpost.mjs` đọc `VSS_LARK_PROFILE` từ `.env` và thêm `--profile` vào mọi lệnh (đã có bản vá trong gói) |
| 15 | **Dòng đẩy lên Base không có "Lịch đăng bài" → engine Facebook ĐĂNG NGAY ở lượt cron kế tiếp** (15/45 mỗi giờ) | Vá `postToLark` đặt lịch mặc định `VSS_LARK_SCHEDULE_DAYS=7` (đã có bản vá); kiểm dòng vừa tạo có ngày giờ trước khi rời máy |

## 6. Báo cáo cuối (khuôn)

```
✅ Viral Short Studio tại <đường dẫn> · FFmpeg <bản> (đã vá -fps_mode) · GPU: <true/false, lý do>
🧪 Thử: video <tên> <phút> → pha 1 chọn <N> đoạn (AI/dự phòng) → pha 2 <k>/<N> short, <giây>/short
⚠️ Còn: <driver NVIDIA / Lark chưa nối / logo-watermark chưa có>
```


## Hướng dẫn chi tiết và các bẫy đã gặp

(Bản đầy đủ có hình và nút bấm: https://trienkhaivideo.truongminhkien.vn)

Yêu cầu trước khi bắt đầu

- Đã xong [Bước 14: Đăng Facebook tự động](https://trienkhaifb.truongminhkien.vn/) (video cắt xong sẽ nối vào đúng bảng lịch đăng ở đó)
- Máy tính đủ mạnh để xử lý video (cắt/render video tốn nhiều tài nguyên máy)

## Cách hoạt động (nói với Claude AI để nó tự dựng)

1

### Cài phần mềm cắt video (đã có sẵn code thật, không tự viết lại)

Đây là phần mềm mã nguồn mở đã có sẵn — đưa thẳng link này cho Claude AI, không cần giải thích gì thêm:

https://trienkhaivideo.truongminhkien.vn/cat-video-short.zip

Nói: *"Đọc repo ở link trên rồi cài cho tôi."* Claude AI sẽ tự clone về, kiểm tra máy đã có công cụ xử lý video (FFmpeg) + Python chưa, cài nếu thiếu (qua `winget`/`pip`), cài thêm các thư viện nhận diện giọng nói/tải video cần thiết.

2

### Đưa video thô vào

Bỏ video dài (bài giảng, livestream, phỏng vấn...) vào thư mục chỉ định. Phần mềm tự tìm những đoạn "đắt giá" nhất để cắt thành short riêng, hoặc giữ nguyên cả video chỉ dọn gọn tiếng đệm/khoảng lặng.

3

### Nối thẳng vào hàng chờ đăng

Yêu cầu Claude AI cấu hình: video cắt xong tự động tải lên đúng bảng Lark Base đã dựng ở Bước 14, kèm ảnh bìa tự tạo và chữ hook đầu video — không cần tự tay kéo thả từng file.

## ⚠ Bẫy đã gặp thật + cách gỡ

1\. Lỗi cắt video vì công cụ FFmpeg đổi tên tùy chọn giữa các bản

Bản FFmpeg mới hơn đã bỏ hẳn tùy chọn đồng bộ khung hình cũ (`-vsync`) khiến script báo lỗi ngay khi bắt đầu render.

**Cách gỡ:** đổi sang tên tùy chọn mới tương đương (`-fps_mode`) — luôn kiểm tra phiên bản FFmpeg đang cài trước khi báo lỗi do "video hỏng".

2\. Bộ nhớ đệm (cache) nhận nhầm file, cắt sai video

Khi tải video từ ổ đĩa đám mây (Google Drive), cơ chế lưu tạm có thể khớp nhầm file bản ghi chép chữ (transcript) với file video thật, khiến quá trình cắt xử lý sai dữ liệu.

**Cách gỡ:** nếu kết quả ra sai/lỗi khó hiểu, xoá sạch bộ nhớ đệm rồi tải lại từ đầu trước khi nghi ngờ lỗi ở khâu khác.

3\. Chữ hook đầu video bị cắt mất chữ cuối một cách âm thầm

Nếu chữ hook (câu chữ nổi bật đầu video) quá dài, phần mềm tự động cắt bớt để vừa khung hình — nhưng không báo cho bạn biết chữ đã bị cắt, dễ đăng nhầm 1 câu cụt nghĩa.

**Cách gỡ:** giới hạn chữ hook tối đa 2-3 dòng ngắn khi soạn, và luôn xem lại video xuất ra trước khi đưa vào hàng chờ đăng thật.

4\. Script cài đặt gốc giả định sẵn 1 ổ đĩa cụ thể (ví dụ ổ G:) — máy bạn có thể không có ổ đó

Repo gốc được viết mặc định cho 1 cấu hình máy cụ thể của tác giả — không phải máy nào cũng khớp.

**Cách gỡ:** script kiểm tra máy đi kèm repo đã hỗ trợ sẵn tham số chỉ đường dẫn tuỳ chỉnh — yêu cầu Claude AI dùng đúng tham số đó, trỏ vào đường dẫn thật có trên máy bạn (ví dụ `C:\viral-short-studio`) thay vì cố tạo ổ đĩa giả hoặc sửa cứng code gốc.

Bước tiếp theo

Đã có đủ nội dung và video, sang bước kế tiếp: máy tự gửi chuỗi thư để nuôi những người đã để lại email.

[Sang bước 18: Máy gửi thư nuôi →](https://trienkhaithunuoi.truongminhkien.vn/)

