DEV Community

Cover image for วิธีต่อความยาววิดีโอด้วย Gemini Omni 1.2 Flash
Thanawat Wongchai
Thanawat Wongchai

Posted on Originally published at apidog.com

วิธีต่อความยาววิดีโอด้วย Gemini Omni 1.2 Flash

วิธีต่อความยาววิดีโอด้วย Gemini Omni 1.2 Flash

คำตอบแบบสั้น: การต่อคลิปวิดีโอด้วย Gemini Omni 1.2 Flash ทำได้โดยส่งคลิปของคุณพร้อมพรอมต์สำหรับส่วนที่ต่อออกไปไปยัง Interactions API แต่ละเทิร์นจะเพิ่มได้ 3 ถึง 10 วินาที แล้วส่งคลิปที่ยาวขึ้นกลับมา Gemini API จะจำกัดที่รวม 30 วินาที ส่วน Agent Platform ของ Google Cloud ทำได้ถึง 40 วินาที แต่ต้องวางแผนแต่ละขั้นให้ดีเพื่อไม่ให้ส่วนต้นของคลิปถูกตัดทิ้ง

ลองใช้ Apidog วันนี้

สำหรับคำแนะนำในการเขียนพรอมต์ ดูได้ที่คู่มือการต่อฉาก Omni 1.1 ของเรา ส่วนคู่มือนี้จะครอบคลุมสิ่งที่เปลี่ยนแปลงใหม่: รูปแบบคำขอ การคำนวณการต่อเชื่อมแบบหลายขั้น และค่าใช้จ่ายของคลิป 40 วินาที

วิธีการทำงานของการต่อวิดีโอใน Gemini Omni 1.2 Flash

การต่อวิดีโอคือการสร้างเนื้อหาต่อเนื่องต่อท้ายคลิป โมเดลจะอ่านเนื้อหาใน 10 วินาทีสุดท้ายของอินพุตเป็นบริบท สร้างส่วนใหม่ 3 ถึง 10 วินาที แล้วต่อเข้ากับคลิปเดิม ซึ่งจะเติมต่อท้ายเท่านั้น: คุณไม่สามารถเติมที่ต้นคลิปหรือแทรกตรงกลางได้

Google ระบุขีดจำกัดที่แตกต่างกันตามช่องทางที่คุณเรียกใช้โมเดล:

Gemini API Agent Platform (Google Cloud)
การยืนยันตัวตน API key Project และ access token
ความยาวรวม 30 วินาที 40 วินาที
ความยาวอินพุต ไม่ระบุขีดจำกัดแยกต่างหาก ความยาวเท่าใดก็ได้
รูปภาพอ้างอิง สูงสุด 6 รูปบน Omni สูงสุด 2 รูปต่อการต่อครั้งหนึ่ง
โหมดการต่อคลิป ระบุพรอมต์ก่อน โดยมี task เป็นทางเลือกสำรอง ใช้ task: "extend" ในทุกตัวอย่าง
Seed และ labels ไม่ปรากฏในเอกสาร Omni generation_config.seed, labels
ผลลัพธ์ที่เก็บไว้ 55 วันบน paid tier สูงสุด 7 วัน

แหล่งอ้างอิง: เอกสาร Omni ของ Gemini API และ เอกสารการต่อวิดีโอของ Agent Platform

บน Agent Platform โมเดลจะอ่าน 10 วินาทีสุดท้าย แล้วนำส่วนที่สร้างใหม่ไปต่อกับ 30 วินาทีสุดท้ายของอินพุต ตัวอย่างของ Google ต่ออินพุตความยาว 60 วินาทีเพิ่มอีก 10 วินาที แต่ผลลัพธ์ได้ 40 วินาที ซึ่งหมายความว่า 30 วินาทีแรกถูกตัดทิ้ง

เส้นไทม์ไลน์แสดงคลิปอินพุตความยาว 60 วินาที โดย 30 วินาทีแรกถูกตัดออก เหลือ 30 วินาทีสุดท้าย โมเดลอ่าน 10 วินาทีสุดท้าย และผลลัพธ์ 40 วินาทีคือ 30 วินาทีที่เก็บไว้บวกส่วนใหม่ 10 วินาที

คุณไม่ต้องตัดต่อเชื่อมเอง เพราะผลลัพธ์รวมฟุตเทจเดิมมาให้แล้ว แต่ Google จะแก้ไขเฟรมสุดท้ายบางส่วนของอินพุตเพื่อให้การเชื่อมต่อลื่นไหล

สิ่งที่เปลี่ยนแปลงด้านการต่อวิดีโอในเวอร์ชัน 1.2

  • คลิปเริ่มต้นยาวได้ 15 วินาที เวอร์ชัน 1.1 จำกัดที่ 10 วินาที แต่แต่ละเทิร์นการต่อยังคงจำกัดที่ 10 วินาทีเท่าเดิม
  • รูปภาพอ้างอิง, seed และ labels ในคำขอต่อวิดีโอบน Agent Platform
  • ไวยากรณ์พรอมต์แบบใหม่ Google ยกเลิกการใช้แท็กอย่าง <IMAGE_REF_0> ที่คู่มือเก่าใช้ ให้บรรยายรูปภาพแต่ละรูปด้วยภาษาธรรมชาติแทน
  • ประเภทอินพุตใหม่ ตัวอย่างปัจจุบันส่ง "type": "video" ไม่ใช่ประเภท document ตามตัวอย่างของ 1.1

ต่อวิดีโอทีละขั้นบน Gemini API

  1. สร้างคลิป หรืออัปโหลดผ่าน Files API ไฟล์ที่อัปโหลดจะถูกลบหลังผ่านไป 48 ชั่วโมง
  2. บรรยายเฉพาะเหตุการณ์ที่เกิดขึ้นต่อจากนี้เท่านั้น
  3. ตั้งค่า duration ตั้งแต่ "3s" ถึง "10s" (ค่าเริ่มต้น 10)
  4. เก็บ interaction ID ไว้ใช้ในเทิร์นถัดไป
from google import genai

client = genai.Client()

first = client.interactions.create(
    model="gemini-omni-1.2-flash",
    input="A courier in a yellow jacket cycles through a rainy night market.",
    response_format={"type": "video", "duration": "15s"},
)

second = client.interactions.create(
    model="gemini-omni-1.2-flash",
    previous_interaction_id=first.id,
    input="The courier brakes at a red door. Keep the same yellow jacket.",
    response_format={"type": "video", "duration": "10s", "delivery": "uri"},
)
Enter fullscreen mode Exit fullscreen mode

หากต้องการต่อฟุตเทจของคุณเอง ให้แทนที่ previous_interaction_id ด้วย input array ที่มี {"type": "video", "uri": video_file.uri} และข้อความหนึ่งรายการ

  • ช่วงแรกให้ข้าม task ไปก่อน Google ระบุว่ามันเพิ่มข้อจำกัดที่เข้มงวด จึงควรตั้ง "task": "extend" ใน video_config เป็นทางเลือกสำรองเท่านั้น
  • ใช้ delivery: "uri" เมื่อไฟล์เกิน 4MB เก็บ URI จาก response ตอนสร้างไว้ โดย GET ในภายหลังจะคืน base64 แบบ inline แม้คำขอเดิมระบุ URI
  • เปิด store ค้างไว้ หากตั้ง store: false คุณจะไม่สามารถต่อจาก interaction ID นั้นได้

การอัปโหลดมีข้อจำกัดเพิ่มอีกสองข้อ: เพิ่มบทสนทนาในฉากที่มีคนพูดไม่ได้ และไม่สามารถต่อวิดีโอจาก EEA, สวิตเซอร์แลนด์ หรือสหราชอาณาจักร การต่อแบบหลายเทิร์นจากวิดีโอที่สร้างขึ้นหลีกเลี่ยงข้อจำกัดทั้งสองได้

ตัวอย่างการเรียกคำขอบน Agent Platform

ใช้เส้นทางนี้เมื่อต้องการ 40 วินาทีหรือต้องการจัดคิวงาน การสร้างอาจใช้เวลาเกินหนึ่งนาที จึงควร POST body นี้ไปที่ https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions โดยเปิด background ไว้:

{
  "model": "gemini-omni-1.2-flash",
  "background": true,
  "input": [
    { "type": "text", "text": "The courier opens the red door and steps inside." },
    { "type": "video", "uri": "gs://my-bucket/hop-1.mp4", "mime_type": "video/mp4" }
  ],
  "response_format": [
    {
      "type": "video",
      "delivery": "uri",
      "gcs_uri": "gs://my-bucket/out/",
      "aspect_ratio": "16:9",
      "duration": "5s"
    }
  ],
  "generation_config": {
    "seed": 4242,
    "video_config": { "task": "extend" }
  },
  "labels": { "campaign": "courier", "hop": "2" }
}
Enter fullscreen mode Exit fullscreen mode

การเรียกจะคืน interaction ID พร้อมสถานะ in_progress ให้ตรวจสอบด้วย GET .../locations/global/interactions/INTERACTION_ID เมื่อเสร็จสิ้น ให้อ่าน URI gs:// จากขั้นตอน model_output ใน steps แล้วนำ URI นั้นไปเป็นอินพุตของ hop ถัดไป

ยังมีโหมด stateless (store: false), stateful (store: true) และ streaming ให้เลือกใช้ ผลลัพธ์แบบเก็บไว้และแบบ async อยู่ได้สูงสุด 7 วัน จึงควรคัดลอกสิ่งที่ต้องการเก็บไว้

หมายเหตุ: ยังไม่ได้รันจริงเพราะไม่มี Google Cloud project ตัวอย่าง body ของ Google ไม่ได้แสดงทั้ง seed และ labels จึงควรตรวจสอบตำแหน่งของฟิลด์ทั้งสองอีกครั้ง

การต่อเชื่อมไปจนถึงขีดจำกัด 40 วินาที

แต่ละ hop จะเก็บฟุตเทจของคุณได้ครบก็ต่อเมื่ออินพุตมีความยาวไม่เกิน 30 วินาที หากต้องการไปให้ถึง 40 โดยไม่เสียเนื้อหาใด ๆ ให้ทำให้อินพุตมีความยาวพอดี 30 วินาทีก่อน

Hop Planned duration Planned output Naive duration Naive output
เริ่มต้น 15s 15s 15s 15s
1 10s 25s 10s 25s
2 5s 30s 10s 35s
3 10s 40s 10s 40s, วินาทีแรก 5s ถูกตัด

เปรียบเทียบแผนการต่อสองแบบ: แบบวางแผน 15 วินาทีบวก 10, 5 และ 10 ได้ 40 วินาทีโดยไม่เสียเนื้อหา ส่วนแบบไม่วางแผน 15 วินาทีบวกสาม hop ขนาด 10 วินาทีได้ 40 วินาทีแต่ตัด 5 วินาทีแรกทิ้ง

แบบไม่วางแผนได้เพิ่มมา 5 วินาที แต่ต้องแลกด้วยการทิ้งส่วนต้นคลิป ความยาวคลิปจะไม่เตือนคุณ เพราะทั้งสองแบบให้ผลลัพธ์ 40 วินาทีเท่ากัน

การเริ่มด้วยคลิป 15 วินาทีไม่ได้ช่วยลดจำนวนครั้งการเรียกเมื่อเป้าหมายคือ 40 วินาที: เริ่มที่ 10 วินาทีก็ต้องต่อสามครั้งเช่นกัน แต่ช่วยได้ในกรณีอื่น เช่น เป้าหมาย 25 วินาทีต้องต่อเพียงครั้งเดียวแทนสองครั้ง และ 35 วินาทีต้องต่อสองครั้งแทนสามครั้ง

บน Gemini API ให้หยุดหลัง hop ที่ 2 เพราะ Google ไม่ได้ระบุว่าจะเกิดอะไรขึ้นหากคำขอเกิน 30 วินาที

รักษาความสม่ำเสมอของตัวละครด้วยรูปภาพอ้างอิงและ seed

ตัวละครที่ออกจากเฟรมก่อน 10 วินาทีสุดท้ายจะมองไม่เห็นสำหรับโมเดล แม้เฟรมเหล่านั้นยังอยู่ในคลิปก็ตาม วิธีแก้ของ Google: กล่าวถึงตัวละครนั้นอีกครั้งหรือส่งรูปภาพอ้างอิงใน input array เดียวกัน:

{ "type": "image", "uri": "gs://my-bucket/courier.png", "mime_type": "image/png" },
{ "type": "text", "text": "The courier from the reference image walks back into frame." }
Enter fullscreen mode Exit fullscreen mode
  • ใช้รูปเดิมซ้ำในทุก hop ที่ต้องมีตัวละครนั้น
  • เลือกอย่างรอบคอบบน Agent Platform เพราะรูปสองรูปต่อการต่อหนึ่งครั้งครอบคลุมได้เฉพาะสิ่งที่มีโอกาสผิดเพี้ยนมากที่สุด
  • อย่าส่งวิดีโออ้างอิง Google รองรับเฉพาะการสร้างใหม่เท่านั้น ไม่รองรับการต่อคลิป
  • ระบุเวลาโดยอิงจากส่วนที่สร้างใหม่ 0s ในพรอมต์ของคุณหมายถึงจุดเริ่มของส่วนที่ต่อออกไป ไม่ใช่จุดเริ่มของคลิป

ตั้งค่า generation_config.seed เพื่อให้ได้ผลลัพธ์ที่ทำซ้ำได้ ซึ่งมีประโยชน์ที่สุดตอนดีบัก: รัน hop เดิมด้วย seed เดิมเพื่อดูว่าการเปลี่ยนแปลงเกิดจากพรอมต์หรือไม่ Google ไม่ได้การันตีว่า seed จะรักษาตัวละครให้สม่ำเสมอข้ามพรอมต์ที่ต่างกัน จึงควรอาศัยรูปอ้างอิงสำหรับเรื่องนี้ และใช้ labels เพื่อติดตามค่าใช้จ่ายราย hop

คลิป 40 วินาทีมีค่าใช้จ่ายเท่าไร

หน้าราคาของ Google คิดค่าใช้จ่ายวิดีโอเอาต์พุตของ Omni 1.2 ที่ $12.00 ต่อ token หนึ่งล้านตัว แต่ไม่ได้ระบุว่าการต่อคลิปจะคิดค่าเฉพาะวินาทีที่สร้างใหม่หรือคิดทุกวินาทีที่ส่งกลับ แผนที่วางแผนดีจะสร้างเพิ่มรวม 40 วินาที แต่ส่งกลับคลิปความยาว 15, 25, 30 และ 40 วินาที รวมเป็น 110 วินาที

Resolution Per second If only new seconds bill If every returned second bills
360p $0.023 $0.93 $2.55
720p ประมาณ $0.07 $2.78 $7.65
1080p (upsampled) $0.104 $4.17 $11.47
4K (upsampled) $0.209 $8.34 $22.94

ราคาเหล่านี้เป็นอัตราของ Gemini API คำนวณจากจำนวน tokens ต่อวินาทีของ Google ยังต้องบวกค่า input tokens ($1.50 ต่อล้านตัว) และ thinking tokens ($9.00 ต่อล้านตัว) อีก

ก่อนที่คุณจะตรวจสอบได้ ให้จัดงบตามคอลัมน์ขวา วิธีคุมค่าใช้จ่าย:

  • ร่างงานที่ 360p และตรวจสอบทั้งเชนให้เสร็จก่อนจ่ายเงินกับ 720p
  • เลือกความละเอียดก่อนเริ่มต่อเชน หน้าโมเดลของ Agent Platform จำกัดการอัปสเกลอินพุตที่ 15 วินาที คลิปเสร็จแล้ว 40 วินาทีจึงไม่สามารถอัปสเกลในรอบเดียวได้
  • จัดงบสำหรับ reroll ในช็อตที่ยาก ประกาศของ Google ระบุว่าการเคลื่อนไหวกีฬาที่เร็ว การเปลี่ยนสคริปต์รวดเร็ว และฟิสิกส์ที่ซับซ้อนยังเป็นจุดที่กำลังปรับปรุงอยู่

คำขอไปยัง gemini-omni-1.1-flash จะถูกส่งต่อไปยัง 1.2 ตั้งแต่วันที่ 3 ธันวาคม 2026 และคิดค่าใช้จ่ายตามอัตราของ 1.2

ให้ coding agent ของคุณทดสอบ async flow ด้วย Apidog CLI

เชนแบบ async มักล้มเหลวอย่างเงียบ ๆ: polling ที่ไม่มีวันจบ, run ที่จบด้วยสถานะ failed, หรือรูปแบบ response ที่เปลี่ยนไป ให้ coding agent ของคุณสร้างการทดสอบนี้ด้วย Apidog CLI แล้วรันให้คุณ

npm install -g apidog-cli@latest
apidog auth login --with-token <YOUR_TOKEN>
apidog skill install
Enter fullscreen mode Exit fullscreen mode

แล้วสั่ง Claude Code, Codex หรือ Cursor ด้วยพรอมต์เดียว:

In Apidog project <id>, create endpoints for POST and GET on the Omni
interactions URL. Build a test scenario named omni-extend-async: start a
3-second 360p extension with background set to true, save the interaction
ID, then loop with a 10-second delay on GET until status leaves in_progress.
Assert status is completed and a model_output step holds a video/mp4 item
with a uri or data. Run it and summarize any failures.
Enter fullscreen mode Exit fullscreen mode

Agent จะตรวจสอบ payload ของตัวเอง แล้วสร้างและรัน scenario:

apidog cli-schema get test-scenario-update
apidog test-scenario create --project <id> --name "omni-extend-async" --folder-id <folderId> --priority 1
apidog test-scenario import-steps <scenarioId> --project <id> --source endpoint --ids <postId>,<getId>
apidog cli-schema validate test-scenario-update --file scenario.json
apidog test-scenario update <scenarioId> --project <id> --file scenario.json
apidog run -t <scenarioId> --project <id> -e <envId> --timeout-request 300000 -r cli,junit --out-dir ./reports
Enter fullscreen mode Exit fullscreen mode

การรันแต่ละครั้งคิดค่าสร้างคลิปจริง จึงควรรันรายคืน ไม่ใช่รายคอมมิต hop 3 วินาทีที่ 360p มีค่าใช้จ่ายประมาณ $0.07 หากคิดเฉพาะวินาทีที่สร้างใหม่ คำสั่งเดียวกันนี้ใส่ลงใน pipeline ได้ ดังที่คู่มือ Apidog CLI CI/CD ของเราแสดงให้เห็น และฝั่ง agent มีคำอธิบายในคู่มือตั้งค่า Claude Code Apidog Free รองรับผู้ใช้ได้ถึง 4 คน

คำถามที่พบบ่อย

วิดีโอ Gemini Omni 1.2 Flash ยาวได้สูงสุดเท่าไร? การสร้างครั้งเดียวยาวได้ 3 ถึง 15 วินาที หากใช้การต่อคลิป เอกสาร Gemini API ระบุรวมได้ 30 วินาที ส่วนเอกสาร Agent Platform ระบุ 40 วินาที

ทำไมส่วนต้นของวิดีโอที่ต่อแล้วหายไป? บน Agent Platform จะเก็บเพียง 30 วินาทีสุดท้ายของอินพุต อินพุตที่ยาวเกิน 30 วินาทีจะเสียส่วนต้นไป วางแผน hop ของคุณให้ hop สุดท้ายเริ่มจากความยาวพอดี 30 วินาที

ต่อวิดีโอที่ฉันถ่ายเองได้ไหม? ได้ ในพื้นที่นอก EEA, สวิตเซอร์แลนด์ และสหราชอาณาจักร อัปโหลดผ่าน Files API หรือชี้ไปที่ Cloud Storage บน Agent Platform แต่เพิ่มบทสนทนาในคลิปที่อัปโหลดซึ่งมีคนพูดไม่ได้

ต่อคลิปฟรีได้ไหม? ไม่ได้ผ่าน API Google ระบุ free tier ของ Omni 1.2 และ 1.1 ว่า "ไม่พร้อมใช้งาน" แม้แต่การทดสอบก็มีค่าใช้จ่าย การต่อ 3 วินาทีที่ 360p คือตัวเลือกที่ถูกที่สุดที่รันได้

Top comments (0)