Cách làm phim ngắn bằng Claude Opus 5.5 và Seedance 2.5
Để Claude Opus 5.5 làm đạo diễn: nó viết phân cảnh và prompt, GPT Image 2.5 vẽ nhân vật, còn Seedance 2.5 tạo từng cảnh quay có âm thanh.
Đọc dạng MarkdownĐể làm phim ngắn bằng Claude Opus 5.5 và Seedance 2.5, hãy để Opus làm đạo diễn, còn việc vẽ và quay giao cho hai mô hình còn lại. Bạn đưa cho Opus một ý tưởng câu chuyện; nó viết một đoạn mô tả nhân vật cố định, một prompt cho bảng nhân vật và một prompt video cho mỗi cảnh quay. GPT Image 2.5 biến các prompt đó thành bảng nhân vật và các khung hình đầu. Seedance 2.5 tạo từng cảnh quay, có lời thoại và âm thanh, dùng những ảnh đó làm tham chiếu. Sau đó bạn ghép các cảnh quay thành một tệp. Cả ba mô hình đều dùng được trên SeedRouter với cùng một khóa API. Mọi yêu cầu bên dưới đều theo tài liệu API của SeedRouter, kiểm tra ngày 30 tháng 9 năm 2026.
Quy trình Claude Opus 5.5 và Seedance 2.5 hoạt động thế nào?
Ý tưởng này đến từ một quy trình mà một nhà sáng tạo chia sẻ trên r/Seedance_AI vào tháng 9 năm 2026 (bài đăng gốc): "Tôi không tự tay viết một prompt nào. Tôi đưa cho Opus 5.5 một ý tưởng cốt lõi cùng vài ảnh chụp màn hình tham khảo cho phong cách tôi muốn." Opus viết prompt cho bảng nhân vật, khung hình đầu, chuyển động máy quay, nhịp lời thoại và âm thanh; GPT Image 2.5 vẽ bảng nhân vật và khung hình đầu; Seedance 2.5 tạo các cảnh quay.
Mỗi mô hình làm một việc:
| Bước | Mô hình | Đầu vào | Đầu ra |
|---|---|---|---|
| 1. Lên kế hoạch | Claude Opus 5.5 | Ý tưởng câu chuyện, ảnh phong cách (tùy chọn) | Mô tả nhân vật, prompt bảng nhân vật, mỗi cảnh một prompt khung hình đầu và một prompt video |
| 2. Thiết kế | GPT Image 2.5 | Prompt bảng nhân vật, rồi prompt khung hình đầu với bảng nhân vật làm tham chiếu | Bảng nhân vật và khung hình đầu, dưới dạng URL ảnh |
| 3. Quay | Seedance 2.5 | Prompt video cùng bảng nhân vật và khung hình đầu làm ảnh tham chiếu | Mỗi cảnh quay một video có âm thanh |
| 4. Dựng | ffmpeg hoặc bất kỳ phần mềm dựng phim nào | Các tệp cảnh quay | Bộ phim hoàn chỉnh |
Các bước nối với nhau bằng URL. GPT Image 2.5 trả về ảnh được lưu trên kho lưu trữ của SeedRouter, còn Seedance 2.5 nhận ảnh tham chiếu dưới dạng URL công khai, nên đầu ra của bước 2 đi thẳng vào bước 3 mà không cần tải xuống hay tải lên lại.
Bạn cần chuẩn bị gì trước khi bắt đầu?
- Khóa API SeedRouter trong biến môi trường:
export SEEDROUTER_API_KEY="your-key"- Python 3 cùng
requestsvà Anthropic SDK:pip install requests anthropic. - ffmpeg để ghép các cảnh quay ở cuối.
- Số dư. Mỗi lần gọi là một yêu cầu tính phí. Tác vụ thất bại không bị tính phí, và tài khoản mới có sẵn một khoản số dư miễn phí nhỏ.
Tất cả đoạn mã Python bên dưới dùng chung hai dòng này:
import os
import requests
HEADERS = {"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"}Bước 1: Làm sao để Claude Opus 5.5 lên kế hoạch cảnh quay?
Đưa cho Opus một system prompt giải thích cách Seedance 2.5 đọc prompt, và yêu cầu nó trả về kế hoạch dạng JSON để script của bạn dùng được. Các quy tắc trong system prompt này lấy từ hướng dẫn viết prompt Seedance chính thức của ByteDance, được tóm tắt trong hướng dẫn viết prompt Seedance 2.5: chủ thể và hành động đặt trước, mỗi cảnh quay một chuyển động máy quay, chia cảnh dài theo mốc thời gian, gọi tệp tham chiếu theo số thứ tự.
import json
import anthropic
client = anthropic.Anthropic(
api_key=os.environ["SEEDROUTER_API_KEY"],
base_url="https://api.seedrouter.ai",
)
DIRECTOR = """You are the director of a short film made with AI models.
Return only JSON, no other text, in this shape:
{"character": "...", "sheet_prompt": "...",
"shots": [{"duration": 5, "frame_prompt": "...", "video_prompt": "..."}]}
character: one fixed paragraph describing the main character's face, hair,
build and clothes. Repeat it word for word inside every other prompt.
sheet_prompt: an image prompt for one character reference sheet: a front,
three-quarter, profile and back view, plus four facial expressions, on a plain
light background, with no text other than small panel labels.
shots: 3 to 5 shots, each 4 to 15 seconds.
frame_prompt: an image prompt for the first frame of the shot.
video_prompt: a video prompt for Seedance 2.5. Write it in this order: subject
and action, scene, visual style, camera, audio. Image 1 is the character sheet
and Image 2 is the start frame of the shot; refer to them by those names.
Use one camera move per shot. Say who is holding the camera and how they move.
For shots longer than 5 seconds, split the action into time ranges such as
0-3s. Put dialogue in quotes as: Character's line (emotion): content.
Describe the ambient sound. Do not ask for subtitles or on-screen text.
The character must not look like a real, identifiable person. Use a stylized
look, such as a 3D animated or illustrated character."""
message = client.messages.create(
model="claude-opus-5-5",
max_tokens=16000,
system=DIRECTOR,
messages=[{
"role": "user",
"content": "A lighthouse keeper finds a lost robot on the rocks during a storm and teaches it to wave at passing ships.",
}],
)
text = "".join(block.text for block in message.content if block.type == "text")
plan = json.loads(text)Một vài chi tiết quan trọng:
max_tokensbao gồm cả phần suy luận. Opus 5.5 luôn dùng suy luận thích ứng, và tài liệu API Opus 5.5 tính token suy luận vàomax_tokens. Hãy chừa đủ khoảng trống, nếu không JSON có thể bị cắt giữa chừng.- Đừng gửi
temperature,top_phaytop_k, và đừng điền sẵn lượt assistant. Opus 5.5 trả về lỗi 400 khi giá trị lấy mẫu khác mặc định hoặc khi câu trả lời được điền sẵn. Muốn điều chỉnh mức suy luận, hãy dùngoutput_config.effort. - "Ai đang cầm máy quay" là mẹo từ bài đăng gốc. Tác giả kể rằng khi bảo Opus "bạn tôi đang quay từ ghế sau", nó tự viết thêm độ rung tay nhẹ, khung hình phản ứng chậm nửa nhịp và lấy nét tự động bị chạy, và cho rằng "chính chi tiết bối cảnh duy nhất đó xóa bỏ 'cảm giác AI'".
- Ảnh tham khảo phong cách là tùy chọn. Opus đọc được ảnh, nên bạn có thể thêm ảnh chụp màn hình phong cách mong muốn dưới dạng khối
imagevới nguồn URL trong lượt user.
Nếu json.loads lỗi, hãy in text ra rồi nhờ Opus viết lại. Đọc kế hoạch trước khi tạo bất cứ thứ gì cũng là thời điểm rẻ nhất để sửa câu chuyện: sửa ở đây tốn một yêu cầu văn bản, còn sửa sau khi đã render thì tốn tiền video.
Bước 2: Làm sao tạo bảng nhân vật và khung hình đầu bằng GPT Image 2.5?
Trước tiên, gửi plan["sheet_prompt"] cho GPT Image 2.5. Sau đó gửi frame_prompt của từng cảnh quay kèm bảng nhân vật làm ảnh tham chiếu, để mọi khung hình đầu đều có cùng một nhân vật. Tác vụ ảnh được gửi tới /v1/images/generations và đọc kết quả từ /v1/tasks/{id}:
import time
def image(prompt, size, refs=()):
body = {"model": "gpt-image-2.5-flare", "prompt": prompt, "size": size, "quality": "high"}
if refs:
body["images"] = [{"image_url": url} for url in refs]
task_id = requests.post(
"https://api.seedrouter.ai/v1/images/generations",
headers=HEADERS, json=body, timeout=60,
).json()["id"]
while True:
task = requests.get(
f"https://api.seedrouter.ai/v1/tasks/{task_id}", headers=HEADERS, timeout=30,
).json()
if task["status"] == "completed":
return task["output"]["data"][0]["url"]
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(3)
sheet = image(plan["sheet_prompt"], "1536x1024")
frames = [image(shot["frame_prompt"], "1792x1008", [sheet]) for shot in plan["shots"]]Lý do chọn các thiết lập này:
1792x1008là 16:9. GPT Image 2.5 nhậnsizetheo dạngWIDTHxHEIGHT, hai cạnh đều là bội số của 16, nên khung hình 16:9 phải ghi bằng pixel;16:9không phải giá trịsizehợp lệ. Hãy khớp nó vớiratiobạn sẽ yêu cầu ở Seedance.- Flare là đủ cho hầu hết bảng nhân vật. Sunburst kiểm soát chặt hơn qua nhiều lần chỉnh sửa nhưng chậm hơn; khi nào nên dùng nó được giải thích trong GPT Image 2.5 Flare vs Sunburst.
- Bản nháp dùng
qualitythấp hơn. Khi còn đang sửa nhân vật,lowhoặcmediumcho ra ảnh nhanh hơn. Chuyển sanghighcho những ảnh bạn sẽ dùng để quay.
Để ngắn gọn, các hàm trên thăm dò tác vụ mà không có thời hạn. Trong mã của bạn, hãy thêm giới hạn thời gian và lưu ID tác vụ, để lần chạy bị gián đoạn có thể kiểm tra lại đúng tác vụ đó thay vì trả tiền cho một tác vụ mới.
Bước 3: Làm sao tạo từng cảnh quay bằng Seedance 2.5?
Gửi từng video_prompt cho Seedance 2.5 kèm hai ảnh tham chiếu: bảng nhân vật là Image 1 và khung hình đầu của cảnh quay là Image 2, theo đúng thứ tự đó, vì Seedance đánh số tệp tham chiếu theo thứ tự bạn đính kèm. Tác vụ video dùng endpoint riêng, /v1/contents/generations/tasks, và kết thúc với status: "succeeded":
def shot(prompt, refs, duration):
content = [{"type": "text", "text": prompt}]
for url in refs:
content.append({"type": "image_url", "image_url": {"url": url}, "role": "reference_image"})
task_id = requests.post(
"https://api.seedrouter.ai/v1/contents/generations/tasks",
headers=HEADERS,
json={
"model": "dreamina-seedance-2-5",
"content": content,
"resolution": "480p",
"ratio": "16:9",
"duration": duration,
"generate_audio": True,
},
timeout=60,
).json()["id"]
while True:
task = requests.get(
f"https://api.seedrouter.ai/v1/contents/generations/tasks/{task_id}",
headers=HEADERS, timeout=30,
).json()
if task["status"] == "succeeded":
return task["content"]["video_url"]
if task["status"] in ("failed", "expired"):
raise RuntimeError(task["error"]["message"])
time.sleep(15)
videos = [shot(s["video_prompt"], [sheet, frame], s["duration"]) for s, frame in zip(plan["shots"], frames)]Các lựa chọn trong yêu cầu:
- Dùng ảnh tham chiếu, không dùng khung hình đầu cố định. Seedance 2.5 cũng có thể khóa cảnh quay vào một khung hình đầu chính xác (
role: "first_frame"), nhưng tài liệu API Seedance 2.5 ghi rằng các chế độ khung hình đầu "không thể kết hợp với mục tham chiếu", nên bạn sẽ mất bảng nhân vật. Khi cả hai ảnh làreference_image, prompt sẽ cho Seedance biết Image 2 là khung hình đầu. Phần mở đầu bám sát ảnh đó, nhưng không trùng khớp từng pixel. - Bản nháp dùng
480p. Tạo tất cả cảnh quay ở 480p trước, sửa những prompt chưa ổn, rồi render các cảnh đạt yêu cầu ở720phoặc1080pvới cùng prompt. generate_audio: truetạo lời thoại, âm thanh môi trường và hiệu ứng từ prompt, được tạo cùng lúc với hình ảnh.- Cố định
ratio. Khi mọi cảnh quay có cùng tỷ lệ khung hình và độ phân giải, ffmpeg có thể ghép chúng mà không cần mã hóa lại.
Một cảnh quay dài từ 4 đến 30 giây, và một tác vụ có thể chứa nhiều lần cắt cảnh nếu prompt đặt mốc thời gian cho từng lần cắt. Ví dụ, cảnh thứ hai của tác giả gói sáu cảnh quay, cắt theo nhịp trống, trong 10 giây.
Làm sao giữ cùng một nhân vật trong mọi cảnh quay?
Sự nhất quán đến từ việc lặp lại, cả trong prompt lẫn trong tham chiếu:
- Lặp lại cùng một đoạn mô tả. Đoạn
charactertừ bước 1 được đưa nguyên văn vào mọi prompt ảnh và video. Mô tả cùng một người theo hai cách khác nhau là một trong những lý do khiến mô hình làm nhân vật bị biến dạng hoặc nhân đôi. - Gửi cùng một bảng nhân vật cho mọi cảnh quay. Bảng nhân vật luôn là Image 1. Seedance 2.5 chấp nhận bảng nhiều góc nhìn; Seedance 2.0 cũ hơn có thể đọc bảng nhiều góc thành nhiều người, và hướng dẫn viết prompt khuyên dùng cho nó một ảnh cận mặt và một ảnh toàn thân cho mỗi nhân vật.
- Luôn gọi nhân vật theo cùng một cách, ví dụ "người gác hải đăng trong Image 1", và đừng dựa vào cái tên được viết trong ảnh.
- Giữ một giọng nói xuyên suốt các cảnh. Seedance 2.5 nhận tối đa 10 âm thanh tham chiếu (WAV hoặc MP3, từ 2 đến 30 giây). Đính kèm cùng một đoạn giọng nói cho mỗi cảnh quay và gắn nó trong văn bản, như ví dụ của ByteDance: "Image 1 là nhân vật chính John và dùng âm sắc giọng nói từ Audio 1."
Với hai cảnh quay cần nối liền mà không bị giật hình, còn một cách thứ hai: đặt "return_last_frame": true ở cảnh quay đầu, rồi gửi content.last_frame_url được trả về làm first_frame của cảnh tiếp theo. Cách này khóa chặt điểm nối, nhưng cảnh tiếp theo không thể dùng bảng nhân vật, nên hãy dùng nó cho hành động liên tục trong cùng một cảnh, chứ không phải cho mọi lần cắt.
Có dùng được ảnh người thật làm nhân vật không?
Không. Seedance 2.5 không nhận ảnh hoặc video tham chiếu chứa khuôn mặt người thật, và tác vụ có chúng sẽ thất bại mà không bị tính phí. Bài lỗi người thật của Seedance giải thích quy định của ByteDance và các lựa chọn ByteDance cung cấp trên nền tảng của chính họ.
Điều này cũng ảnh hưởng đến nhân vật AI chân thực. Bài đăng gốc quay một người phụ nữ chân thực như ảnh chụp, nhưng tài liệu của ByteDance không nói bộ kiểm tra khuôn mặt xử lý thế nào với khuôn mặt chân thực do mô hình khác vẽ. Một nhân vật cách điệu, như phong cách hoạt hình 3D hoặc minh họa mà system prompt ở trên yêu cầu, giúp quy trình tránh được câu hỏi đó. Nếu bạn muốn phong cách chân thực, hãy thử một cảnh ngắn ở 480p trước khi xây cả bộ phim xoay quanh nó.
Làm sao ghép các cảnh quay thành một bộ phim?
Tải các video theo thứ tự, liệt kê chúng trong một tệp văn bản rồi ghép bằng ffmpeg:
names = []
for index, url in enumerate(videos):
name = f"shot-{index + 1}.mp4"
with open(name, "wb") as file:
file.write(requests.get(url, timeout=300).content)
names.append(name)
with open("shots.txt", "w") as file:
file.writelines(f"file '{name}'\n" for name in names)ffmpeg -f concat -safe 0 -i shots.txt -c copy film.mp4-c copy ghép các tệp mà không mã hóa lại; cách này dùng được vì mọi cảnh quay có cùng độ phân giải, tỷ lệ khung hình và định dạng. Nếu bạn trộn nhiều thiết lập, hãy bỏ -c copy để ffmpeg mã hóa lại. URL video được lưu trên kho lưu trữ của SeedRouter, nên hãy tải xuống những tệp bạn muốn giữ.
Làm phim ngắn bằng Seedance 2.5 tốn bao nhiêu?
Mỗi mô hình tính phí theo đơn vị riêng, và giá hiện tại có trên trang của từng mô hình:
- Claude Opus 5.5 tính phí theo token đầu vào và đầu ra, bao gồm cả suy luận. Lên kế hoạch cho một bộ phim chỉ cần một hoặc vài yêu cầu. Giá.
- GPT Image 2.5 Flare và Sunburst tính giá cố định cho mỗi ảnh được trả về. Một bảng nhân vật cộng một khung hình đầu cho mỗi cảnh quay là từ bốn đến sáu ảnh cho một phim ngắn. Giá.
- Seedance 2.5 tính phí theo token video: số giây đầu ra × chiều rộng × chiều cao × 24 ÷ 1024. Một giây video 16:9 là 9.607,5 token ở 480p, 21.600 ở 720p và 48.600 ở 1080p, và 1080p có mức giá riêng. Giá.
Phần lớn chi phí nằm ở video. Bản nháp 480p dùng chưa đến một nửa số token của 720p, nên sửa prompt ở 480p và chỉ render bản cuối ở độ phân giải cao hơn là cách tiết kiệm nhiều nhất. Bài giá API Seedance có thêm ví dụ tính toán.
Câu hỏi thường gặp
Claude Opus 5.5 có tự tạo video được không?
Không. Opus 5.5 là mô hình văn bản: nó đọc được ảnh nhưng không tạo ảnh hay video. Trong quy trình này nó viết prompt, còn hình ảnh và cảnh quay do GPT Image 2.5 và Seedance 2.5 tạo ra.
Có thể dùng Claude Fable 5.1 thay cho Opus 5.5 không?
Có. Fable 5.1 nhận cùng yêu cầu Messages, nên chỉ cần đổi model thành claude-fable-5-1. Bài Claude Fable 5.1 vs Fable 5 vs Opus 5.5 so sánh ba mô hình.
Phim ngắn làm bằng Seedance 2.5 dài tối đa bao lâu?
Một tác vụ Seedance 2.5 tạo từ 4 đến 30 giây, hoặc để mô hình tự chọn độ dài với duration: -1. Phim dài hơn được ghép từ nhiều cảnh quay, nên tổng độ dài không có giới hạn cố định.
Tại sao nhân vật thay đổi giữa các cảnh quay?
Thường là do các prompt mô tả nhân vật khác nhau, một số cảnh quay thiếu bảng nhân vật, hoặc tệp tham chiếu được đính kèm theo thứ tự khác với số thứ tự trong prompt. Hãy kiểm tra rằng mọi prompt video đều chứa cùng một đoạn mô tả nhân vật và bảng nhân vật luôn là ảnh đầu tiên.
Có dùng Seedance 2.0 cho quy trình này được không?
Có, với cùng cấu trúc yêu cầu và ID mô hình riêng của nó. Với nhân vật, hãy đưa cho Seedance 2.0 ảnh khuôn mặt và ảnh toàn thân riêng thay vì một bảng nhiều góc nhìn. Bài Seedance 2.5 vs 2.0 liệt kê các khác biệt còn lại.
Làm bộ phim ngắn đầu tiên của bạn
Hãy bắt đầu với một câu chuyện ba cảnh quay ở 480p, kiểm tra các cảnh, rồi render bản cuối ở độ phân giải cao hơn. Trang Seedance 2.5 có giá hiện tại và Playground để thử một cảnh quay, còn toàn bộ tham số yêu cầu nằm trong tài liệu API Seedance 2.5, tài liệu API GPT Image 2.5 và tài liệu API Claude Opus 5.5.



