#standards#video#playwright#ffmpeg#process
ผลิตวิดีโอสอนใช้งาน YouTube 1440p
เอกสาร KMS นี้กำหนดวิธีทำวิดีโอสอน SML AI Account ให้ตัวหนังสือบนจออ่านออกทุกตัว ดูเหมือนคนจริงเล่น และมี motion graphic คั่นบท ตัวอย่างงานแรกคือคลิป "สอนใช้หน้าจอสินค้า + บาร์โค้ด" ที่ media/product-video/ (ต่อยอดจาก media/demo-video/)
กฎ/วิธีทำ
- สเปกภาพ: viewport 1920×1080 +
deviceScaleFactor4/3 ได้ภาพจริง 2560×1440 (ห้ามตั้ง viewport 2560 ตรงๆ เพราะตัวหนังสือจะเล็ก) ส่งออก 30fps, H.264 High, CRF 16–18, AAC 320k,yuv420pbt709 - เสียงพากย์: ElevenLabs เสียงไทย normalize −14 LUFS; คีย์ API ส่งผ่าน env
ELEVENLABS_API_KEYเท่านั้น ห้ามเขียนลงไฟล์/log/โน้ต - ซับไทย: ไฟล์
.ass+ filterass=...:shaping=complex(PlayResX 2560/PlayResY 1440) เพราะsubtitles=/drawtextทำวรรณยุกต์หาย; ข้อความ motion graphic เรนเดอร์จาก HTML/CSS ใน Chrome เพื่อให้สระ/วรรณยุกต์ไทยถูกต้อง - ภาพประกอบใช้จอจริงเท่านั้น ห้ามสร้างภาพจากบริการภายนอก
- ข้อมูลที่อัด: อัดจากฐานเดโม
smldemoเท่านั้น (ทุกฉาก) ฉากเพิ่ม/แก้ใช้รหัสทดลองขึ้นต้นVDO-แล้วลบทิ้งหลังอัดเสร็จ - ห้ามแสดงข้อมูลลูกค้าจริงในวิดีโอเด็ดขาด (ชื่อกิจการ ภาพ ตัวเลข ชื่อสินค้า/คู่ค้า ในบท, motion graphic และภาพปก) หน้าจอเลือกกิจการที่มีชื่อลูกค้าต้องตัดหรือเบลอ
- เนื้อหาภาษี/บัญชี ในบทต้องตรวจกับแหล่งทางการก่อน (เคยพลาดอ้างมาตราผิดจาก AI จนต้องตัดทิ้ง)
ขั้นตอนผลิต
script.md -> tts.mjs -> tts/*.pcm + tts.json
scout.mjs -> shots/*.png (สำรวจจอจริง ตัดเมนูที่ยังเป็นจอ generic ออกจากบท)
record.mjs -> clips/<ฉาก>.mp4 + .json (marks + เหตุการณ์ click/key)
mograph/*.html -> render-mg.mjs -> mg/<ฉาก>.mp4
build.mjs -> ต่อฉาก + ซูม + ซับ + พากย์ + เสียงคลิก/คีย์ -> final.mp4
- บท: 1 ฉาก = 1 ย่อหน้า
>ใช้{แสดง|อ่าน}กำหนดเสียงอ่านคำอังกฤษ/ตัวเลข ทุกบทเริ่มจากปัญหาหน้าร้าน → ทำบนจอ → สรุป 1 บรรทัด - ดูเหมือนคนเล่น: เมาส์ easeInOutCubic 450–900 ms หยุดค้าง 300–600 ms ก่อนคลิก พิมพ์ทีละตัวจังหวะสุ่ม ±40% (พิมพ์ผิดแล้ว Backspace ได้ไม่เกิน 1–2 ครั้งทั้งคลิป) เสียงคลิก/คีย์สังเคราะห์ด้วย JS ใน
build.mjsเบากว่าพากย์ราว 18 dB - Motion graphic:
render-mg.mjsหยุด animation ทั้งหมดแล้วเลื่อนcurrentTimeทีละ 1/30 วินาที ถ่ายภาพเข้า ffmpeg; ชุดมาตรฐาน Title card, Chapter card, Callout, Key badge โทนสีแบรนด์ emerald บนพื้นมืด - ช่วงรอโหลดเกิน 1.5 วินาที เร่ง 3–5 เท่าตอนประกอบ (ไม่ต้องอัดใหม่)
คำสั่งตัวอย่าง (จาก media/product-video)
node scout.mjs # ถ่ายจอจริงทุกเมนูในบท
node render-mg.mjs s01-title # motion graphic ฉากเปิด
node tts.mjs # พากย์ (ต้องตั้ง ELEVENLABS_API_KEY ใน env ก่อน)
node record.mjs report # กลุ่ม report เปิด Chrome แบบมีหน้าต่าง (headless แสดง PDF ไม่ได้)
node record.mjs cleanup # ลบสินค้า VDO-xxxx หลัง build ผ่านแล้ว
node build.mjs # -> sml-product-barcode-1440p.mp4
ตรวจก่อนส่ง (ห้ามข้าม)
ffprobeได้ 2560×1440, 30fps, มีภาพและเสียง ความยาวตรงแผน- ดึงเฟรมทุกบทมาดู: ตัวหนังสืออ่านออก ซับไม่บังจุดที่พูด สระ/วรรณยุกต์ไม่ลอย
loudnormวัดได้ −14 ±1 LUFS และเสียงคลิกไม่กลบพากย์- ทุกเฟรมต้องเป็นกิจการเดโม ไม่มีข้อมูลลูกค้าจริง/รหัสผ่าน/token บนจอ
ข้อจำกัดและจุดต้องรู้ของจอจริง
- เมาส์/คีย์เป็น event จำลองใน Chrome (เคอร์เซอร์วาดเอง) และเสียงคีย์เป็นเสียงสังเคราะห์; ElevenLabs อ่านเลขเมนู/รหัสสินค้าไม่เป็นธรรมชาติ จึงต้องใช้
{แสดง|อ่าน} - บันทึกสินค้าต้องมีคลังอย่างน้อย 1 แถว (กด
All WareHouseก่อนบันทึก); ปุ่มแก้ไขมีกล่องยืนยันที่ต้องกดก่อน; หน้ารายงานต้องกดปุ่มค้นหาตัวกรองจึงมีผล - ไฟล์ 1440p ใหญ่ราว 1.5–2 GB ต่อ 15 นาที
- ตรวจแล้ว: โฟลเดอร์
media/product-video/(สคริปต์scout/record/build/render-mg/tts) และvideo-promo/node_modules/playwrightมีอยู่จริง; เอกสารระบุให้ใช้ skillffmpegระดับเครื่อง (ไม่ได้อยู่ใน repo)
ที่มา
docs/kms/video-tutorial-production.md§1–§10 (ละส่วนแผนบทรายละเอียดของคลิปตัวอย่างและค่าเชื่อมต่อ)
ดูเพิ่ม
สารบัญมาตรฐานและกฎเหล็กของ SML Ai Account (Standards Overview) · UAT Swarm 32 บอท: คำสั่ง DSL และกติกาผู้ทดสอบขี้สงสัย (UAT Swarm DSL, Skeptical Tester) · กฎขอบเขตงานและกฎเหล็กประจำ repo (Repo Scope & Iron Rules) · ภาพรวมกลุ่ม process ของ Backend (Process overview)