Trả lời ngắn
Sau các mẫu cơ bản, đây là 11 Expression dùng rất nhiều khi làm video thực tế: tiêu đề và con số bằng Text+, chuyển động vào khung bằng Transform, làm nét hoặc chớp sáng bằng Blur, Glow, BrightnessContrast và lộ hình bằng Mask. Mỗi mẫu ghi rõ dán vào đâu và cách đổi con số cho hợp video của anh em.
Giá trị của cả 11 công thức đã được đối chiếu bằng script trong Fusion của DaVinci Resolve Studio 21.1 (macOS). Hình ảnh render thực tế và các phiên bản khác chưa kiểm tra. Mỗi mẫu một lần dùng time-comp.RenderStart: khi Render Start của comp khác 0, chuyển động bắt đầu từ mốc đó.
Nhóm Text+
1. Con trỏ gõ chữ nhấp nháy
Dán vào: Text1 → Styled Text
Text("EDIT KHÔNG KHÓ" .. iif(time%24 < 12, "|", ""))Chữ cố định kèm con trỏ | hiện 12 frame rồi ẩn 12 frame. Đổi nội dung trong dấu nháy; nối với Typewriter ở bài trước để có cảm giác đang gõ. Dấu tiếng Việt hiển thị bình thường.
2. Đếm giá tiền có dấu chấm ngăn cách
Dán vào: Text1 → Styled Text
Text(string.gsub(string.reverse(string.gsub(string.reverse(tostring(math.floor(1250000*min(1,max(0,(time-comp.RenderStart)/60))))), "(%d%d%d)", "%1.")), "^%.", "") .. "đ")Số chạy từ 0 đến 1.250.000đ trong 60 frame, tự chèn dấu chấm theo kiểu Việt Nam (1.250.000đ). Đổi 1250000 thành mức giá của anh em, đổi đ thành ký hiệu khác nếu cần, đổi 60 để chỉnh thời gian đếm.
3. Đồng hồ phút:giây
Dán vào: Text1 → Styled Text
Text(string.format("%02d:%02d", math.floor(time/comp:GetPrefs("Comp.FrameFormat.Rate")/60), math.floor(time/comp:GetPrefs("Comp.FrameFormat.Rate"))%60))Hiện 00:00, 00:01… theo thời gian chạy, tự lấy FPS của comp nên đúng với cả 24, 30 hay 60fps. Đã đối chiếu ở 30fps: frame 30 hiện 00:01, frame 1800 hiện 01:00.
4. Chữ bung rộng rồi thu khít
Dán vào: Text1 → Character Spacing
1 + 0.8*exp(-max(0,time-comp.RenderStart)/12)Khoảng cách chữ bắt đầu ở 1.8 rồi thu về 1.0. Dùng cho tiêu đề mở đầu. 0.8 là độ bung ban đầu, 12 là tốc độ thu lại (số lớn thì chậm hơn).
5. Typewriter có ease-out
Dán vào: Text1 → Text → Write On → End
1 - pow(1 - min(1,max(0,(time-comp.RenderStart)/45)), 3)Chữ hiện nhanh lúc đầu rồi chậm dần trong 45 frame, tự nhiên hơn bản tuyến tính ở bài Text+.
Nhóm Transform
6. Trượt vào có ease-out
Dán vào: Transform1 → Center
Point(0.5 - 0.5*pow(1-min(1,max(0,(time-comp.RenderStart)/20)),3), 0.5)Đối tượng trượt từ mép trái (X = 0) về giữa khung trong 20 frame, giảm tốc mượt. Muốn trượt từ phải, đổi dấu thành 0.5 + 0.5*pow(...); muốn dừng ở vị trí khác, thay 0.5 bằng tọa độ mong muốn.
7. Phóng to nảy (overshoot)
Dán vào: Transform1 → Size
1 - exp(-0.25*max(0,time-comp.RenderStart))*cos(0.5*max(0,time-comp.RenderStart))Size từ 0 vọt qua 1 rồi dao động tắt dần quanh 1.0, kiểu lò xo. Tăng 0.5 để nảy nhanh hơn; tăng 0.25 để tắt nhanh hơn.
Nhóm Blur, Glow và màu
8. Rõ nét dần (pull focus)
Dán vào: Blur1 → Blur Size
20*exp(-max(0,time-comp.RenderStart)/10)Ảnh mờ ở mức 20 rồi nét dần về 0. Nếu node Blur đang bật Lock X/Y, chỉ cần dán vào Blur Size; nếu không, dán thêm cho Y Blur Size.
9. Đèn chập chờn
Dán vào: BrightnessContrast1 → Gain
1 + 0.08*sin(time*0.9)*sin(time*2.3)Gain dao động khoảng ±0.08 nhờ hai sóng lệch nhịp nên chập chờn không đều. Tăng 0.08 để chớp mạnh hơn; với cảnh cần tránh chớp sáng, giữ giá trị nhỏ.
10. Glow nhịp thở
Dán vào: Glow1 → Glow
0.5 + 0.3*sin(time/10)Cường độ Glow dao động giữa 0.2 và 0.8, tạo cảm giác phát sáng như đang thở.
Nhóm Mask
11. Mở rộng từ tâm có ease-out
Dán vào: Rectangle1 → Width
1 - pow(1 - min(1,max(0,(time-comp.RenderStart)/20)), 3)Width của Mask Rectangle tăng từ 0 lên 1 trong 20 frame, nhanh lúc đầu rồi chậm dần, dùng để lộ hình từ giữa ra hai bên. Muốn mask tạo vòng tròn phát sáng, xem bài Mask Ellipse.
Mẹo chung khi áp dụng
- Mỗi mẫu chỉ dán vào đúng tham số được ghi; Text(...) chỉ dùng cho Styled Text.
- Các mẫu một lần dùng
time-comp.RenderStart; nếu clip bắt đầu ở frame khác 0, kiểm tra Render Start của comp. - Số
20,45,60là số frame, không phải giây; thay đổi theo FPS của video. - Đổi tên node thì công thức tham chiếu node khác phải sửa lại; các mẫu trong bài này không tham chiếu node khác.
Xem minh họa chuyển động và sao chép nhanh trong thư viện Expression.
Khi nào nên dùng
- Cần con số, giá tiền hoặc đồng hồ tự chạy trong Text+ mà không phải gõ từng keyframe.
- Cần chuyển động vào khung, làm nét, chớp sáng hoặc lộ hình mượt bằng một dòng công thức.
Khi nào chưa nên dùng
- Cần từng ký tự chuyển động riêng: dùng Follower thay vì Simple Expression.
- Cần hiệu ứng khớp nhịp nhạc hoặc đọc âm thanh: các công thức không tự bám BPM.
Câu hỏi liên quan
Đếm giá tiền thêm dấu chấm hàng nghìn bằng Expression như thế nào?
Dùng `string.gsub` chèn dấu chấm sau mỗi 3 chữ số trên chuỗi đảo ngược rồi đảo lại, kèm ký hiệu `đ`. Công thức đầy đủ nằm ở mẫu số 2 và đã cho kết quả đúng định dạng 1.250.000đ.
Đồng hồ mm:ss có tự theo FPS của comp không?
Có. Mẫu số 3 lấy FPS bằng `comp:GetPrefs("Comp.FrameFormat.Rate")` nên không cần nhập FPS thủ công.
Vì sao nhiều mẫu dùng `time-comp.RenderStart`?
Để chuyển động một lần bắt đầu tính từ Render Start của comp. Khi Render Start khác 0, chuyển động bắt đầu từ mốc đó thay vì từ frame 0.
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ả →