Seedance 2.5
สร้างวิดีโอด้วย Seedance 2.5 โดยใช้ข้อความ เฟรมแรกและเฟรมสุดท้าย หรืออินพุตอ้างอิงแบบมัลติโมดอล หน้านี้จะครอบคลุมขั้นตอนการทำงานตั้งแต่การส่งรีเควสไปจนถึงการรับผลลัพธ์ของโมเดลนี้ทั้งหมด
ID โมเดลของ API: seedance-2-5
การสร้างวิดีโอจะทำงานแบบอะซิงโครนัส (Asynchronous) โปรดบันทึก taskId ที่ได้รับจากการสร้างงาน จากนั้นสืบค้นสถานะงานหรือรอรับข้อมูลผ่านเว็บฮุก
ความสามารถ
| ฟีเจอร์ | ค่าที่รองรับ |
|---|---|
| ความละเอียดวิดีโอผลลัพธ์ | 480p · 720p · 1080p |
| ความยาววิดีโอผลลัพธ์ | 4–30 วินาที |
| อัตราส่วนภาพ | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |
| รูปภาพอ้างอิง | รูปภาพสูงสุด 30 รูป |
| วิดีโออ้างอิง | วิดีโอสูงสุด 10 ไฟล์ |
| ไฟล์เสียงอ้างอิง | ไฟล์เสียงสูงสุด 10 ไฟล์ |
| สื่ออ้างอิงทั้งหมดรวมกัน | ไฟล์อ้างอิงรวมสูงสุด 50 ไฟล์ |
| ความยาวรวมต่อกลุ่มวิดีโอ/เสียง | 30 วินาที |
| seed | ไม่รองรับ |
ราคาและเครดิต
ระบบจะคิดค่าบริการสร้างวิดีโอเป็นเครดิตตามความยาวที่นำมาคำนวณเงินเป็นวินาที หากไม่มีการใส่คลิปวิดีโอต้นแบบ ความยาวที่นำมาคำนวณเงินจะเป็นความยาวของวิดีโอผลลัพธ์ แต่หากมีการใส่คลิปวิดีโอต้นแบบเข้ามาด้วย ก็จะนับรวมความยาวของวิดีโออ้างอิงนั้นเข้าไปด้วย
ตารางด้านล่างแสดงอัตราเครดิตที่หักต่อวินาที ไม่ใช่ค่าใช้จ่ายทั้งหมดของงาน โดยอัตราจะขึ้นอยู่กับโมเดล ความละเอียดของวิดีโอผลลัพธ์ และการใส่วิดีโออ้างอิงในโหมด Reference-to-Video คุณสามารถดูสูตรและตัวอย่างการคำนวณค่าใช้จ่ายทั้งหมดได้ที่ด้านล่างตารางนี้
| ความละเอียดวิดีโอผลลัพธ์ | ไม่มีวิดีโออินพุต | มีวิดีโออินพุต |
|---|---|---|
480p | 10 เครดิต/วินาที | 6 เครดิต/วินาที |
720p | 20 เครดิต/วินาที | 12 เครดิต/วินาที |
1080p | 30 เครดิต/วินาที | 20 เครดิต/วินาที |
- ไม่มีวิดีโออินพุต: ความยาววิดีโอผลลัพธ์ (วินาที) × อัตราค่าบริการแบบไม่มีวิดีโอ
- มีวิดีโออินพุต: (ความยาววิดีโอผลลัพธ์ (วินาที) + ความยาวจริงของวิดีโออ้างอิง (วินาที)) × อัตราค่าบริการแบบมีวิดีโอ เซิร์ฟเวอร์จะวัดความยาวรวมของวิดีโออ้างอิงและปัดเศษขึ้นเป็นจำนวนเต็มวินาทีก่อนคิดค่าบริการ
- การใช้อินพุตอ้างอิงเฉพาะรูปภาพหรือเสียงอย่างเดียวจะคิดในอัตราค่าบริการแบบไม่มีวิดีโอ ส่วนอัตราค่าบริการแบบมีวิดีโออ้างอิงจะใช้ในโหมด reference-to-video เมื่อมีการส่งวิดีโออ้างอิงเท่านั้น
ตัวอย่างการคำนวณค่าใช้จ่าย
วิดีโอแบบข้อความเป็นวิดีโอ 720p ความยาว 5 วินาที: 5 × 20 = 100 เครดิต
วิดีโอผลลัพธ์ 720p ความยาว 5 วินาที พร้อมวิดีโออ้างอิงความยาว 5 วินาที: (5 + 5) × 12 = 120 เครดิต
ระบบจะสำรองเครดิตเมื่อส่งงานและจะหักเครดิตจริงเมื่อทำรายการสำเร็จ หากงานล้มเหลวหรือหมดเวลาจะเข้าสู่ขั้นตอนการคืนเครดิต หากสถานะการเรียกเก็บเงินแสดงเป็น refund_failed หมายความว่าการคืนเครดิตไม่เสร็จสมบูรณ์ โปรดตรวจสอบบันทึกการใช้งาน API หรือติดต่อฝ่ายสนับสนุน
การคิดเครดิตเมื่อ duration=-1
เมื่อตั้งค่าความยาวเป็น -1 ความยาวของผลลัพธ์สุดท้ายจะไม่คงที่ โดยระบบจะปล่อยให้โมเดลเป็นผู้กำหนดเอง
ในกรณีส่วนใหญ่ แนะนำให้กำหนดความยาวตามความยาววิดีโอที่คุณต้องการใช้งานจริงแทนการตั้งค่าเป็น -1 ทั้งนี้ เราขอแนะนำให้ใช้ค่า -1 สำหรับการตัดต่อวิดีโอเท่านั้น ไม่แนะนำสำหรับการสร้างวิดีโอในรูปแบบอื่นๆ
| อินพุตอ้างอิง | วิธีการคำนวณค่าบริการ | ตัวอย่าง |
|---|---|---|
| กรณีมีวิดีโออ้างอิง | รวมความยาวของวิดีโออ้างอิงทั้งหมดแล้วปัดเศษขึ้นเป็นวินาทีเต็มถัดไป แทนค่าด้วย T ค่าบริการจะเท่ากับ (T + T) × อัตราแบบมีวิดีโอ โดย T ตัวแรกคือระยะเวลาผลลัพธ์โดยประมาณ และ T ตัวที่สองคือระยะเวลาของวิดีโออินพุต | ความละเอียด 720p พร้อมวิดีโออ้างอิงความยาว 5 วินาที: (5 + 5) × 12 = 120 เครดิต |
| กรณีไม่มีวิดีโออ้างอิง (มีเฉพาะรูปภาพหรือเสียง) | ใช้ระยะเวลาผลลัพธ์โดยประมาณที่ 30 วินาที ค่าบริการจะเท่ากับ 30 × อัตราแบบไม่มีวิดีโอ | ความละเอียด 720p แบบไม่มีวิดีโออ้างอิง: 30 × 20 = 600 เครดิต |
การยืนยันตัวตน
สร้างคีย์ API ได้ในแดชบอร์ด โดยระบบจะแสดงคีย์ตัวเต็มเพียงครั้งเดียวเท่านั้น โปรดเก็บรักษาไว้บนเซิร์ฟเวอร์ของคุณและส่งมาในรูปแบบ Bearer token ในทุกรีเควส
Base URL
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonตั้งค่าตัวแปรสภาพแวดล้อม SEEVIO_API_KEY ก่อนรันตัวอย่างเหล่านี้ ตัวอย่าง JavaScript จะทำงานบนเซิร์ฟเวอร์ด้วย Node.js ส่วนตัวอย่าง Python จะใช้แพ็กเกจ requests
เริ่มต้นด่วน
ส่งรีเควสแบบย่อนี้ บันทึก taskId ที่ได้รับ จากนั้นใช้ตัวอย่างการสืบค้นสถานะงานด้านล่าง โดยค่าเครดิตที่แสดงในการตอบกลับเมื่อสร้างงานจะเป็นจำนวนเครดิตที่ถูกสำรองไว้
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
}
}'ตัวอย่างการตอบกลับเมื่อสร้างงาน
หลังจากยอมรับคำขอข้างต้นแล้ว API จะส่งคืนการตอบกลับแบบ JSON นี้ โดย taskId คือรหัสประจำตัวงานที่ใช้สำหรับการสอบถามสถานะในภายหลัง และ credits คือจำนวนเครดิตที่สำรองไว้สำหรับงานนี้ การตอบกลับนี้เป็นการยืนยันการสร้างงานเท่านั้น ไม่ได้หมายความว่าวิดีโอพร้อมใช้งานแล้ว คุณต้องทำการดึงข้อมูลสถานะงาน (poll) หรือใช้ Webhook เพื่อรับผลลัพธ์วิดีโอ
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}สร้างงาน
POST https://api.seevio.ai/v1/videos/generationsส่งออบเจ็กต์ JSON ที่ประกอบด้วยโมเดล อินพุต และระบุ callback_url (ไม่บังคับ) โปรดระบุ ID โมเดลที่แสดงในหน้านี้ให้ถูกต้องเสมอ หากละเว้นฟิลด์ model ระบบจะเลือก seedance-2-0 ให้โดยอัตโนมัติ
Request body
| ฟิลด์ | ประเภท | จำเป็น | คำอธิบายและข้อจำกัด |
|---|---|---|---|
model | string | ใช่ | รหัสโมเดล หากต้องการใช้ Seedance 2.5 ให้ตั้งค่าฟิลด์นี้เป็น seedance-2-5 |
callback_url | string | ไม่ใช่ | URL ปลายทาง HTTPS สาธารณะสำหรับการส่งคอลแบ็กแบบ POST เมื่อทำรายการสำเร็จหรือล้มเหลว ไม่อนุญาตให้ใช้เครือข่ายส่วนตัวและ localhost ตัวอย่าง: https://example.com/webhooks/seevio |
input | object | ใช่ | การตั้งค่าการสร้างวิดีโอ ต้องมี prompt ที่ไม่ว่างเปล่า |
พารามิเตอร์อินพุต
โปรดระบุ image_urls, video_urls และ audio_urls ในรูปแบบอาร์เรย์ของสตริง URL (string[]) โดยทุก URL ที่ระบุจะต้องสามารถเข้าถึงได้แบบสาธารณะผ่านโปรโตคอล HTTPS ซึ่งรวมถึงไฟล์สื่อที่โหมดการทำงานปัจจุบันไม่ได้เลือกใช้งานด้วย
| ฟิลด์ | ประเภท | จำเป็น | ค่าเริ่มต้น | คำอธิบายและข้อจำกัด |
|---|---|---|---|---|
input.prompt | string | ใช่ | — | จำเป็นต้องระบุในทุกโหมด รวมถึงโหมดที่มีเฉพาะสื่ออ้างอิง รองรับสูงสุด 10,000 ตัวอักษรก่อนตัดคำ และต้องมีข้อความที่ไม่ใช่ช่องว่าง ตัวอย่าง: A cat surfing at sunset |
input.generation_type | string | ไม่ใช่ | text-to-video | โหมด text-to-video จะใช้เฉพาะ prompt เท่านั้น โหมด image-to-video จะใช้รูปภาพ 1–2 รูป โหมด reference-to-video จะใช้รูปภาพ วิดีโอ และ/หรือไฟล์เสียงอ้างอิง ค่าที่รองรับ text-to-video | image-to-video | reference-to-video |
input.image_urls | string[] | ตามเงื่อนไข | [] | image-to-video: ใช้ 1 รูปสำหรับเฟรมแรก หรือ 2 รูปตามลำดับสำหรับเฟรมแรกและเฟรมสุดท้าย reference-to-video: ใช้รูปภาพได้สูงสุด 30 รูป ฟิลด์นี้จะถูกละเว้นในโหมด text-to-video ตัวอย่าง: ["https://example.com/first-frame.jpg"] |
input.video_urls | string[] | ตามเงื่อนไข | [] | ส่งต่อเฉพาะในโหมด reference-to-video เท่านั้น โดยส่งได้สูงสุด 10 วิดีโอ และความยาวรวมไม่เกิน 30 วินาที ฟิลด์นี้จะถูกละเว้นในโหมดอื่น ตัวอย่าง: ["https://example.com/source.mp4"] |
input.audio_urls | string[] | ตามเงื่อนไข | [] | ส่งต่อเฉพาะในโหมด reference-to-video เท่านั้น โดยส่งได้สูงสุด 10 ไฟล์เสียง และความยาวรวมไม่เกิน 30 วินาที ฟิลด์นี้จะถูกละเว้นในโหมดอื่น ตัวอย่าง: ["https://example.com/music.mp3"] |
input.duration | integer | ไม่ใช่ | 5 | ความยาววิดีโอผลลัพธ์เป็นจำนวนเต็มตั้งแต่ 4 ถึง 30 วินาที รองรับค่า -1 เฉพาะในโหมด reference-to-video เท่านั้น ใช้ร่วมกับวิดีโอต้นฉบับสำหรับการตัดต่อ โดยการคิดราคาจะเป็นไปตามกฎพิเศษข้างต้น ค่าที่รองรับ -1 | 4–30ตัวอย่าง: 5 |
input.aspect_ratio | string | ไม่ใช่ | adaptive | อัตราส่วนภาพของวิดีโอผลลัพธ์ ค่า adaptive จะช่วยให้โมเดลกำหนดอัตราส่วนที่เหมาะสมที่สุดให้เอง โหมด image-to-video รองรับเฉพาะค่า adaptive เท่านั้น โปรดละเว้นฟิลด์นี้หรือตั้งค่าเป็น adaptive ค่าที่รองรับ 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptiveตัวอย่าง: adaptive |
input.resolution | string | ไม่ใช่ | 720p | ใช้ความละเอียดวิดีโอผลลัพธ์รายการใดรายการหนึ่งที่รองรับตามที่ระบุไว้ที่นี่ ค่าที่รองรับ 480p | 720p | 1080pตัวอย่าง: 720p |
input.generate_audio | boolean | ไม่ใช่ | true | ร้องขอให้สร้างเสียงที่ซิงค์กับวิดีโอ ค่าที่รองรับ true | falseตัวอย่าง: true |
input.watermark | boolean | ไม่ใช่ | false | ร้องขอให้ใส่ลายน้ำ AI บนวิดีโอที่สร้างขึ้น ค่าที่รองรับ true | falseตัวอย่าง: false |
input.web_search | boolean | ไม่ใช่ | false | อนุญาตให้ใช้การค้นหาเว็บหากโมเดลนั้นรองรับ ค่าที่รองรับ true | falseตัวอย่าง: false |
input.return_last_frame | boolean | ไม่ใช่ | false | ร้องขอเฟรมสุดท้าย ผลลัพธ์การสืบค้นจะมีข้อมูล data.last_frame_url เมื่อเฟรมพร้อมใช้งาน มิฉะนั้นจะเป็น null ค่าที่รองรับ true | falseตัวอย่าง: true |
ฟิลด์ประเภทบูลีนต้องระบุค่าเป็น true หรือ false ในรูปแบบ JSON เท่านั้น ห้ามระบุเป็นสตริงหรือตัวเลข
การตอบกลับเมื่อสร้างงาน
HTTP 200 จะส่งคืน taskId (สตริง) และ credits (ตัวเลข) ซึ่งเป็นการยืนยันว่าระบบได้รับงานแล้ว ไม่ใช่หมายความว่างานเสร็จสิ้น จำนวนเครดิตด้านล่างนี้สอดคล้องกับการใช้งานเริ่มต้นด่วนแบบ 720p ความยาว 5 วินาที
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}โหมดการสร้างวิดีโอและตัวอย่าง
ข้อความเป็นวิดีโอ (Text to video)
สร้างวิดีโอจากข้อความพรอมต์ โดย URL สื่อจะไม่ถูกส่งต่อในโหมดนี้
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
}
}'เฟรมแรก
ระบุรูปภาพหนึ่งรูปเป็นเฟรมแรก จากนั้นอธิบายการเคลื่อนไหวในพรอมต์ของคุณ
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first-frame.jpg"
],
"aspect_ratio": "adaptive"
}
}'เฟรมแรกและเฟรมสุดท้าย
ระบุ URL รูปภาพสองรูปตามลำดับ: เฟรมแรก ตามด้วยเฟรมสุดท้าย ตัวอย่างนี้ยังแสดงการร้องขอเฟรมสุดท้ายของวิดีโอที่สร้างขึ้นด้วย
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first-frame.jpg",
"https://example.com/last-frame.jpg"
],
"aspect_ratio": "adaptive",
"return_last_frame": true
}
}'อินพุตแบบมัลติโมดอล
รวมอินพุตอ้างอิงทั้งรูปภาพ วิดีโอ และเสียงเข้าด้วยกัน โดยยังคงต้องระบุพรอมต์เช่นเดิม การส่งวิดีโออ้างอิงจะเปลี่ยนสูตรการคิดค่าบริการ
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"image_urls": [
"https://example.com/character.jpg"
],
"video_urls": [
"https://example.com/camera.mp4"
],
"audio_urls": [
"https://example.com/ambience.mp3"
],
"aspect_ratio": "adaptive"
}
}'ไฟล์เสียงอ้างอิง
ใช้เสียงเป็นอินพุตอ้างอิงเพียงอย่างเดียว โดยต้องระบุพรอมต์ข้อความเพื่ออธิบายวิดีโอที่ต้องการสร้าง
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"audio_urls": [
"https://example.com/music.mp3"
]
}
}'การตัดต่อวิดีโอ
อธิบายสิ่งที่ต้องการแก้ไขและระบุวิดีโอต้นฉบับ ตั้งค่า duration=-1 และใช้อัตราส่วนภาพแบบ adaptive โปรดใช้คลิปต้นฉบับที่มีความยาวอย่างน้อย 4 วินาทีสำหรับขั้นตอนการทำงานนี้ ดูวิธีคิดราคาของ duration=-1 ได้ที่ด้านบน
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
"duration": -1,
"resolution": "720p",
"generation_type": "reference-to-video",
"video_urls": [
"https://example.com/source.mp4"
],
"aspect_ratio": "adaptive"
}
}'การต่อความยาววิดีโอ
อธิบายว่าต้องการให้วิดีโอต้นฉบับดำเนินเรื่องต่ออย่างไร ใช้อัตราส่วนภาพแบบ adaptive และกำหนดความยาวผลลัพธ์ปกติให้อยู่ในช่วงที่โมเดลรองรับ
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
"duration": 8,
"resolution": "720p",
"generation_type": "reference-to-video",
"video_urls": [
"https://example.com/source.mp4"
],
"aspect_ratio": "adaptive"
}
}'สืบค้นสถานะงาน
GET https://api.seevio.ai/v1/tasks/{taskId}แทนที่ ID ตัวอย่างด้วย taskId ที่ได้จากการสร้างงาน การสืบค้นจะแสดงเฉพาะงานที่เป็นของผู้ใช้คีย์ API นั้นๆ เท่านั้น หากเข้าถึงไม่ได้หรือไม่พบ ID จะส่งคืน HTTP 404
ในเบื้องต้นแนะนำให้สืบค้นสถานะทุกๆ 10–20 วินาที หากพบ HTTP 429 ให้เว้นระยะเวลาเพิ่มขึ้น และหยุดสืบค้นเมื่อสถานะเป็น completed หรือ failed แนะนำให้ใช้เว็บฮุกสำหรับสภาพแวดล้อมจริง ตัวอย่างโค้ดด้านล่างนี้แต่ละชุดจะทำการสืบค้นเพียงหนึ่งครั้ง
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| สถานะ | คำอธิบายและข้อจำกัด |
|---|---|
queued | รับงานแล้วและกำลังรอคิวประมวลผล |
generating | กำลังสร้างวิดีโอ |
completed | เสร็จสมบูรณ์ โปรดดาวน์โหลดไฟล์จาก data.results ก่อนหมดอายุ |
failed | ล้มเหลว โปรดตรวจสอบรายละเอียดใน failed_reason และ billing_status |
| ฟิลด์ | ประเภท | คำอธิบายและข้อจำกัด |
|---|---|---|
id | string | รหัสระบุงาน ซึ่งก็คือ taskId จากผลการตอบกลับเมื่อสร้างงาน |
created_at | number | เวลาที่สร้างงานในรูปแบบ Unix timestamp (วินาที) |
model | string | ID โมเดลสาธารณะที่ใช้สำหรับงานนี้ |
billing_status | string | reserved (สำรองเครดิตแล้ว), charged (หักเครดิตแล้ว), refunded (คืนเครดิตแล้ว) หรือ refund_failed (คืนเครดิตไม่สำเร็จ) |
credits | number | เครดิตที่สำรองไว้สำหรับงานนี้ ค่านี้จะยังคงอยู่แม้จะมีการคืนเครดิตแล้ว โปรดตรวจสอบที่ billing_status เพื่อดูผลการเรียกเก็บเงินที่แท้จริง |
failed_reason | string | null | สาเหตุความล้มเหลวสำหรับงานที่ล้มเหลว หากงานไม่ล้มเหลวค่าจะเป็น null ผลการสืบค้นของงานที่ล้มเหลวจะไม่มีข้อมูลในฟิลด์ data |
data | object | จะแสดงเมื่อการสืบค้นงานไม่ล้มเหลว โดยประกอบด้วยรายละเอียดผลลัพธ์และขั้นตอนการประมวลผล |
data.results | string[] | อาร์เรย์ URL ของวิดีโอ จะไม่มีข้อมูลจนกว่างานจะเสร็จสิ้นหรือหลังจากวิดีโอหมดอายุ |
data.video_expires_at | string | null | เวลาหมดอายุของวิดีโอในรูปแบบ ISO 8601 หรือเป็น null ก่อนที่วิดีโอจะพร้อมใช้งาน โปรดบันทึกผลลัพธ์ก่อนถึงเวลานี้ |
data.last_frame_url | string | null | URL ของเฟรมสุดท้ายเมื่อมีการร้องขอและพร้อมใช้งาน มิฉะนั้นจะเป็น null |
data.processing_time | number | null | ระยะเวลาที่ผู้ให้บริการใช้ในการประมวลผลเป็นวินาทีเมื่อพร้อมใช้งาน มิฉะนั้นจะเป็น null |
งานเสร็จสิ้น: ผลลัพธ์การสอบถามพร้อมข้อมูลวิดีโอ
เมื่อสถานะที่ส่งกลับมาเป็น status=completed แสดงว่าการสร้างวิดีโอเสร็จสมบูรณ์แล้ว คุณสามารถดึง URL ของวิดีโอได้จาก data.results และต้องดาวน์โหลดวิดีโอก่อนถึงเวลาที่ระบุใน data.video_expires_at ส่วน billing_status=charged ระบุว่าระบบได้หักเครดิตที่สำรองไว้เรียบร้อยแล้ว
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}งานล้มเหลว: ผลลัพธ์การสอบถามพร้อมสาเหตุและการคืนเครดิต
เมื่อสถานะที่ส่งกลับมาเป็น status=failed แสดงว่าการสร้างวิดีโอไม่สำเร็จ ให้ดูสาเหตุที่ล้มเหลวได้ใน failed_reason และตรวจสอบผลการคืนเครดิตได้จาก billing_status สำหรับตัวอย่างนี้ refunded หมายถึงระบบได้คืนเครดิตให้แล้ว ส่วน credits จะยังคงแสดงจำนวนเดิมที่เคยสำรองไว้ และจะไม่มีการส่งกลับข้อมูลใน data
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}เว็บฮุก
ตั้งค่า callback_url ในรีเควสการสร้างงานเพื่อรับ JSON POST เมื่อสร้างงานสำเร็จหรือล้มเหลว ระบบปลายทางของคุณต้องส่งการตอบกลับ 2xx กลับมาภายใน 15 วินาที หากส่งไม่สำเร็จระบบจะพยายามส่งซ้ำ โปรดออกแบบระบบรับข้อมูลให้รองรับการทำงานแบบ Idempotent โดยตรวจสอบจาก ID ของงาน
ปลายทางคอลแบ็ก (Callback endpoint) ของคุณต้องรองรับคำขอแบบ POST ที่ส่งข้อมูลมาในรูปแบบ JSON (Content-Type: application/json)
สร้างงานพร้อมกำหนดคอลแบ็ก
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
},
"callback_url": "https://example.com/webhooks/seevio"
}'ข้อมูล Payload ของเว็บฮุกจะแตกต่างจากผลลัพธ์การสืบค้นสถานะงาน: เว็บฮุกจะไม่มีฟิลด์ billing_status และ credits รายละเอียดความล้มเหลวจะอยู่ใน data.failed_reason และ data.credits_refunded ส่วนฟิลด์ created_at ของเว็บฮุกจะเป็นเวลาที่เกิดเหตุการณ์ในรูปแบบ Unix timestamp (วินาที)
งานเสร็จสิ้น: ข้อมูล Callback เมื่อทำรายการสำเร็จ
เมื่อสร้างวิดีโอสำเร็จ Callback จะส่งค่า status=completed ให้ใช้ id เพื่อระบุงาน และใช้ data.results เพื่อดึง URL ของวิดีโอ โปรดดาวน์โหลดและบันทึกไฟล์วิดีโอก่อนถึงเวลาที่ระบุใน data.video_expires_at
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}งานล้มเหลว: ข้อมูล Callback เมื่อทำรายการไม่สำเร็จ
หากการสร้างวิดีโอล้มเหลว Callback จะส่งค่า status=failed ให้ใช้ id เพื่อระบุงาน ใช้ data.failed_reason เพื่อดูสาเหตุความล้มเหลว และใช้ data.credits_refunded เพื่อดูจำนวนเครดิตที่คืนให้
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}ตัวอย่างระบบรับข้อมูล
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrls = callbackData.data.results;
// Save the video URLs and mark this task as completed in your application.
console.log(callbackData.id, videoUrls);
}
if (callbackData.status === "failed") {
const { failed_reason, credits_refunded } = callbackData.data;
// Record the failure reason and refunded credits for this task.
console.error(callbackData.id, failed_reason, credits_refunded);
}
return new Response(null, { status: 200 });
}ตัวอย่างการใช้งาน Next.js นี้จะอ่านข้อมูล JSON จาก Callback และจัดการกับสถานะงานที่เสร็จสิ้นหรือล้มเหลวโดยตรง ทั้งนี้ ควรเพิ่มระบบจัดเก็บข้อมูล (Persistence) และระบบป้องกันงานซ้ำ (Task-ID deduplication) สำหรับแอปพลิเคชันของคุณ รวมถึงจัดคิวงานที่ใช้เวลาประมวลผลนานก่อนที่จะตอบรับ (Acknowledge) Callback
ข้อกำหนดและข้อจำกัดของสื่อ
- URL ของสื่อและคอลแบ็กทั้งหมดต้องเป็น URL HTTPS สาธารณะ หลีกเลี่ยงการใช้ localhost, IP ส่วนตัว และไฟล์ที่ต้องใช้คุกกี้หรือการเข้าสู่ระบบ URL ของวิดีโอ/เสียงอ้างอิงต้องเป็นลิงก์ที่เข้าถึงและอ่านไฟล์สื่อได้โดยตรง
- ในโหมด reference-to-video ต้องระบุอินพุตอ้างอิงอย่างน้อยหนึ่งรายการ โดยรูปภาพต้องไม่เกิน 30 รูป วิดีโอไม่เกิน 10 วิดีโอ ไฟล์เสียงไม่เกิน 10 ไฟล์ และสื่อรวมกันทั้งหมดต้องไม่เกิน 50 รายการ ความยาวรวมของวิดีโอและไฟล์เสียงต้องไม่เกิน 30 วินาทีสำหรับแต่ละประเภท
- โหมด text-to-video จะละเว้นสื่ออ้างอิงทั้งหมด โหมด image-to-video จะส่งต่อเฉพาะรูปภาพเฟรมแรก/เฟรมสุดท้ายและละเว้นวิดีโอและเสียงอ้างอิง โปรดใช้โหมด reference-to-video หากต้องการรวมสื่อหลายประเภท
- วิดีโอและไฟล์เสียงอ้างอิงแต่ละไฟล์ต้องมีความยาว 2–30 วินาที สำหรับการตัดต่อวิดีโอ โปรดใช้คลิปต้นฉบับที่มีความยาวอย่างน้อย 4 วินาที
ข้อกำหนดสำหรับรูปภาพ
- รูปภาพแต่ละไฟล์ต้องมีขนาดไม่เกิน 30 MB
- รูปแบบไฟล์ที่รองรับ: jpeg, png, webp, bmp, tiff, gif
- อัตราส่วนภาพ (ความกว้าง ÷ ความสูง): ระหว่าง 0.4 ถึง 2.5
- ความกว้างและความสูงต้องอยู่ระหว่าง 300 ถึง 6,000 พิกเซล
ข้อกำหนดสำหรับวิดีโอ
- รูปแบบไฟล์ที่รองรับ: mp4, mov
- วิดีโอแต่ละไฟล์ต้องมีขนาดไม่เกิน 100 MB
- อัตราเฟรมเรต: 24 ถึง 60 FPS
- อัตราส่วนภาพ (ความกว้าง ÷ ความสูง): ระหว่าง 0.4 ถึง 2.5
- จำนวนพิกเซลทั้งหมด (ความกว้าง × ความสูง): ระหว่าง 407,696 ถึง 8,295,044 พิกเซล ตัวอย่างเช่น 614 × 664 = 407,696 และ 3,326 × 2,494 = 8,295,044 (ตัวเลขนี้เป็นเพียงตัวอย่างการคำนวณจำนวนพิกเซล ไม่ใช่ข้อบังคับสำหรับความกว้างและความสูงจริง)
ข้อกำหนดสำหรับไฟล์เสียง
- รูปแบบไฟล์ที่รองรับ: wav, mp3
- ไฟล์เสียงแต่ละไฟล์ต้องมีขนาดไม่เกิน 15 MB
ข้อผิดพลาด
ข้อผิดพลาด HTTP จะมีออบเจ็กต์ error ซึ่งประกอบด้วย code และ message ทั้งนี้งานที่ระบบรับไปเรียบร้อยแล้วก็ยังอาจล้มเหลวในภายหลังได้ โปรดสืบค้นสถานะงานหรือจัดการผ่านคอลแบ็กความล้มเหลว
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | ฟิลด์ | วิธีแก้ไข |
|---|---|---|
| 400 | invalid_request | แก้ไขรูปแบบ JSON, พรอมต์ที่ขาดหายไป, ช่วงค่าพารามิเตอร์ หรือ URL ของสื่อให้ถูกต้องก่อนลองใหม่อีกครั้ง |
| 401 | invalid_api_key | ตรวจสอบ Bearer token และสถานะการใช้งานของคีย์ API |
| 402 | insufficient_credits | เติมเครดิตหรือลดค่าใช้จ่ายของงานลง ผลการตอบกลับอาจระบุจำนวนเครดิตที่ต้องการและจำนวนเครดิตที่มีอยู่จริง |
| 403 | forbidden | โปรดตรวจสอบข้อจำกัดระดับบัญชีที่ระบุไว้ในข้อความแจ้งข้อผิดพลาด |
| 404 | not_found | ตรวจสอบ ID ของงาน และตรวจสอบว่าคีย์ดังกล่าวเป็นของผู้ใช้ที่เป็นเจ้าของงานนั้นๆ หรือไม่ |
| 429 | rate_limited | รอจนกว่าจะครบกำหนดเวลาใน Retry-After ก่อนส่งรีเควสใหม่อีกครั้ง |
| 500 | internal_error | ตรวจสอบข้อความแสดงข้อผิดพลาดและบันทึกการใช้งาน API ควรระมัดระวังในการส่งคำขอซ้ำ เนื่องจากการส่งรีเควสสร้างงานใหม่อาจเป็นการสร้างงานที่มีค่าใช้จ่ายเพิ่มขึ้น |
การจำกัดอัตราการส่งคำขอ
การสร้างงาน: คีย์ API แต่ละคีย์สามารถส่งคำขอได้สูงสุด 100 ครั้งต่อนาทีโดยค่าเริ่มต้น และในขณะนี้ยังไม่รองรับการกำหนดขีดจำกัดอัตราการส่งคำขอแบบกำหนดเอง
การสอบถามข้อมูลงาน: คีย์ API แต่ละคีย์สามารถส่งคำขอได้สูงสุด 120 ครั้งต่อนาทีโดยค่าเริ่มต้น โดยจะนับจำนวนคำขอสอบถามข้อมูลและคำขอสร้างงานแยกกัน