# 🎬 CapCap — Cẩm nang edit cho nhân viên v1.3.0

> Cập nhật: 05/09/2026. Đây là hướng dẫn cho **các tính năng đang có**, không phải tài liệu kỹ thuật.

---

## 1. Quy trình nhanh nhất cho một video

1. Bấm **📂 Tải video** hoặc kéo-thả file vào app.
2. Nếu chọn nhiều file, kiểm tra ngôn ngữ từng file và chọn **Video chính**.
   - Video nguồn **ngang** sẽ tự hiện trong canvas **dọc 9:16 nền tối**, giữ nguyên tỷ lệ và nằm chính giữa; Preview/Xuất cũng ra đúng 1080×1920. Không crop, không kéo méo.
3. Đợi Caption tự tạo. Video chỉ có nhạc/không lời sẽ tự bỏ qua Caption — vẫn Blur/Dịch/Xuất bình thường.
4. Bấm **🌐 Dịch chữ (khoanh vùng)** → tua video → khoanh lần lượt các vùng chữ gốc.
5. Chọn **Dịch sang**, quyết định **⚡ Bản khác** (không chuẩn bị hoặc chọn tối đa 4 tiếng), rồi bấm **🌐 Dịch tất cả**.
6. Kiểm tra chữ gốc/chữ dịch, template, vị trí, cỡ chữ, timing và thứ tự lớp.
7. Nếu đuôi video thừa: tua tới frame kết thúc → bấm **Cắt phần sau** → xem số giây sẽ bỏ → bấm xác nhận.
8. Bấm **👁 Xem thử**, sau đó **⬇️ Xuất video**.
9. Với job nhiều ngôn ngữ: xuất bản đang mở để mở khóa chip tiếp theo, chuyển chip, rà lại rồi xuất tiếp.

---

## 2. Bảng phím tắt chính xác

| Phím | Tác dụng |
|---|---|
| `Space` | Phát / tạm dừng video. Không giành Space khi focus đang ở nút hoặc ô nhập. |
| `←` / `→` | Tua lùi / tới **0,1 giây**. |
| `Shift + ←/→` | Tua **1 giây**. |
| `Ctrl + ←/→` | Tua **5 giây**. |
| `Delete` hoặc `Backspace` | Xóa Blur / Dịch / Chữ / Ảnh / toàn bộ Caption đang chọn, hoặc các segment đang bôi chọn. Khi đang gõ, chỉ xóa ký tự. |
| `Ctrl + Z` | Hoàn tác project. Khi đang gõ trong input/textarea/contenteditable thì là undo chữ native, không rollback project. |
| `Ctrl + Y` hoặc `Ctrl + Shift + Z` | Làm lại project. |
| `Ctrl + lăn chuột` trên timeline | Zoom timeline tại đúng vị trí con trỏ. |
| `Alt` trong lúc kéo element | Tắt nam châm căn lề để nhích tự do. |
| `Shift` khi bấm nút `− / +` cỡ chữ Dịch | Mỗi lần giảm/tăng **10%**; không giữ Shift = **1%**. |
| `Shift` khi kéo nút xoay Dịch / Ảnh | Xoay theo nấc **15°**. Không giữ Shift vẫn tự hút gần 0/90/180/270° trong 3°. |
| `Shift` khi kéo góc Ảnh | Tạm mở resize tự do; bình thường ảnh luôn khóa đúng tỷ lệ. |
| `Enter` khi đang sửa Caption trực tiếp trên video | Kết thúc sửa. `Shift + Enter` không kết thúc ngay. |
| `Esc` | Đóng modal hoặc popover Cắt đang mở. |

---

## 3. Timeline — thao tác nhanh và chính xác

### Thanh hồng / tua video

- Thanh hồng **chỉ là đường chỉ thị** khi đi qua các hàng Dịch/Caption/Blur/Chữ/Ảnh, nên không chặn click element.
- Chỉ **ruler trên cùng** và **hàng Video/filmstrip dưới cùng** có con trỏ ↔ và cho click/kéo scrub.
- Hàng element khác ưu tiên chọn, kéo, resize hoặc bôi chọn.
- Element kéo chạm cuối video được lưu đúng duration lẻ (ví dụ `23.334s`), nên preview và export che kín frame cuối.

### Segment

| Thao tác | Tác dụng |
|---|---|
| Click segment | Chọn element, mở đúng panel chỉnh sửa. |
| Kéo thân segment | Dời cả đoạn; có hút mốc đầu/cuối/playhead/element khác. |
| Kéo mép trái/phải | Đổi start/end; tối thiểu 0,2 giây. |
| Đúp click segment | Kéo dài đầu hoặc cuối segment tới thanh hồng (thanh hồng phải nằm ngoài segment). |
| `Ctrl + click` vào segment Dịch | Thanh hồng là dao cắt; click phía trái/phải để bỏ bên tương ứng. |
| Chuột phải 2 lần segment Blur/Dịch | Tạm ẩn / hiện element đó trong preview. |
| Kéo vùng trống | Bôi chọn nhiều segment; `Delete` xóa một lần. |
| Click vùng trống | Bỏ chọn; không tua video. |
| Nút ▲ / ▼ ở đầu track | Đổi thứ tự lớp trên/dưới. |

### Cần nhớ

- Segment còn được chọn nhưng playhead nằm ngoài start/end thì element **không xuất hiện trên video** — đây là timing đúng.
- Segment Dịch hiển thị **chữ gốc OCR**, không còn “Dịch 1 / Dịch 2”. Chưa OCR sẽ ghi “Chưa có chữ gốc”.
- Track Dịch chỉ ghi “Dịch”; nhìn nội dung segment để phân biệt.

---

## 4. Khung video — chọn, kéo, resize, ẩn

### Chung

- Click element để chọn.
- Kéo thân để di chuyển.
- Kéo 8 chấm tròn để resize khung.
- Gần mép/giữa video hoặc element khác sẽ hút căn lề và hiện đường gióng hồng.
- Giữ `Alt` khi kéo để tắt hút.
- Xóa bằng `Delete/Backspace`; canvas không dùng nút X đỏ.
- Click vùng trống để bỏ chọn.

### Tạm ẩn preview

- Chuột phải **2 lần** vào Blur/Dịch: ẩn tạm.
- Chuột phải **2 lần** chỗ trống: hiện lại tất cả.
- Có element ẩn sẽ xuất hiện nút `👁 Hiện lại N element ẩn`.
- Tạm ẩn chỉ ảnh hưởng preview; **export vẫn có đầy đủ**.

---

## 5. Blur

1. Bấm **🟦 Chèn Blur** để thêm vùng Blur tại playhead (mặc định khoảng 3 giây).
2. Chọn **Màu đặc trưng ngôn ngữ** hoặc **Blur trong suốt**.
3. Tick **Blur suốt cả video** nếu muốn phủ toàn bộ thời lượng.
4. Kéo/resize trên video; timing chỉnh ở timeline.
5. `Mẫu theo nước` mặc định thu gọn; bấm mở mới thấy cờ/template.
6. Blur/chữ Dịch/Manual Text chạm cuối video sẽ che kín frame cuối, không hụt vài mili-giây.

**Mẹo:** Nếu chỉ cần che chữ gốc, Blur trong suốt thường tự nhiên hơn hộp màu. Nếu cần đồng bộ nhận diện kênh/ngôn ngữ, dùng màu đặc trưng.

---

## 6. Dịch chữ

### Khoanh và dịch

1. Bấm **🌐 Dịch chữ (khoanh vùng)**.
2. Tua tới từng màn chữ rồi kéo khoanh. Vùng mới mặc định dài **1,5 giây**.
3. Khoanh xong bấm **✓ Dừng khoanh**.
4. Chọn target trong **Dịch sang**; cờ SVG bên trái cho biết ngôn ngữ active.
5. Chọn **⚡ Bản khác** trước lần Dịch tất cả đầu tiên.
6. Bấm **🌐 Dịch tất cả** để đọc/dịch các vùng cùng một batch, giúp thuật ngữ nhất quán.

### Sửa lỗi OCR / dịch

- Timeline cho biết chữ gốc của mỗi segment.
- Click vùng → sửa **Chữ gốc** nếu OCR sai → bấm **🪄 Dịch lại ô này**.
- Sửa trực tiếp **Chữ dịch** nếu chỉ cần chỉnh câu cuối.
- Dịch lại không reset cỡ chữ manual hợp lệ.
- Video không thấy chữ rõ sẽ fail-safe, không đoán bừa; tua tới frame rõ hơn hoặc sửa chữ gốc tay.

### Cỡ chữ

- Slider: 40%–500%.
- Nút `− / +`: 1%; giữ Shift: 10%.
- Resize box **không đổi cỡ chữ**. Box là vùng nền/che; font là state riêng.
- Session cũ bị base 7px sẽ tự repair và về 100%; sau đó 305% là 3.05× thật.
- Text một dòng không tự wrap; chỉ xuống dòng nếu bản dịch có `\n`. Chữ lớn có thể tràn đều ra ngoài khung — preview và export dùng cùng scale.

### Xoay

- Chọn vùng đã dịch → kéo nút ↻.
- Gần 0/90/180/270° tự hút.
- Giữ Shift = nấc 15°.
- 359° tự chuẩn hóa về 0°.
- Sau khi xoay, preview/export vẫn lấy cùng tâm và cỡ chữ.

### Template

- Vùng khoanh thêm sau này tự kế thừa đúng template ngôn ngữ active; không quay về vàng/đen.
- `Mẫu theo nước` mặc định đóng. Summary luôn hiện cờ mẫu đang dùng.
- Cờ là SVG local ở preset, dropdown và chip toolbar — không phụ thuộc emoji Windows.
- Bấm **🫥 Ẩn chữ dịch**: ẩn hoàn toàn text nhưng vẫn giữ viền hồng + mask mờ để canh chữ gốc; bấm lại để hiện.

**Mẹo nhanh:** Khoanh hết vùng trước rồi Dịch tất cả một lần. Chỉ dùng Dịch lại cho vùng sai để đỡ tốn thời gian và giữ thuật ngữ nhất quán.

---

## 7. Caption

- Khi mở video, Caption tự chạy.
- Video không lời/nhạc-only: app báo bỏ qua Caption, không phải lỗi.
- Click Caption một lần để chọn và hiện khung.
- Khi đã chọn, kéo thân để đổi vị trí **ngang và dọc**; app giữ chữ trong khung để không kéo mất ra ngoài.
- Vị trí ngang/dọc được giữ qua restart, Undo/Redo và khi chuyển bản ngôn ngữ; đổi nút căn lề sẽ đưa Caption về giữa ngang.
- Kéo chấm góc để đổi cỡ Caption; Caption luôn một dòng, không resize ngang.
- Đúp click Caption trên video để sửa nội dung trực tiếp; `Enter` kết thúc.
- Chọn số từ mỗi chunk và animation trong panel.
- Với tiếng Nhật, app tự bỏ khoảng cách kiểu Latin và không phóng to từ active để tránh dính chữ.
- `Mẫu theo nước` mặc định đóng, mở khi cần đổi style.
- Nút **Caption** nằm trực tiếp trên toolbar để tạo lại Caption cho video đang mở.
- Nút 🗑️ Xóa toàn bộ Caption; `Ctrl+Z` phục hồi nếu lỡ xóa.

---

## 8. T⁺ Chữ thủ công

1. Tua playhead tới thời điểm cần → bấm trực tiếp **T⁺ Thêm chữ** trên toolbar.
2. Mặc định dài khoảng 3 giây.
3. Sửa nội dung trong panel hoặc đúp click chữ trên video.
4. Chỉnh font, cỡ px, căn lề, màu nền/chữ qua preset `Aa`.
5. `Mặc định chữ mới = Theo mã video`: EN dùng Anh/Việt, DE dùng Đức, JA dùng Nhật… Có thể chọn một nước cố định và app nhớ cho video/restart sau.
6. `Mẫu theo nước cho Chữ` chỉ đổi Chữ đang chọn; không đổi Caption/Blur/Dịch.
7. Kéo/resize khung không đổi cỡ font; timing chỉnh trên timeline.
8. Xóa bằng Delete/Backspace hoặc nút 🗑. Preview/export hỗ trợ như Blur/Dịch/Caption.

---

## 9. 🖼️ Ảnh overlay

1. Tua playhead → bấm trực tiếp **🖼️ Thêm ảnh** → chọn JPG/PNG/WebP/BMP. Có thể thêm nhiều ảnh.
2. Ảnh mới nằm giữa video, vừa tối đa khoảng 60% khung và mặc định dài 3 giây.
3. Kéo thân ảnh để di chuyển; kéo bốn chấm góc để resize **giữ đúng tỷ lệ**.
4. Giữ `Shift` khi resize nếu thật sự muốn kéo tự do; giữ `Alt` khi di chuyển để tắt nam châm.
5. Kéo nút `↻` để xoay; gần 0/90/180/270° tự hút, giữ `Shift` để xoay theo nấc 15°.
6. Track `Ảnh` trên timeline hỗ trợ kéo, trim mép, đúp click kéo dài tới playhead, bôi chọn và Delete.
7. Ảnh được giữ qua Undo/restart/đổi bản ngôn ngữ; Preview/Export giữ alpha, size, tâm, góc, timing và thứ tự lớp.
8. Nếu file ảnh gốc bị di chuyển/xóa, CapCap hiện cảnh báo và bỏ qua ảnh đó khi xuất thay vì crash.

---

## 10. Nhiều video / nhiều ngôn ngữ

### Tên file nên dùng

- Có mã nước rõ: `01 en.mp4`, `02_de.mp4`, `jp03.mp4`...
- CapCap nhận: `vi/vn`, `en/eng`, `fr/fra`, `de/ger`, `ja/jp/jpn`, `tr/tur`, `pt/por`, `es/spa`.
- Không có mã hoặc trùng mã: app vẫn nhận nhưng hiển thị cảnh báo để kiểm tra.

### Workflow

1. Chọn 1–4 file.
2. Kiểm tra ngôn ngữ và chọn Video chính.
3. Caption bản chính tạo trước; bản phụ xử lý nền.
4. Chip toolbar có cờ SVG + mã nước + trạng thái Caption/Dịch.
5. Bản phụ bị khóa cho tới khi bản trước được xuất.
6. Sau khi xuất bản đang mở, chip kế tiếp được mở khóa.
7. Layout/Blur/Dịch/Chữ/Ảnh/chữ gốc/cache được giữ khi chuyển variant; geometry và timing có thể scale theo tỷ lệ video/duration.
8. Output ưu tiên tên mã nước lên đầu, ví dụ `en 01.mp4`.

### Trạng thái chip

- `●` Caption sẵn; `…` đang tạo; `!` lỗi; `✓` đã xuất.
- `D✓` bản dịch sẵn; `D…` đang dịch; `D!` lỗi.
- `🔒` chưa mở khóa.

---

## 11. Cắt đầu/đuôi, nền và hiệu ứng

### Chọn cắt 0,1–0,5 giây đầu

- Bấm **Cắt phần đầu** ngay trên toolbar (nằm trước **Cắt phần sau**), rồi chọn `0,1s`, `0,2s`, `0,3s`, `0,4s` hoặc `0,5s` theo đúng phần mở đầu cần bỏ.
- Không có mức cắt mặc định: video mới luôn bắt đầu ở `Chưa cắt` cho tới khi nhân viên chủ động chọn.
- **Chỉ cắt một lần ở video gốc/video chính.** Mọi video ngôn ngữ khác tự nhận cả phần đầu và phần sau; khi mở bản phụ, controls bị khóa và app báo **Video này đã được tự động cắt từ video gốc — không cắt thêm**.
- Mức đang dùng trên video gốc có viền hồng và dòng `Đang cắt …`; chọn mức khác sẽ thay ngay mức cũ và có thể Undo/Redo.
- Non-destructive: không sửa file gốc. Timeline hiển thị lại từ 0:00; Preview, MP4 video+audio và các bản ngôn ngữ đều dùng cùng offset.
- Mở lại panel và bấm **Khôi phục phần đầu** để trở về 0 giây.

### ✂ Cắt toàn bộ phần sau

1. Tua thanh hồng tới **frame muốn video kết thúc**.
2. Bấm **Cắt phần sau** trên toolbar, ngay sau **Cắt phần đầu**.
3. Popover hiện rõ **Sẽ cắt X giây cuối** và thời điểm kết thúc; lúc này video **chưa bị cắt**.
4. Kiểm tra số giây rồi bấm **Cắt X giây cuối** để xác nhận. Timeline mới co lại và video không phát/tua qua điểm cắt.
5. Nút toolbar đổi thành **Đã cắt Xs sau**; mở lại panel và bấm **Khôi phục phần sau** hoặc dùng `Ctrl+Z` để phục hồi.
6. Cắt là non-destructive: Caption/Blur/Dịch/Chữ/Ảnh phía sau vẫn còn trong project khi khôi phục.
7. Chỉ thao tác trên video gốc. Mọi bản ngôn ngữ dùng cùng **tỷ lệ nội dung**; video có duration khác vẫn cắt đúng đoạn tương ứng và hiện cảnh báo tự động cắt.
8. Preview và MP4 video+audio đều dùng đúng điểm kết thúc.

---

## 12. Undo, save và an toàn

- App tự lưu session vào máy.
- `Ctrl+Z` nhớ được cả thao tác mở video mới.
- Gõ trong ô text rồi Ctrl+Z chỉ undo chữ; không rollback project.
- Khi job dịch đang chạy, vẫn có thể kéo timeline/Undo; kết quả async chỉ ghi lại nếu đúng file/đúng source region.
- Bấm **Dịch tất cả** lần nữa khi nút đang quay = dừng job; kết quả đang chờ bị bỏ.
- Khi đang xuất, nút **Xuất video** đổi thành **Dừng xuất** và hiện phần trăm. Bấm để dừng đúng tiến trình hiện tại; file MP4 dở được xóa, file tốt cũ cùng tên vẫn được giữ nguyên, và bản ngôn ngữ chưa bị đánh dấu đã xuất/mở khóa.
- Nếu chỉ muốn hủy, dùng **Dừng xuất** thay vì đóng app hoặc đổi file.

---

## 13. Mẹo làm nhanh

1. **Khoanh theo thứ tự thời gian** để track Dịch ít hàng, dễ nhìn.
2. **Dịch tất cả một lần** thay vì từng ô.
3. Dùng **timeline chữ gốc** để chọn đúng vùng, không cần nhớ Dịch 1/2.
4. Khi cần canh chữ Trung, dùng **Ẩn chữ dịch**, không xóa text.
5. Dùng `←/→` 0,1s để bắt frame chữ rõ nhất trước khi khoanh OCR.
6. Dùng `Ctrl + wheel` để zoom đúng chỗ đang thao tác.
7. Dùng **đúp click segment** để kéo dài nhanh tới playhead.
8. Dùng **Ctrl+click segment Dịch** để cắt nhanh bên trái/phải playhead.
9. Giữ `Alt` nếu nam châm làm khó nhích element.
10. Khi xoay, kéo gần 90° để app tự hút; giữ Shift nếu cần 15°.
11. Chọn template nước trước; mọi vùng Dịch thêm muộn sẽ kế thừa đúng style đó.
12. Với câu tiếng Anh dài, ưu tiên câu ngắn tự nhiên nếu không mất nghĩa; sau đó chỉnh font/rotate, không thu nhỏ box che chữ gốc.
13. Trước export mỗi ngôn ngữ: tua đầu–giữa–cuối, đặc biệt **frame cuối**.

---

## 14. Lỗi thường gặp và cách xử lý

| Hiện tượng | Cách xử lý |
|---|---|
| Element đang chọn nhưng không thấy | Playhead đang ngoài start/end; click segment để tua vào đoạn. |
| Frame cuối không còn che | Bản 1.1.4 đã normalize exact duration; kéo end tới cuối/ruler hoặc dùng “tới hết video”. |
| OCR sai / thiếu dòng | Tua frame rõ hơn; sửa Chữ gốc tay; Dịch lại ô. |
| Chữ Dịch phóng không đúng | Chọn lại box để app repair state cũ; slider về 100%, rồi tăng lại. |
| Dịch lại làm thay câu nhưng không muốn đổi style | Style/manual font hợp lệ được giữ; sửa Chữ dịch tay nếu chỉ chỉnh copy. |
| Caption không xuất hiện | Video có thể không lời, hoặc playhead ngoài timing; kiểm tra status dưới app. |
| Nút Dịch tất cả không chạy | Chưa quyết định “Bản khác”, chưa khoanh vùng, hoặc job khác đang bận. |
| Bản ngôn ngữ khác bị khóa | Xuất xong bản trước để mở khóa chip tiếp theo. |
| App báo hết usage/API | Báo anh Cường; không bấm liên tục. |
| Timeline khó chọn vì playhead | Thanh hồng không bắt chuột trên track element từ 1.1.3+; chỉ ruler/Video scrub. |
| Export chậm | Hiệu ứng AI/nền AI hoặc video dài; chờ progress, không khởi chạy export thứ hai. |

---

## 15. Checklist trước khi xuất

- [ ] Video đúng file/ngôn ngữ/variant.
- [ ] Nếu có Cắt phần sau: `tDur` đúng điểm kết thúc, Xem thử không lộ đuôi, mọi chip ngôn ngữ cùng tỷ lệ.
- [ ] Caption đúng chữ, đúng vị trí, không che nội dung quan trọng.
- [ ] Blur che kín chữ gốc tại đầu–giữa–cuối.
- [ ] Timeline vùng Dịch đúng chữ gốc và đúng timing.
- [ ] Chữ dịch đúng ngôn ngữ, template, font, màu, căn lề, rotation.
- [ ] Ảnh đúng file, tỷ lệ, vị trí, góc xoay, timing và thứ tự lớp; không có cảnh báo thiếu ảnh.
- [ ] Vùng thêm muộn không bị style mặc định sai.
- [ ] Tua frame cuối: element nào cần tới cuối vẫn còn hiển thị.
- [ ] Nền/hiệu ứng đã Xem thử.
- [ ] Output filename đúng mã nước.
- [ ] Bấm Xuất một lần và chờ hoàn tất.

---

## 16. Phân biệt “Xem tạm” và “Export thật”

- Ẩn element bằng chuột phải hoặc nút Ẩn chữ dịch: **chỉ preview**.
- Timing, vị trí, style, font, rotation: ảnh hưởng preview và export.
- `👁 Xem thử`: clip ngắn để rà nhanh.
- `⬇️ Xuất video`: file cuối đầy đủ độ phân giải/timing/style.
