คอนเซปต์ของระบบ

หลักการกลางที่ทีมใช้อ้างอิง — อัปเดตให้ตรงกับสิ่งที่ระบบทำอยู่จริง ณ 20 ส.ค. 2026 · ศัพท์ทุกคำในหน้านี้มีคำอธิบายเต็มที่หน้าอภิธานศัพท์

เปิดอภิธานศัพท์
01

ปัญหาที่กำลังแก้

ว่าที่ลูกค้า (สำนักข่าว/สื่อที่มีช่อง YouTube ของตัวเอง) มีคลังวิดีโอมหาศาล แต่ตอบไม่ได้ว่า คลังที่มีอยู่พอเปิดช่อง FAST 24 ชั่วโมงจริงไหม ต้องซ้ำถี่แค่ไหน ช่วงไหนจะโหวง และถ้าเปิดไปแล้วต้องผลิตเพิ่มเท่าไหร่ต่อสัปดาห์

การตอบด้วยสไลด์ไม่มีน้ำหนัก เพราะทุกตัวเลขเป็นการเดา — สิ่งที่มีน้ำหนักคือ เอาคลังจริงของเขามาเดินผังจริงให้ดู

02

สิ่งที่เครื่องมือนี้เป็น

ระบบ FAST Channel Simulation เสมือนจริง — สร้างสตูดิโอ วางลิงก์ช่อง YouTube ระบบดูด metadata จริง (ชื่อคลิป · ความยาว · วันอัปโหลด · เพลย์ลิสต์) แล้วได้ผังที่ เดินไปข้างหน้าทุกวัน ตามคอนเทนต์ใหม่ที่ลูกค้าอัปจริง

ต่างจากช่องจริงแค่ ไม่มีไฟล์วิดีโอให้เล่น เท่านั้น — ทุกอย่างที่เหลือคือของจริง และนี่คือประเด็นหลักของข้อเสนอเรื่อง Warp: จัดผัง 24 ชม. × 28 วันได้ด้วย metadata ล้วน ไม่ต้องมีไฟล์วิดีโอสักไฟล์ ไฟล์จริงค่อยดูดมาเฉพาะคลิปที่จะออนแอร์

ไม่ใช่ backtest
ไม่ได้ย้อนดูอดีต แต่คลี่ผังล่วงหน้า 28 วัน แล้วเดินต่อทุกวันตามคลิปใหม่ที่เข้ามาจริง
Deterministic
seed + คลัง + rule เดิม → ผังเดิมเป๊ะ ไม่งั้นเทียบสอง scenario ไม่ได้ เพราะแยกไม่ออกว่าตัวเลขต่างเพราะการตั้งค่าหรือเพราะการสุ่ม
ตัวเลขต้องเถียงได้
ทุกตัวเลขบนหน้าจอคำนวณจากคลังจริงด้วย engine ตัวจริง ไม่มีข้อมูลจำลองอยู่ในระบบเลย
03

หนึ่งลูกค้า = หนึ่งคลัง = สร้างได้หลายช่อง

ระบบจำลอง ทีละลูกค้า แยกขาดจากกัน — สร้าง “สตูดิโอ” หนึ่งรายต่อหนึ่งลูกค้า ไม่มีการยืมคลิปข้ามลูกค้า เพราะสิทธิ์คอนเทนต์เป็นของแต่ละราย · หนึ่งสตูดิโอมีช่อง YouTube ต้นทางได้หลายช่อง (เครือมติชนหรือเนชั่นมีเป็นสิบช่อง) และจากคลังเดียวกันสร้าง ช่อง FAST ได้หลายช่อง เลือกส่วนผสมคนละแบบเพื่อเทียบกัน

คลังคนละกอง
คลิปของลูกค้า A ห้ามโผล่ในผังลูกค้า B — มีเทสต์ล็อกไว้
กฎการดูดคนละชุด
กฎผูกกับช่อง YouTube รายช่อง ช่องข่าวรายวันกับช่องสารคดีของเครือเดียวกันใช้กฎคนละแบบ
เทียบข้ามรายได้
เติมผังได้กี่ % · repeat factor เท่าไหร่ · คลังพอกี่วัน
04

คลิปจาก YouTube เข้ามาในระบบยังไง

ระบบไม่เก็บไฟล์วิดีโอ เก็บแต่ metadata ไฟล์จริงยังอยู่บน YouTube · ส่วนนี้คือกติกาว่าคลิปไหนได้เข้าคลัง ซึ่งเป็นจุดที่กินโควตา API และตัดสินคุณภาพของผังตั้งแต่ต้นทาง

  1. 1
    ดูก่อนดูด
    วางลิงก์ช่อง → ระบบถาม YouTube ว่าช่องนี้มีกี่คลิปและมีเพลย์ลิสต์อะไรบ้าง (ราว 2 หน่วยโควตา) พร้อมเตือนเพลย์ลิสต์ที่ชื่อคล้ายกันจนน่าจะเป็นรายการเดียวกัน
  2. 2
    ตั้งกฎการดูด แยกรายช่อง
    เลือกว่าจะเอาแค่ไหน: ทุกคลิปในช่อง · เฉพาะเพลย์ลิสต์ที่ติ๊ก · หรือผสม (เพลย์ลิสต์ทั้งกอง + คลิปอื่นย้อนหลัง N วัน) เพลย์ลิสต์ใหญ่ตั้งกรอบเวลาและเพดานคลิปรายเพลย์ลิสต์ได้ · สวิตช์ที่เห็นบนจอเสมอ: ไม่เอา Shorts · ไม่เอา Live archive · ตัดคลิปช่องอื่นที่ปนมาทิ้ง
  3. 3
    ประมาณการก่อนกด
    บอกว่าจะได้ราวกี่คลิปและใช้โควตาเท่าไหร่จาก 10,000 หน่วยต่อวัน แล้วค่อยตัดสินใจ
  4. 4
    ดูดหลังบ้าน
    กดแล้วเข้าหน้าสตูดิโอได้เลย ปิดหน้าเว็บได้ ระบบดูดต่อทีละช่อง คลิปทยอยโผล่ในคลัง
กฎแรกที่รับคลิปไว้ เป็นเจ้าของคลิปนั้น

กฎเดินจากบนลงล่าง คลิปที่โผล่ซ้ำในกฎหลังถูกข้าม — กฎที่รับไว้ก่อนเป็นตัวตั้งชื่อ Series ให้คลิปนั้น แก้ปัญหาคลิปเดียวอยู่หลายเพลย์ลิสต์ โดยให้ลูกค้าเป็นคนเรียงว่าเพลย์ลิสต์ไหนสำคัญกว่า

หาคลิปใหม่ — อัตโนมัติทุก 2 ชม.
เปิด uploads playlist จากบนสุด หยุดเมื่อถึงคลิปที่เก่ากว่าของใหม่สุดในคลัง → ปกติ 1 หน่วยโควตาต่อช่อง · ไม่ลบอะไรทั้งนั้น
ซิงก์เต็มตามกฎ — ยังต้องกดเอง
รันกฎทั้งชุดใหม่ ได้ของใหม่ และลบคลิปที่ไม่เข้ากฎแล้ว เพราะคลังต้องตรงกับกฎเป๊ะ · ยังไม่ปล่อยให้ cron ทำ เพราะต้องกันคลิปที่เคยออกอากาศไม่ให้ถูกลบก่อน

ข้อจำกัดของ API ที่ต้องรู้: YouTube กรองวันที่ฝั่ง server ไม่ได้ · uploads playlist เรียงใหม่→เก่าแน่นอน จึงหยุดสแกนกลางคันได้ = ลดโควตาได้จริง · แต่เพลย์ลิสต์ธรรมดาเรียงตามที่เจ้าของจัด ต่อให้เอาแค่ 3 เดือนล่าสุดก็ยังต้องเปิดครบทุกหน้า สิ่งที่ลดโควตาบนเพลย์ลิสต์ได้จริงมีอย่างเดียวคือเพดานจำนวนคลิป

05

ป้ายกำกับคลิป — 3 แกนที่ไม่เกี่ยวกัน

ข่าวรายวันคือของที่หมดอายุเร็วแต่เป็นรายการหลัก · ไฮไลต์ที่ตัดมาคือของไม่มีวันหมดอายุแต่เป็นแค่ของอุดเวลา — ถ้ายัดรวมเป็นป้ายเดียวจะตีกันทันที เลยแยกเป็นแกนอิสระ

kind — ชนิดของไฟล์
normal แนวนอนปกติ · short แนวตั้งหรือสั้นไม่เกิน 60 วิ (ขึ้นจอ 16:9 ต้องมีขอบดำ) · live ไฟล์ไลฟ์ย้อนหลัง (ยาวและมีช่วงรอก่อนเริ่ม)
role — บทบาทในผัง
คำนวณเองจากความยาว ไม่ต้องพึ่ง LLM: สั้นกว่า 5 นาที หรือเป็น Shorts → filler (อุดเศษเวลาเท่านั้น) ที่เหลือเป็น programme แกนของ Block
shelf life — อายุใช้งาน
นับจากวันอัป ยังฉายได้อีกกี่วัน: evergreen ไม่มีวันหมดอายุ · topical 30 วัน · daily 7 วัน — เอา 3 ระดับพอ ละเอียดกว่านี้ LLM สับสน

ผลกับผังโดยตรง: คลิปที่เลยอายุ ณ วันออกอากาศถูกตัดออกจากกองอัตโนมัติ ข่าววันนี้หลุดจากผังเองในวันที่ 8 ของ horizon โดยไม่ต้องมีใครไปลบ — และได้ประโยคที่ขายได้: “คลังนี้เลี้ยงช่องได้ 14 วันถ้าไม่อัปใหม่เลย แต่ Block ข่าวจะโหว่ตั้งแต่วันที่ 8”

ตัวเลขจากคลังจริง: เกินครึ่งของคลังดิบเป็น filler หรือ Shorts — ถ้าไม่แยกป้ายไว้ ผังจะเต็มไปด้วยคลิปสั้น

หมวดหมู่ — สิ่งที่ใช้ประกอบกอง
Block หยิบคลิปจากหมวดที่ระบุ จึงมีรสชาติเดียวกันตลอดช่วง · อายุใช้งานผูกกับหมวด แก้ที่หมวดเดียว คลิปทั้งกองเปลี่ยนตาม · หมวดเป็นของแต่ละสตูดิโอเอง ไม่ใช้ร่วมกัน
Series — รายการประจำ
มาจากชื่อเพลย์ลิสต์ตอนดูด หรืออ่านข้อความหลัง | ท้ายชื่อคลิปแล้วให้คนกดยืนยัน (ไม่ใช้ LLM) · เป็นแกนของขั้น “ไล่ตามตอน” และเป็นหน่วยที่ Autopilot ใช้ตัดสินหมวด
06

โครงสร้างผัง 3 ชั้น

Schedule Template   ผังแม่แบบ 24 ชม.
  └── Block         กล่องเวลามีชื่อ เช่น 13.00–16.00 "Today Update"  ← ผู้ชมเห็นบน EPG
        ├── Play Slot   คลิปจริง ยาวเท่าคลิป ไม่มี Cut ไม่มี Pad
        └── Ad Slot     ช่องโฆษณา ยาวตามความยาวคลิปที่เพิ่งเล่น

เจ้าของช่องจัดแค่ชั้น Block ตามเวลา ส่วนเนื้อข้างในระบบเติมให้เองตาม สูตรเติม — เพราะคลิปที่จะออกพรุ่งนี้ส่วนใหญ่ยังไม่ถูกอัปวันนี้ ถ้าให้คนจัดเองทุกวันคือกลับไปเป็นงานประจำที่ไม่มีใครทำไหว · ใน Block เดียวมีทั้งคลิปที่คนปักเอง (Pinned Slot) และคลิปที่ระบบเติม ปนกันได้

07

กอง · สูตรเติม · Cooldown

เนื้อในของ Block มาจาก สูตรเติม ที่เป็น ลำดับขั้น — ขั้นแรกอาจเป็น “ข่าวล่าสุด 1 คลิป” แล้วขั้นถัดไป “หมุนคลังสารคดีจนเต็ม” · แต่ละขั้นหยิบของจาก กอง ที่ตั้งไว้กลางระดับสตูดิโอ สูตรเดียวเอาไปแปะได้หลาย Block แก้ทีเดียวมีผลทุกที่

กอง (Pool)
หมวด · รายการประจำ · ช่องต้นทาง · ช่วงความยาว — และ เว้นซ้ำอยู่ที่กอง เพราะเป็นสมบัติของคอนเทนต์
ขั้น “คลิปล่าสุด”
ใหม่→เก่า สำหรับข่าว/ของหมดอายุเร็ว · ไม่มีของใหม่ก็ใช้ตัวล่าสุดที่มี แล้วขึ้นหมายเหตุ
ขั้น “หมุนคลัง”
เอาตัวที่ห่างจากรอบล่าสุดที่สุดก่อน + สลับไม่ให้หมวดเดียวกันติดกัน
ขั้น “ไล่ตามตอน”
ไล่ตอนของรายการประจำตามลำดับที่เจ้าของจัดไว้ — ไพรม์ไทม์
Block รีรัน
ชี้ไป Block ก่อนหน้าในวันเดียวกัน — เอาเหมือนเป๊ะ หรืออิงแค่ขั้นหลักแล้วของเติมหมุนใหม่
จัดเองรายวัน
เลือกคลิปเองเฉพาะวันนั้น ระบบยังเติมโฆษณา · แบ่งท่อน · ของอุดเศษเวลาให้เหมือนเดิม

กองหนึ่งระบุได้หลายหมวดและหลาย Series พร้อมกัน — ถ้าอยากให้รายการหนึ่งไปโผล่หลาย Block ให้ทำที่ฝั่งสูตร/Block ไม่ใช่ให้คลิปมีหลายหมวด (คลิปเดียวอยู่ 2 หมวดจะทำให้สัดส่วนหมวดต่อชั่วโมงนับซ้ำทันที)

Cooldown — ปุ่มที่ทีมจะปรับบ่อยที่สุด

cooldownDays: N = คลิปเดิมต้องห่างกันอย่างน้อย N วันก่อนกลับมาออกซ้ำ (ตั้งที่กอง เดินข้ามวันได้)
สั้น → คนดูเจอคลิปเดิมบ่อย · ยาว → ของสดกว่า แต่ถ้าคลังไม่พอ ระบบต้องไปหยิบของนอกกติกามาเติมแทน
นี่คือ trade-off หลักที่ simulator มีไว้ให้เห็นเป็นตัวเลขก่อนตัดสินใจ ไม่ต้องเดา

Resolve คือการรันสูตรเติมให้ได้ Play Slot จริง เกิดตอนใกล้ออกอากาศ ไม่ใช่ตอนวางผัง

08

เวลาถูกคุมที่ขอบ Block เท่านั้น

operator ไม่ปักเวลาจบของแต่ละ slot — slot ยาวเท่าคลิปจริงเสมอ ระบบเรียงต่อกันเอง ห้ามตัดคลิปกลางคันทุกกรณี (เป็นปัญหาแบรนด์ของเจ้าของคอนเทนต์ ไม่ใช่แค่ UX)

เศษเวลาท้าย Block แก้ตามลำดับ
  1. 1. Filler Pool — คลิปสั้นกว่า 5 นาทีและ Shorts ที่แยกกองไว้ (โปรโมท ไฮไลต์ teaser)
  2. 2. ยืด Ad Slot — กินเศษที่เหลือ ไม่เกินเพดาน maxStretchSec
  3. 3. ยอมล้นเข้า Block ถัดไป — ดีกว่าตัดคลิปทิ้ง

Absorbing Block = Block ที่ยอมหดเมื่อโดนล้นใส่ — เริ่มช้าแต่จบตรงเวลาเดิม ทำให้ drift ตายในบล็อกนั้น ไม่สะสมข้ามวัน · ทุกผังควรมีอย่างน้อย 1 อันต่อช่วง

09

แบ่งคลิปเป็นท่อน แล้วโฆษณาไปคั่นระหว่างท่อน

ตั้งรายช่องที่หน้า "โฆษณา" ของช่องนั้น (ช่องข่าวคลิปสั้นกับช่องสารคดีคลิป 2 ชม. จังหวะโฆษณาคนละแบบ) — ตารางเทียร์บอกว่าคลิปยาวเท่านี้ควรแบ่งท่อนละประมาณกี่นาที เบรกคั่นกี่วินาที และท้ายคลิปกี่วินาที

กฎการแบ่งท่อน (Segmentation)

จำนวนท่อน = ปัดใกล้สุดของ (ความยาวคลิป ÷ ท่อนละประมาณ) แล้วลดลงจนไม่มีท่อนสั้นกว่าขั้นต่ำ · ทุกท่อนยาวเท่ากัน เศษวินาทีตกที่ท่อนสุดท้าย
คลิป 50 นาที (ท่อนละ 20) → 3 ท่อน × 16:40 เบรก 2 ครั้ง · คลิป 22 นาที → 1 ท่อน ไม่มีเบรก
ไม่ขัดกติกา "ไม่มี Cut" เพราะเนื้อคลิปออกครบทุกวินาที แค่แบ่งการเล่นเป็นท่อน

ขนาดเบรกที่เลือกได้ = ขนาดที่มี Slate เตรียมไว้จริง (15 · 30 · 45 · 60 · 90 · 120 วินาที พร้อมลิงก์ M3U8) · Live In/Out Bumper ตั้งที่หน้าเดียวกัน แต่ใช้ตอนตัดเข้า-ออกไลฟ์ ไม่ใช่กับ ad break

09b

ผังต้องไม่มีจอดำ — เติมแบบคลายเงื่อนไข

Block ที่กติกาหลักหาของไม่พอจะไม่ปล่อยจอดำ — ระบบคลายเงื่อนไขทีละชั้น: กองเดิมของ Block แบบไม่บังคับ evergreen → คลังทั้งช่อง → ยอมเลี่ยง Cooldown (แต่ห้ามซ้ำภายในวันเดียวกัน)

ทุกชั้นที่ไม่ใช่กติกาหลักถูกนับเป็น "เติมนอกกติกา" และรายงานเป็นชั่วโมงคู่กับ "เติมได้ 100%" เสมอ — เลข 100% จะได้ไม่หลอกตา ถ้าตัวเลขนอกกติกาสูงแปลว่าแหล่งคอนเทนต์ของ Block แคบไปหรือ Cooldown ยาวเกินกำลังคลัง

10

ตัวเลขที่ระบบตอบให้ได้

Repeat factor
คลิปหนึ่งถูกเล่นซ้ำกี่ครั้ง และห่างกันน้อยสุดกี่วัน — วัดจาก horizon เต็ม 28 วัน
Fill completeness
แต่ละ Block เติมได้กี่ % ของเวลา และ Block ไหนขาดเป็นประจำ
สัดส่วนหมวดต่อชั่วโมงออกอากาศ
ช่องนี้กลายเป็นช่องข่าว หรือช่องสารคดี ดูจากผังจริง
คลังเลี้ยงช่องได้กี่วัน
นับเฉพาะคอนเทนต์หลัก ไม่รวม Filler และ Live archive ตัวเลขจึงไม่ถูกปั่นให้ดูดีเกินจริง
11

สถานะตอนนี้ และสิ่งที่ยังค้าง

เสร็จแล้ว — Resolve engine พร้อมชุดทดสอบ 32 เคส ครอบคลุมทั้ง 7 เคสบังคับใน PRD · สร้างสตูดิโอ + กฎการดูดรายช่อง + เพิ่มช่อง YouTube เข้าสตูดิโอเดิม · Autopilot จัดหมวดและเสนอ Block พร้อมเหตุผล · หน้าคลัง/รายการประจำ/หมวดหมู่/ตั้งค่า · แก้ผังเองได้จากหน้าช่อง (ชื่อ · เวลา · สูตรเติม · รอบรีรัน · แยกผังเสาร์–อาทิตย์) · กฎแบ่งท่อน + โฆษณา + Slate ตั้งรายช่องได้ · cron หาคลิปใหม่ทุก 2 ชม.
ยังค้าง — (1) หน้า As-run Log (สิ่งที่ออกอากาศจริง) + ล็อกอดีตรายวัน (2) ปักคลิปเองใน Block (Pinned Slot) + ปุ่ม "ทำไมคลิปนี้ถึงอยู่ตรงนี้" (3) ซิงก์เต็มรายวัน + ล็อกอดีตเป็นประวัติออกอากาศ + กันคลิปที่เคยออกอากาศไม่ให้ถูกลบ (4) ตัวจับคู่ไฮไลต์กับต้นฉบับ (6) คำไทยของ "Block"