Claude CodeRemotionMotion graphic

Làm Motion Graphic bằng Claude Code và Remotion: Từ Thư Mục Trống đến Video MP4

Remotion biến component React thành video, nên Claude Code viết và sửa được từng khung hình bằng chat. Bài này gom quy trình bốn cấp độ, bảng chọn phong cách và chín lỗi hay gặp.

Vinclair StudioCập nhật Đăng 12 nguồn được dẫn

Nhân vật Vinclair ngồi ghế đạo diễn cầm loa, dải phim bật ra từ laptop thành các hình khối chuyển động, cạnh logo Remotion và Claude

Lần đầu dùng Remotion, điều làm mình thích nhất là mỗi khung hình đều là code. Remotion biến component React thành video, nên Claude Code viết được, sửa được bằng chat, và render ra MP4 ngay trên máy bạn. Trong bài này, mình gom lại quy trình bốn cấp độ, cách chọn phong cách hình ảnh và những lỗi hay gặp, dựa trên hai sổ tay công khai trên Claude và tài liệu chính thức của Remotion.

Hai nguồn tham khảo chính:

Mình viết lại bằng lời của mình, rút gọn, và thêm những chỗ người mới hay vấp. Prompt đầy đủ bạn xem ở bản gốc.

Phần 1 · Khái niệm

Remotion khác gì phần mềm dựng video

Trong Premiere hay After Effects, bạn kéo keyframe trên timeline. Trong Remotion không có timeline: component đọc số khung hình hiện tại bằng useCurrentFrame(), rồi tính vị trí, độ mờ, kích thước từ số đó bằng interpolate() hoặc spring(). Khung 45 luôn ra đúng một hình, dù render lần nào.

›_BẠNPrompt3 nhịp mỗi cảnh⚙CLAUDE CODEViết componentuseCurrentFrame()▶REMOTIONRender từng khungkhung = hàm của thời gian✓KẾT QUẢMP4render trên máy bạn›_BẠNPrompt3 nhịp mỗi cảnh⚙CLAUDE CODEViết componentuseCurrentFrame()▶REMOTIONRender từng khungkhung = hàm của thời gian✓KẾT QUẢMP4render trên máy bạn
Hình 1. Bạn mô tả, Claude Code viết component, Remotion render từng khung thành MP4.
Lập trình viên có logo Claude trên laptop kéo một cuộn phim, mỗi khung đánh số 1 đến 6 cho thấy quả bóng ở một vị trí khác nhau
Mình hay hình dung Remotion như cuộn phim này: mỗi khung là một ảnh vẽ bằng code từ đúng số khung hình của nó, nên khung 4 lúc nào cũng ra đúng một hình, dù render bao nhiêu lần.

Mình thấy chính điều này làm Remotion hợp với agent. Claude Code không cần "nhìn" timeline, nó chỉ cần viết hàm từ thời gian ra hình. Nhưng cũng chính điều này sinh ra lỗi số một: animation chạy bằng CSS hay hẹn giờ thì xem trước thấy ổn, render ra lại hỏng.

Phần 2 · Cài đặt

Dựng project

Hiểu nguyên lý rồi thì dựng project khá nhanh. Vì sao cần bước này: Remotion cần một thư mục dự án có sẵn cấu trúc chuẩn, và Claude Code cần bộ hướng dẫn chính thức để viết đúng API thay vì đoán. Theo tài liệu Remotion cho coding agent, bốn lệnh là đủ. Bạn mở terminal ở thư mục muốn chứa dự án rồi gõ lần lượt từng dòng, đợi dòng trước chạy xong mới gõ dòng sau:

  1. npx create-video --yes --blank my-video: tạo thư mục my-video chứa một dự án Remotion trống.
  2. cd my-video: đi vào thư mục vừa tạo.
  3. npx remotion skills add: cài bộ skill chính thức để Claude Code hiểu Remotion.
  4. npm run dev: mở Remotion Studio trên trình duyệt để xem trước video.
terminalbash
npx create-video --yes --blank my-video
cd my-video
npx remotion skills add
npm run dev

Lệnh skills add cài bộ Agent Skills chính thức, để Claude Code biết API đúng thay vì đoán. Sau đó mở terminal thứ hai, cd my-video, gõ claude và bắt đầu mô tả video. npm run dev mở Remotion Studio để xem trước.

Mình đã chạy thử lệnh tạo project hai lần ngày 01/11/2026 trên máy Linux (Node 24.22.1): mỗi lần dưới một phút (48 giây và 12 giây, tùy tốc độ mạng), cài Remotion 4.0.539 và React 19.2.3.

Phần 3 · Quy trình

Bốn cấp độ, từ prompt đến footage của bạn

0CẤP 0File luậtCLAUDE.md, một lần1CẤP 1Chỉ promptkhông cần tài sản2CẤP 2Có tham khảostyle-bible.md3CẤP 3Footage của bạnphiên âm, cắt, dựng0CẤP 0File luậtCLAUDE.md, một lần1CẤP 1Chỉ promptkhông cần tài sản2CẤP 2Có tham khảostyle-bible.md3CẤP 3Footage của bạnphiên âm, cắt, dựng
Hình 2. Mỗi cấp thêm một loại đầu vào. Cấp 0 chỉ làm một lần cho cả dự án.

Cấp 0: một file luật cho cả dự án

Sổ tay A khuyên làm việc này đúng một lần: nhờ Claude Code cài đủ công cụ (Remotion, FFmpeg, Agent Skills, Python để tạo âm thanh), render thử một title card 3 giây, rồi viết file CLAUDE.md chứa luật làm video. Có file luật thì mỗi prompt sau chỉ cần nói nội dung, không phải nhắc lại kỹ thuật.

Theo cách mình hiểu, đây là những luật đáng giữ nhất trong file đó:

  • Mọi khung hình là hàm của thời gian. Chỉ dùng useCurrentFrame(), interpolate(), spring(). Cấm CSS transition, @keyframes, setTimeout, Date.now() và Math.random() không có seed.
  • Ảnh dùng <Img> với staticFile(), font tải bằng @remotion/google-fonts. Nếu không, renderer có thể chụp đúng lúc ảnh chưa tải xong.
  • Kích thước mặc định: 1920x1080 30fps, dọc 1080x1920. Với video dọc, chừa vùng an toàn ở trên và dưới để không bị giao diện app che.
Ảnh chụp thậtKhung hình dọc 1080x1920 từ một video ngắn render bằng Remotion, phụ đề tiếng Việt nằm trong vùng an toàn phía dưới
Một khung hình thật từ video dọc 1080x1920, 30fps mà mình render bằng Remotion. Tiêu đề và phụ đề đều nằm trong vùng an toàn, tránh mép trên và mép dưới nơi giao diện app che mất.
  • Luôn có thứ đang chuyển động, cảnh không dài quá vài giây, nền cũng chuyển động nhẹ thay vì một màu phẳng.
  • Quy trình: storyboard trước, chờ duyệt; dựng; render vài ảnh tĩnh ở mỗi điểm cắt để soát; sửa lỗi nặng; cuối cùng mới render MP4.
  • Sổ bài học: lỗi nào sửa quá một lần thì thêm một dòng vào lessons.md, và đọc file đó đầu mỗi phiên.

Cấp 1: chỉ từ prompt ra video

Khi đã có file luật, cấp đầu tiên không cần tài sản gì: mô tả sản phẩm, Claude dựng toàn bộ giao diện bằng component rồi cho nó chuyển động. Mẹo quan trọng nhất của sổ tay A ở cấp này: viết mỗi cảnh theo ba nhịp Bắt đầu → Biến đổi → Kết thúc. "Cho thấy tính năng" là quá mơ hồ; "thẻ việc bay vào từ bốn phía, xoáy về giữa, rồi đập thành ba cột To do / Doing / Done" thì agent có thứ cụ thể để dựng.

Khung prompt gợi ý gồm: sản phẩm là gì và các vật thể thật trên màn hình, định dạng, phong cách (nền, màu nhấn, font), năm cảnh (mở, lộ diện, hành động, kết quả, thẻ kết), âm thanh, và quy trình (storyboard trước). Sổ tay có ví dụ điền sẵn cho một video concept 20 giây về Trello.

Khi Claude gửi storyboard, đọc nó trước khi cho dựng. Khi có ảnh tĩnh, góp ý từng ý một và nói rõ cái gì giữ nguyên.

Cấp 2: prompt cộng video tham khảo

Khi prompt thôi chưa đủ để ra đúng cảm giác bạn muốn, cấp 2 thêm một video tham khảo. Chọn một video bạn thích vì cách nó chuyển động, không phải vì nội dung. Quy trình hai bước:

  1. Nhờ Claude phân tích video tham khảo thành style-bible.md: nhịp cắt, kiểu chuyển cảnh, cách chữ vào ra, bảng màu, chuyển động camera, độ "nảy" của animation, và vài động tác đặc trưng. Cuối file chia hai mục "Học" và "Không chép".
  2. Bạn tự sửa style-bible.md. Đây là chỗ gu của bạn đi vào. Rồi mới nhờ dựng video về chủ đề của bạn theo ngữ pháp đó, kèm bảng đối chiếu cảnh tham khảo → cảnh của mình → khung hình.

Lưu ý của sổ tay: tham khảo chậm thì ra video chậm. Cách kiểm tra đơn giản: đếm số lần cắt trong 10 giây đầu của cả hai video.

Biến thể: đưa URL sản phẩm thay vì chủ đề. Claude lấy logo, màu, font và câu chữ thật từ trang (tải file ảnh, không chụp màn hình trang), rồi dựng theo style bible. Chỉ làm với sản phẩm của bạn hoặc thương hiệu bạn được phép dùng, và soát lại mọi con số trên màn hình với trang gốc.

Cấp 3: footage của bạn, sửa theo phong cách tham khảo

Cấp cuối cùng đưa footage của chính bạn vào. Đặt video thô vào public/raw/, video tham khảo vào public/refs/. Một prompt làm năm việc: phiên âm có timestamp từng chữ (Whisper chạy trên máy), cắt khoảng lặng và câu nói hỏng, phân tích cách dựng của video tham khảo, dựng lại footage theo cách đó, và trình bày kế hoạch trước khi render.

Khi quy trình đã chạy ổn, sổ tay gợi ý đóng gói nó thành một skill của Claude Code để lần sau gọi lại.

Phần 4 · Phong cách

Chọn phong cách: bắt đầu từ việc video phải làm

Sổ tay B có tám phong cách, mỗi cái một prompt dài vài chục nghìn ký tự. Với mình, phần hữu ích nhất là bảng chọn theo mục đích, mình tóm lại như sau:

Video cần làm gìPhong cách gợi ýVì sao
Giải thích một thứ hoạt động ra saoFlat VectorHình 2D biến hình từ ý này sang ý kia, dễ theo dõi
So sánh hai công cụGenerative ParticlesHạt sáng tụ lại thành hai vật thể đặt cạnh nhau
Đi qua một appLiquid GlassKính khúc xạ lướt trên giao diện, hợp video sản phẩm
Chia sẻ mẹo hoặc frameworkKinetic TypographyChữ chính là hình, hợp nội dung dạng danh sách
Một hệ thống, một pipelineIsometric Line ArtNét vẽ kỹ thuật tự vẽ ra rồi chạy
Quy trình cần cảm giác thân thiệnPaper Cut-OutGiấy cắt dán, ấm và thủ công
Âm nhạc, văn hoá, câu chuyệnRisograph PrintMực in chồng, chấm halftone
Game, code, hoài cổ8-Bit Pixel ArtSprite pixel, chữ bitmap

Nếu bạn mới bắt đầu, mình gợi ý bắt đầu bằng Kinetic Typography hoặc Flat Vector: chỉ cần chữ, hình khối và SVG, không cần shader hay WebGL, nên ít chỗ hỏng khi render.

Phần 5 · Kiểm tra

Chín lỗi cần kiểm trước khi bấm render

Trước khi render cả video, mình luôn rà lại chín lỗi mà sổ tay A tổng kết. Mỗi lỗi dưới đây kèm cách tránh.

  1. Bỏ qua bước cài đặt. Không có Agent Skills và file luật, Claude đoán API. Làm Cấp 0 một lần.
  2. Animation chạy bằng CSS hoặc hẹn giờ. Remotion mở nhiều tab trình duyệt để render nhiều khung song song (tài liệu về lỗi nhấp nháy), nên mỗi khung phải tự tính được hình của nó; transition và setTimeout cho ra hình sai. Chỉ dùng useCurrentFrame(), interpolate(), spring().
  3. Câu chuyện hoặc phong cách mơ hồ. "Làm giống Apple" ra video phẳng. Viết Bắt đầu → Biến đổi → Kết thúc cho từng cảnh, và đưa tham khảo.
  4. Không có storyboard hay ảnh tĩnh. Duyệt storyboard và soát ảnh tĩnh trước khi render cả video. npx remotion still render một khung rất nhanh.
  5. Tin vào lời tự review của Claude. Claude không cảm được nhịp. Bạn tự tua video và góp ý từng điểm.
  6. Ảnh và font chưa tải lúc render. Renderer chụp đúng trạng thái đang tải. Dùng <Img>, staticFile() và @remotion/google-fonts.
  7. Dùng nội dung không có bản quyền. Video tham khảo chỉ để phân tích, không dùng footage, nhạc hay logo của nó. Ghi nguồn và giấy phép nhạc vào licenses.md.
  8. Render sập với footage nặng. Tạo bản proxy 1080p cho file 4K, giảm concurrency, xem trước ở 720p.
  9. Lấy tài sản từ website sai cách. Đừng chụp màn hình trang: tải file ảnh gốc, chỉ dùng câu chữ có trên trang, và chỉ với thương hiệu bạn được phép dùng.
Xử Lý Lỗi

Khi render báo lỗi

Ngoài chín lỗi ở trên, có bốn thông báo lỗi mà mình thấy người mới hay gặp. Mỗi mục dưới đây tóm tắt trang troubleshooting chính thức của Remotion, kèm link để bạn đọc đầy đủ.

Video giật hoặc nhấp nháy khi render, dù preview mượt

Remotion mở nhiều tab để render song song, và các tab không chia sẻ trạng thái. Animation nào không tính từ useCurrentFrame() sẽ lệch nhau giữa các tab. Cách sửa gốc là mọi chuyển động phải là hàm của số khung hình; cách tạm là render với --concurrency=1, chậm hơn nhiều và vẫn không đảm bảo đúng thời điểm. Chi tiết ở trang Flickering.

"A delayRender() was called but not cleared after 28000ms"

Remotion đang chờ một tài nguyên chưa tải xong. Nguyên nhân thường gặp là quên gọi continueRender(), font hay ảnh tải từ mạng bị chặn, hoặc đặt concurrency quá cao khiến Chrome không tải hết video. Xem trang Debugging timeouts.

"Could not play video with src …"

Hay gặp nhất là file trong thư mục public/ nhưng gọi bằng đường dẫn thường như "/my-video.mp4". Phải dùng staticFile('my-video.mp4'), vì Remotion phục vụ file tĩnh dưới một tiền tố riêng. Codec Chrome không phát được (như HEVC trên Linux, .avi, .flv) cũng gây lỗi này. Xem trang Media playback error.

"Failed to launch the browser process"

Trên Linux, Chrome Headless Shell thiếu thư viện hệ thống, hoặc bạn chạy bản trình duyệt sai kiến trúc (x64 trên arm64). Cài các gói Linux Remotion liệt kê rồi thêm --log=verbose vào lệnh render để xem log của trình duyệt.

Phần 6 · Lựa chọn khác

Remotion hay HyperFrames

Nếu bạn không muốn đụng React, HyperFrames trong Skills hub của mình là một lựa chọn khác: video là file HTML với animation, agent viết xong mở trình duyệt là xem được, render ra MP4 trên máy. Trang của nó trong hub ghi cả điểm cần cân nhắc, như CLI gửi số liệu sử dụng mặc định và cách tắt. Remotion hợp hơn khi bạn đã quen React, cần phụ đề, cần render hàng loạt hoặc trên cloud.

Nhớ 4 điều

Điểm mấu chốt

Chia sẻ lên Threads
  1. Mỗi khung hình là một hàm của số thứ tự khung: render khung 45 hai lần ra hai file giống nhau từng byte.
  2. Cấm CSS transition và setTimeout trong Remotion; chỉ dùng useCurrentFrame(), interpolate(), spring().
  3. Viết mỗi cảnh theo ba nhịp Bắt đầu → Biến đổi → Kết thúc, đừng viết "cho thấy tính năng".
  4. Duyệt storyboard và ảnh tĩnh trước, rồi mới render cả video.

Đọc tiếp

Tất cả hướng dẫn →