Trả lời ngắn
Text+ không chỉ hiển thị dòng chữ tĩnh. Trong Fusion, Write On → End dùng để chữ hiện dần theo thời gian, còn Styled Text có thể nhận Expression trả về chuỗi để đếm số và tự cập nhật nhãn. Những mẫu dưới đây hữu ích cho video giải thích, thống kê, UI motion và talking-head.
1. Thiết lập Text+ đúng cách
- 1Thêm Text+ vào timeline, mở Fusion, chọn node
Text1. - 2Với Typewriter, nhập nội dung vào Styled Text, rồi nhấp chuột phải ở Write On → End và chọn Expression.
- 3Với Counter / Progress / Shot Label, nhấp chuột phải vào Styled Text → Expression.
- 4Dán đúng đoạn mã được ghi dưới từng mẫu, nhấn Enter rồi phát thử.
Phân biệt: Write On → End cần giá trị 0–1; Styled Text cần kết quả dạng văn bản. Trong ba ví dụ tạo văn bản, Text(...) bao đầu ra. Không dán mã Write On vào Styled Text hoặc ngược lại.
2. Typewriter — Gõ từng ký tự
Dán vào: Text1 → Text → Write On → End
min(1,max(0,(time-comp.RenderStart)/45))Nhập chữ vào Styled Text (có thể dùng tiếng Việt), rồi dán Expression ở Write On → End; chữ hiện dần trong 45 frame.
Nhập thử EDIT KHÔNG KHÓ vào Styled Text; sau đó dán công thức vào Write On → End (không phải Styled Text). Trên 45 frame, mức Write On tăng từ 0 đến 1 nên văn bản được lộ ra dần. Đổi 45 thành 90 để chuyển động chậm hơn; số frame thực tế phụ thuộc FPS.
Lợi thế với tiếng Việt: Write On xử lý việc hiển thị các ký tự đã nhập bằng công cụ Text+; không tự cắt chuỗi UTF-8 bằng string.sub. Nếu muốn gõ từng chữ đúng nhịp riêng biệt, hãy sử dụng Follower hoặc tinh chỉnh animation theo nhu cầu; Write On không bảo đảm mỗi ký tự xuất hiện đúng một số frame cố định.
3. Counter — Tăng số 0 đến 100
Dán vào: Text1 → Styled Text
Text(string.format("%d", math.floor(100*min(1,max(0,(time-comp.RenderStart)/60)))))Tăng từ 0 đến 100 trong 60 frame; cố định ở 100 khi kết thúc.
Giá trị 60 là thời lượng đếm theo frame của comp. Trong một timeline 30fps, 60 frame tương đương khoảng 2 giây; ở 60fps tương đương khoảng 1 giây. Công thức có chặn trên/dưới nên không chạy quá 100.
4. Progress % — Phần trăm tăng dần
Dán vào: Text1 → Styled Text
Text(string.format("%d%%", math.floor(100*min(1,max(0,(time-comp.RenderStart)/60)))))Giống bộ đếm nhưng thêm dấu % bằng ký tự %% trong string.format.
%d là định dạng số nguyên trong string.format; %% là cách ghi dấu % theo quy tắc định dạng chuỗi. Dễ dùng cho biểu đồ hoàn thành, tiến trình cài đặt, chỉ số KPI minh họa.
5. Shot Label — Hiện SHOT 001, SHOT 002...
Dán vào: Text1 → Styled Text
Text("SHOT " .. string.format("%03d", math.floor((time-comp.RenderStart)/12)+1))Tạo SHOT 001, SHOT 002… mỗi 12 frame; .. dùng để nối chuỗi.
%03d bắt số nguyên có ít nhất 3 chữ số (001, 002…). .. là toán tử nối chuỗi trong Lua. Mỗi 12 frame chuyển sang số kế tiếp.
6. 4 lỗi Text+ cần tránh
Lỗi 1: Dán vào Text thường thay vì Text+. Hãy dùng node Text+ trong Fusion để đúng Inspector và cú pháp.
Lỗi 2: Dùng `time` nhưng không xét điểm bắt đầu. Các mẫu một lần sử dụng time-comp.RenderStart; vẫn cần kiểm tra mốc Render Start trong comp thực tế của anh em.
Lỗi 3: Tạo typewriter bằng `string.sub` với chữ Việt. Lua cắt chuỗi theo byte và có thể làm hỏng ký tự UTF-8. Mẫu ở bài dùng Write On thay cho việc cắt chuỗi.
Lỗi 4: Không phân biệt Write On và Styled Text. Mẫu Typewriter vẫn sửa chữ ở Styled Text; ba mẫu đếm số/nhãn ghi Expression vào Styled Text nên cần đổi nội dung trong Expression.
7. Expression hay Follower?
Expression phù hợp để dựng logic giá trị, ví dụ chữ xuất hiện theo thời gian hoặc bộ đếm. Follower phù hợp hơn khi muốn từng ký tự có chuyển động riêng, lệch thời điểm hoặc thay đổi transform/shading. Không nên ép Simple Expression xử lý mọi dạng text animation.
Nếu cần kết hợp tiêu đề và các icon di chuyển đồng bộ, xem tiếp bài Liên kết Node bằng Expression.
Khi nào nên dùng
- Cần chữ hiện dần theo thời gian bằng Write On → End, kể cả chữ có dấu tiếng Việt.
- Cần bộ đếm số, phần trăm tiến trình hoặc nhãn SHOT tự cập nhật trong Text+.
Khi nào chưa nên dùng
- Muốn từng ký tự có chuyển động riêng, lệch thời điểm hoặc thay đổi transform/shading: dùng Follower.
- Không dùng `string.sub` để làm typewriter với chữ Việt vì có thể làm hỏng ký tự UTF-8.
Câu hỏi liên quan
Typewriter tiếng Việt làm thế nào để không hỏng dấu?
Dùng Write On → End với Expression trả về giá trị 0–1 thay vì cắt chuỗi bằng `string.sub`, vì Lua cắt chuỗi theo byte và có thể làm hỏng ký tự UTF-8.
Công thức Counter và Shot Label dán vào đâu?
Dán vào Styled Text của node Text+ vì cần kết quả dạng văn bản, được bao bằng `Text(...)`. Mã của Typewriter thì dán vào Write On → End, không dán nhầm hai trường.
Counter đếm 60 frame bằng bao nhiêu giây?
Phụ thuộc FPS của comp: khoảng 2 giây ở 30fps và khoảng 1 giây ở 60fps.
Tài liệu chính thức
Nội dung được đối chiếu với tài liệu chính thức của nhà phát triển và nhà sản xuất liên quan. Tên menu hoặc tính năng có thể thay đổi theo phiên bản phần mềm và hệ điều hành.
Nguyễn Hoà – Edit Không Khó

Editor & Trainer, chia sẻ DaVinci Resolve, Fusion, CapCut, Motion Graphic và Color Grading theo hướng hiểu bản chất.
Xem trang tác giả →