Bỏ qua đến nội dung chính
AI Local
Ba ảnh sản phẩm thành clip bằng Wan 2.2 I2V: cà phê phin, bánh mì, linh vật trăn quấn số 0

Wan 2.2 I2V: tạo video AI từ ảnh sản phẩm trên RTX 3090

AIDev TeamTham vấn chuyên môn: Nguyễn Việt Chung

Đăng 13 phút đọc2 lượt xem

Mục lục · 26

Hướng dẫn dùng model I2V-A14B của Wan 2.2 để tạo video AI từ ảnh sản phẩm: chạy hàng loạt bằng một script Python gọi ComfyUI, viết prompt chuyển động, giữ đúng tỉ lệ ảnh, so prompt tiếng Việt với tiếng Anh, kèm clip hỏng thật và tiền máy mỗi clip đo trên RTX 3090 ngày 17/10/2026.

Wan 2.2 I2V (model I2V-A14B) nhận một ảnh cùng một câu prompt rồi trả về clip 5 giây chuyển động từ chính ảnh đó. Trên RTX 3090 24GB, dùng LoRA 4 bước của lightx2v, mỗi clip của mình mất 107 đến 124 giây. Lô 5 ảnh sản phẩm chạy hết 9,5 phút, tiền máy chưa tới 2.400đ ở giá 15.000đ/giờ.

Rút ra từ lô thử của mình:

  • Trên card 24GB chỉ chạy được bản fp8 đóng gói cho ComfyUI. Bản gốc của Wan-AI báo hết VRAM trên RTX 3090.

  • Đừng ép ảnh về khung vuông: template mẫu 640×640 cắt mất hai đầu ổ bánh mì của mình.

  • Prompt tiếng Việt cho kết quả gần như trùng prompt tiếng Anh.

  • Ảnh có chữ (bìa sách, logo) chỉ giữ chữ nét ở khoảng 2/3 đầu clip.

  • Mọi số trong bài đo ngày 17/10/2026 trên ComfyUI 0.41.0, card RTX 3090 của AIDev Cloud.

Wan 2.2 I2V là gì, cần máy thế nào?

I2V là viết tắt của image to video: bạn đưa ảnh làm khung đầu, model lo phần chuyển động. Wan 2.2 có 5 model, bài tổng quan Wan 2.2: tạo video AI mã nguồn mở nói đủ cả năm. Bài này chỉ dùng I2V-A14B, model gồm hai expert 14B: một expert chạy các bước đầu (high noise), expert kia chạy các bước sau (low noise).

Trang Wan-AI/Wan2.2-I2V-A14B để bản gốc nặng khoảng 126GB, còn README của repo Wan2.2 ghi chạy một GPU cần "at least 80GB VRAM". Mình vẫn thử bản gốc trên card 24GB cho chắc, và nó hết VRAM sau 347 giây (lỗi ở cuối bài). Thứ chạy được là bản fp8 trong Comfy-Org/Wan_2.2_ComfyUI_Repackaged: mỗi expert 14,29GB, cộng hai file LoRA 4 bước của lightx2v, mỗi file 1,23GB.

Cách cài nhanh nhất là script một lệnh trong bài cài Wan 2.2 trên ComfyUI. Trên máy trắng, script đi từ cài ComfyUI, tải 47GB model đến xong clip đầu tiên trong 14,2 phút. Script cũng chép sẵn xưởng video tao_video.py mà bài này dùng. Gói RTX 3090 Standard ghi 55GB RAM, máy báo 53GB; sau khi chạy 14B, máy mới dùng 38GB.

Cùng card RTX 3090, thời gian một clip thay đổi rất nhiều theo cách chạy:

Cách chạy

Kích thước

Một clip

VRAM đỉnh

Gói máy

14B + LoRA 4 bước (xưởng, chế độ nhanh)

~480p theo tỉ lệ ảnh

110 đến 124 giây

chưa đo

Standard

14B + LoRA 4 bước, theo tỉ lệ ảnh

736×544

111 giây

24.116MiB

Pro

14B, 20 bước (xưởng, chế độ đẹp)

544×720

941 giây (15,7 phút)

chưa đo

Standard

14B + LoRA, template mẫu

640×640

110 giây

23.924MiB

Pro

14B, 20 bước, template mẫu

640×640

992 giây

21.270MiB

Pro

14B + LoRA, độ phân giải cao

1280×960

655 giây

24.116MiB

Pro

5B (TI2V), 20 bước, 121 khung

1280×960

538 giây

18.738MiB

Pro

Mình chọn chế độ nhanh làm mặc định. Bản 1280×960 chỉ nhiều điểm ảnh gấp khoảng 3,1 lần nhưng chậm gấp khoảng 5,9 lần. Bản 5B mình chưa đặt cạnh bản 14B để so chất lượng nên chưa dám khuyên. Bảng đầy đủ hơn về VRAM nằm ở bài Wan 2.2 cần bao nhiêu VRAM.

Biến ảnh sản phẩm thành clip quảng cáo bằng tao_video.py

Template "Wan 2.2 14B Image to Video" trong ComfyUI làm được việc này, nhưng mỗi lần chỉ một ảnh, lại phải bấm tay. Có chục sản phẩm thì mình muốn bỏ ảnh vào thư mục, ghi prompt vào một file, chạy một lệnh rồi đi pha cà phê. tao_video.py làm đúng vậy: gọi API của ComfyUI đang chạy ở port 8188, dựng workflow I2V 14B theo template chính thức, tải từng clip về.

Bước 1: bỏ ảnh vào thư mục vao/ và viết kich-ban.csv

Mỗi dòng của kich-ban.csv gồm tên ảnh và prompt cho ảnh đó. Đây là hai dòng mình dùng thật:

csv
anh,prompt
banh-mi.jpg,"A freshly made Vietnamese banh mi in a paper-lined basket. Steam rises gently from the warm bread, cilantro leaves tremble slightly. The camera slowly orbits around the basket. Warm restaurant lighting, appetizing food commercial style."
linh-vat-python.jpg,"A cute green 3D cartoon snake wrapped around a glossy yellow number zero blinks, smiles and moves its head playfully. Small blue glass cubes with code symbols float and rotate around it. Clean white studio background, Pixar style, smooth animation."

Bước 2: chạy script bằng Python của ComfyUI

Script cần Pillow, mà venv của ComfyUI có sẵn, nên chạy luôn bằng Python trong venv đó:

bash
cd ~/xuong-video
~/ComfyUI/venv/bin/python tao_video.py                    # đọc vao/kich-ban.csv, chế độ nhanh (4 bước)
~/ComfyUI/venv/bin/python tao_video.py --che-do dep       # 20 bước, không LoRA
~/ComfyUI/venv/bin/python tao_video.py --anh vao/banh-mi.jpg --prompt "camera slowly orbits the product" --seed 7

Output thật khi mình chạy một ảnh cà phê ở chế độ nhanh, rồi ảnh linh vật ở chế độ đẹp:

text
1 clip, chế độ nhanh
  ra-tieng-viet/ca-phe-phin-nhanh-7_00001_.mp4  544x736  114 giây  ~540đ tiền máy
Xong 1/1 clip trong 1.9 phút, ~539đ tiền máy
1 clip, chế độ dep
  ra-dep/linh-vat-python-dep-42_00001_.mp4  544x720  941 giây  ~4,443đ tiền máy
Xong 1/1 clip trong 15.7 phút, ~4,443đ tiền máy

Hôm đó script còn tính tiền theo giá gói Pro 17.000đ/giờ. Bản hiện tại đọc biến GIA_GIO, mặc định 15.000đ (gói Standard), nên cùng 114 giây sẽ ra khoảng 475đ. Mỗi clip còn được ghi thêm một dòng vào ra/nhat-ky.jsonl (ảnh, kích thước, số giây) để cộng sổ sau.

Vài thứ script tự lo: mỗi clip 81 khung ở 16 fps, tức 5 giây; prompt âm dùng nguyên bản mặc định tiếng Trung của Wan 2.2; kích thước tính theo tỉ lệ ảnh, diện tích quanh 832×480 và làm tròn bội 16.

Vì sao không ép ảnh về khung vuông?

Template mẫu đặt sẵn width 640, height 640. Ảnh bánh mì của mình là ảnh ngang, nên vào khung vuông là mất hai đầu ổ bánh:

Xưởng video tính theo tỉ lệ ảnh gốc 1280×963 ra 736×544. Thời gian gần như không đổi (111 giây trên máy Pro, 114 giây trong lô xưởng trên máy Standard, so với 110 giây ở khung vuông) mà ổ bánh mì còn nguyên, rau, ớt, giấy gói đều giữ đúng hình.

Ảnh chụp điện thoại bị xoay ngang

Ảnh cà phê phin được lưu ngang 1280×960 kèm cờ xoay EXIF, mở lên mới thấy là ảnh dọc. Bản đầu của script đọc kích thước thô nên sẽ dựng khung ngang, trong khi ComfyUI lại xoay ảnh theo EXIF khi nạp. Mình sửa bằng ImageOps.exif_transpose của Pillow trước khi tính kích thước, clip ra đúng 544×736 dọc. Ảnh chụp từ điện thoại hay dính chuyện này, nên nếu tự viết script thì nhớ xoay theo EXIF trước.

Kết quả thật: clip nào đạt, clip nào hỏng?

Lô đầu mình chạy 5 ảnh, chế độ nhanh, seed 42, hết 569 giây. Bảng dưới là 4 clip trong lô đó, tiền máy tính lại theo giá Standard 15.000đ/giờ:

Ảnh

Kích thước ra

Thời gian

Tiền máy

Nhận xét

Cà phê phin (ảnh điện thoại)

544×736

124 giây

~517đ

nhỏ giọt rất đạt, cuối clip phin bị nhấc lên

Bánh mì

736×544

114 giây

~475đ

giữ hình tốt

Linh vật Python

544×720

110 giây

~458đ

quay đầu mượt, ký hiệu </> bị méo

Bìa sách

544×720

110 giây

~458đ

chữ nét 2/3 đầu, cuối clip mất chữ

Ảnh gốc cà phê phin của tác giả Phương Huy, ảnh bánh mì của tác giả Andy Li, cả hai lấy từ Wikimedia Commons với giấy phép CC0. Linh vật Python và bìa sách là tranh của AIDev.

Cà phê phin: đẹp nửa đầu, sai vật lý nửa sau

Nửa đầu clip là thứ mình muốn: phin đứng trên tách, cà phê nhỏ giọt. Sau đó model tự nhấc phin lên khỏi tách, và cà phê chảy thành dòng màu cam. Clip kiểu này cắt lấy nửa đầu vẫn dùng được, để nguyên thì người xem nhận ra ngay.

Linh vật Python: chuyển động mượt, ký hiệu nhỏ bị méo

Con trăn quay đầu mượt hơn mình nghĩ. Chỗ hỏng nằm ở chi tiết nhỏ: ký hiệu </> trên khối lập phương bị méo. Ở độ phân giải ~480p, chi tiết nhỏ như vậy rất dễ mất.

Bìa sách: chữ giữ được 2/3 clip rồi mất

Prompt đã dặn "The text stays perfectly still and sharp" và chỉ "Subtle camera push in", vậy mà cuối clip máy quay vẫn zoom quá tay vào cái cây, tiêu đề biến mất. Mình chưa chạy lại với prompt khác, nên đây mới là kinh nghiệm chứ chưa có số đo: ảnh có chữ hay logo thì cắt lấy đoạn đầu clip, hoặc ghi rõ trong prompt là máy quay đứng yên, đừng xin thêm cú push in nào.

Viết prompt cho Wan 2.2 I2V thế nào?

Ảnh đã chứa sẵn sản phẩm, màu, bố cục. Prompt chỉ cần nói ba thứ: vật chính là gì (một câu ngắn để model biết đâu là chủ thể), cái gì chuyển động, và máy quay đi thế nào. Màu sắc, bố cục đã nằm trong ảnh nên mình không tả lại, câu chữ để dành cho chuyển động.

Khung prompt mình dùng cho các ảnh trong lô:

  • Chủ thể: "A freshly made Vietnamese banh mi in a paper-lined basket."

  • Chuyển động nhỏ, có thật: "Steam rises gently…, cilantro leaves tremble slightly."

  • Máy quay: "The camera slowly orbits around the basket." (hoặc "slowly pushes in", "slowly tilts up")

  • Không khí: "Warm restaurant lighting, appetizing food commercial style."

Trong lô của mình, chỗ hỏng rơi đúng vào những cử động lớn: phin bị nhấc lên, máy quay zoom quá tay. Mấy cử động nhỏ như cà phê nhỏ giọt, con trăn quay đầu thì ổn. Nên mình xin chuyển động nhỏ trước, cần thêm thì tăng dần.

Prompt tiếng Việt có được không?

Được. Mình chạy cùng ảnh cà phê, cùng seed 7, một lần prompt tiếng Việt, một lần tiếng Anh cùng nội dung:

text
Cận cảnh phin cà phê Việt Nam đặt trên tách trắng. Cà phê đen nhỏ từng giọt xuống tách, hơi nóng bốc lên nhẹ. Nắng sớm lọt qua kẽ lá, máy quay tiến chậm vào. Chân thực, điện ảnh.

Close-up of a Vietnamese phin coffee filter on a white cup. Dark coffee slowly drips from the filter into the cup, thin steam rises. Soft morning sunlight flickers through leaves, the camera slowly pushes in. Realistic, cinematic.
Bốn khung clip cà phê phin tạo bằng prompt tiếng Việt, seed 7

Cả hai đều chạy 114 giây và ra gần như trùng từng khung, nghĩa là text encoder umt5 hiểu tiếng Việt. Bản tiếng Anh ngay dưới đây:

Bốn khung clip cà phê phin tạo bằng prompt tiếng Anh cùng nội dung, seed 7, gần như giống hệt bản tiếng Việt

Cả hai bản vẫn có cảnh phin bị nhấc lên ở nửa sau, nên lỗi đó nằm ở model. Đổi ngôn ngữ prompt không sửa được. Viết bằng tiếng Việt cho nhanh rồi đổi seed khi clip hỏng là cách mình làm.

Mỗi clip tốn bao nhiêu tiền máy? Làm dịch vụ video sản phẩm được không?

Tiền máy một clip bằng số giây chạy nhân giá giờ. Ở gói RTX 3090 Standard 15.000đ/giờ:

  • Chế độ nhanh, 110 đến 124 giây: khoảng 458 đến 517đ một clip.

  • Chế độ đẹp, 941 giây: khoảng 3.920đ một clip.

  • Lần cài đầu từ máy trắng: 14,2 phút; chạy lại script (bỏ clip thử bằng CHAY_THU=0) chỉ 28 giây vì model đã có.

Từ đây có một ý tưởng kinh doanh khá thẳng: shop online nào cũng có sẵn ảnh sản phẩm, còn clip ngắn thì cần cho trang bán và mạng xã hội. Bạn nhận ảnh, viết prompt, chạy hàng loạt, chọn clip đạt rồi giao. Có điều tiền máy chỉ là phần nhỏ. Phần lớn là công xem từng clip, chạy lại seed khác khi phin bị nhấc hay chữ bị mất, cắt bớt đoạn hỏng, và mình chưa có số đo cho phần công đó. Ảnh khách gửi cũng phải là ảnh họ có quyền dùng.

Nếu chưa có card 24GB, toàn bộ số trong bài chạy trên máy RTX 3090 thuê theo giờ của AIDev Cloud. Chạy script cài, đổ ảnh vào vao/, xong lô thì trả máy.

Lỗi mình đã gặp khi tạo video từ ảnh

1. "Media input missing" khi mở template

Giao diện ComfyUI mở template Wan 2.2 14B Image to Video báo đỏ Media input missing, Load Image is missing a required media file
text
Media input missing
Load Image is missing a required media file.

Mở template Wan 2.2 14B Image to Video từ hộp thoại Templates là gặp ngay, vì ảnh mẫu của template không có trong ComfyUI/input. Bấm vào node Load Image, tải ảnh của bạn lên là hết. Dùng tao_video.py thì không gặp, vì script tự tải ảnh lên qua API.

2. Bản gốc I2V-A14B hết VRAM trên card 24GB

text
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 50.00 MiB. GPU 0 has a total capacity of 23.56 GiB of which 6.31 MiB is free. Including non-PyTorch memory, this process has 23.54 GiB memory in use. Of the allocated memory 23.24 GiB is allocated by PyTorch, …

Mình chạy generate.py của repo gốc ở 832×480, đã bật đủ --offload_model True --convert_model_dtype --t5_cpu và PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True. Sau 347 giây nó vẫn hết VRAM khi đưa expert 14B lên GPU, RAM máy lúc đó lên tới 67GB. Đúng như README ghi cần 80GB VRAM. Không có cách sửa trên card 24GB, phải chuyển sang ComfyUI với bản fp8.

3. Chạy lại cùng seed, clip ra sau 1,2 giây

Lần thứ hai chạy y hệt workflow, ComfyUI trả về ngay sau 1,2 giây. Nó không tạo clip mới mà trả kết quả cache. Muốn có clip khác (hoặc muốn đo thời gian thật) thì đổi seed:

bash
~/ComfyUI/venv/bin/python tao_video.py --seed 43

Cũng đừng mong lần sau nhanh hơn: đổi seed với model đã nạp, mình đo 114 giây rồi 107 giây, so với 111 giây lần đầu, vì ComfyUI vẫn phải đổi qua lại hai expert 14B mỗi lượt.

Khi nào không nên tạo video AI từ ảnh bằng Wan?

  • Cần chữ hay logo sắc nét suốt clip. Như clip bìa sách ở trên, chữ giữ được một đoạn rồi mất.

  • Cần người thật nói, khớp môi. I2V không làm tiếng; Wan 2.2 có model S2V-14B riêng cho việc này, README ghi cần 80GB VRAM, mình chưa chạy.

  • Cần cảnh vật lý chính xác như rót, chảy, nhấc vật. Clip cà phê cho thấy model hay tự bịa cử động.

  • Card dưới 24GB. Mình thử giả lập card 16GB bằng --reserve-vram 8 nhưng ComfyUI vẫn dùng đủ 24GB, nên chưa có số đo cho card 12GB hay 16GB.

  • Chỉ cần vài clip mỗi tháng. Khi đó công cài đặt và tải 47GB model khó mà đáng.

Câu hỏi thường gặp khi tạo video từ ảnh với Wan

Tạo một clip từ ảnh mất bao lâu?

Với Wan 2.2 I2V trên RTX 3090, dùng LoRA 4 bước ở khoảng 480p: 107 đến 124 giây một clip. Chạy đủ 20 bước không LoRA mất 15,7 phút; lên 1280×960 với LoRA mất 655 giây.

Clip ra dài bao nhiêu, độ phân giải bao nhiêu?

81 khung ở 16 fps, tức 5 giây. Xưởng video giữ tỉ lệ ảnh, diện tích quanh 832×480, ví dụ 736×544 cho ảnh ngang và 544×736 cho ảnh dọc.

Có cần GPU 24GB không?

Bản fp8 trên ComfyUI chạy LoRA 4 bước với VRAM đỉnh 23.924 đến 24.116MiB trên card 24GB. Mình chưa đo trên card nhỏ hơn. Bản gốc của Wan-AI thì cần 80GB theo README.

Viết prompt bằng tiếng Việt được không?

Được. Cùng ảnh, cùng seed, prompt tiếng Việt và tiếng Anh ra clip gần như trùng nhau, cùng mất 114 giây.

Đọc tiếp

Chưa rõ Wan 2.2 gồm những model nào thì đọc bài tổng quan Wan 2.2: tạo video AI mã nguồn mở. Chưa cài thì làm theo hướng dẫn cài Wan 2.2 trên ComfyUI bằng một script. Muốn tính tiền khi tự chạy thay vì mua gói credit, xem bài tạo video AI không giới hạn bằng GPU thuê. Các bài khác về chạy model AI trên GPU riêng có ở bài tổng quan AI Local: chạy LLM và AI tạo ảnh trên máy bạn. Khi cần GPU 24GB để chạy lô ảnh đầu tiên, AIDev Cloud cho thuê RTX 3090 theo giờ.

Số đo, output và ảnh kết quả trong bài chạy ngày 17/10/2026 trên RTX 3090 24GB của AIDev Cloud (gói Standard và Pro), ComfyUI 0.41.0, torch 2.14.1+cu130; bản gốc Wan2.2 commit 1ea34ff, torch 2.8.0+cu128.

Tham vấn chuyên môn

Nguyễn Việt Chung

Nhà sáng lập AIDev và VietPlatform · Thạc sĩ AI MSE

  • Tốt nghiệp thủ khoa xuất sắc Thạc sĩ AI MSE.
  • Đồng sáng lập, CTO E-University, SVOnline: số hóa 10+ đại học, 40.000+ sinh viên.
  • Xây hệ thống AI cho doanh nghiệp tại VietPlatform.
Biên soạn: AIDev Team · Rà soát · Quy trình biên tập