สร้างวิดีโอ Animation
ด้วย JavaScript
เข้าใจหลักการทำงานเบื้องหลัง และวิธีสั่ง AI ให้สร้างวิดีโอแนว Motion Design ที่ Preview สวย และ Export ออกมาตรงกับที่เห็นจริง
ภาพรวม: เหมือนทำ "สมุดภาพพลิก" ด้วยโค้ด
เข้าใจแก่นของระบบใน 3 นาที
📖 แนวคิดหลัก
นึกถึงสมุดที่วาดรูปไว้ทุกหน้า แล้วพลิกเร็ว ๆ จนภาพดูเหมือนขยับได้ วิดีโอด้วย JavaScript ทำงานแบบเดียวกัน ต่างกันแค่ โค้ดวาดแต่ละหน้าให้อัตโนมัติ ประมาณ 30 หน้าต่อวินาที
เราจึงไม่ได้ "ตัดต่อวิดีโอ" แต่กำลัง เขียนคำสั่งบอกว่าแต่ละวินาทีมีอะไรอยู่ตรงไหนบนจอ ให้เบราว์เซอร์วาดตาม แล้วค่อยอัดออกมาเป็นไฟล์วิดีโอ
🧱 โครงสร้าง 5 ชั้นของระบบ
ข้อความ สี เวลา องค์ประกอบของทุกฉาก
นับเวลาตัวเดียว ส่งค่า t (วินาที) ให้ทุกส่วน
render(t) วาดทุกอย่างลง Canvas ตามเวลา
Web Audio นัดเสียงตามเวลาเดียวกัน
Canvas + Audio → Recorder → MP4
🎮 ลองเล่นดู: render(t) ทำงานอย่างไร
ลากแถบเวลาเพื่อดูว่า "ภาพ ณ วินาทีนั้น" หน้าตาเป็นอย่างไร ลากกลับไปกี่ครั้งก็ได้ภาพเดิม นี่คือหลักการที่ทำให้ Export ตรงกับ Preview
สิ่งที่เกิดขึ้นในเดโมนี้
- 0.2–0.9 วิ กระดาษเขียวเลื่อนเข้าจากซ้าย (Slide-in + Overshoot)
- 0.6–1.3 วิ กระดาษขาวเลื่อนเข้าจากขวา เป็นอีกเลเยอร์
- 1.4–1.9 วิ วงกลมถูก "แปะ" ลงมา เงาหดลงเหมือนวางลงบนฉาก
- 2.0 วิ~ ตัวอักษรตกลงมาทีละตัว (Stagger)
- 3.2 วิ~ ข้อความรองเลื่อนขึ้น
- ขอบกระดาษขรุขระสร้างด้วย
seeded randomจึงไม่เปลี่ยนรูปทุกเฟรม
ระบบทำงานเหมือน "กองถ่ายละคร" 5 ฝ่าย
คลิกการ์ดเพื่อข้ามไปอ่านแต่ละฝ่าย
ฝ่ายที่ 1: บทละคร (ข้อมูลซีน)
Scene Dataคือส่วนที่เขียนเก็บไว้ว่าวิดีโอมีกี่ฉาก แต่ละฉากเริ่มเมื่อไร มีข้อความอะไร ใช้ภาพอะไร เสียงอะไร
ทำไมต้องแยกออกมา: ถ้าบทปนอยู่กับโค้ดวาดภาพ เวลาจะเปลี่ยนแค่คำเดียวต้องไปค้นในโค้ดหลายร้อยบรรทัด แต่ถ้าแยกไว้ด้านบนสุด ก็แก้ได้เหมือนแก้ข้อความในตาราง
ถ้าไม่สั่ง: AI มักเขียนข้อความและตัวเลขเวลากระจายอยู่ทั่วโค้ด แก้ทีหนึ่งพังทีหนึ่ง
ฝ่ายที่ 2: ผู้กำกับถือนาฬิกา (Timeline)
Master Clockเป็นนาฬิกากลางเพียงเรือนเดียว ทุกฝ่ายถามเวลาจากที่นี่ที่เดียว
ทำไมสำคัญ: ลองนึกว่านักดนตรีในวงแต่ละคนนับจังหวะเอง เพลงจะเพี้ยนทันที เช่นเดียวกัน ถ้าภาพนับเวลาแบบหนึ่ง เสียงนับอีกแบบ เล่นไปสักพักเสียง "ปุ๊บ" จะดังก่อนหรือหลังข้อความโผล่
หลักสำคัญ: ใช้ "เวลา" ไม่ใช่ "จำนวนเฟรม"
ฝ่ายที่ 3: ช่างวาดฉาก (Renderer)
render(t) → Canvasคือฟังก์ชันที่รับเวลามา แล้ววาดภาพ ณ เวลานั้นออกมาทั้งจอ มีกติกา 3 ข้อ
กติกาข้อ 1: วาดบน Canvas
Canvas คือ "กระดาษวาดรูป" ในหน้าเว็บ ส่วนการใช้ HTML/CSS ทั่วไปเหมือน "ติดสติกเกอร์บนหน้าเว็บ" ตอน Preview ดูเหมือนกัน แต่ ตากล้องถ่ายได้แค่ Canvas
ถ้าใช้ CSS ทำ Animation พอกด Export จะได้จอดำหรือข้อความหาย
กติกาข้อ 2: วาดกี่ครั้งต้องได้ภาพเดิม
งานกระดาษต้องมีความ "ไม่เป๊ะ" เช่น ขอบขรุขระ ชิ้นกระดาษเอียงนิด ๆ ถ้าใช้การสุ่มธรรมดา ทุกครั้งที่วาดขอบกระดาษจะเปลี่ยนรูปไปเรื่อย ๆ ภาพจะสั่นแบบน่ารำคาญ และภาพตอน Export จะไม่ตรงกับตอน Preview
วิธีแก้คือ สุ่มแบบมีเลขตั้งต้น (Seed) เหมือนสับไพ่ด้วยวิธีเดิมทุกครั้ง ได้ผลที่ดู "สุ่ม" แต่ซ้ำเดิมได้
กติกาข้อ 3: สร้างความรู้สึก Stop Motion
งาน Stop Motion จริงถ่ายประมาณ 12 ภาพต่อวินาที เลยดูกระตุกนิด ๆ อย่างมีเสน่ห์ เคล็ดลับคือผสม 2 จังหวะ
ฝ่ายที่ 4: ทีมเสียง (Audio)
Web Audio APIใช้ Web Audio API ซึ่งเป็นเครื่องมือเสียงในเบราว์เซอร์ ทำได้ 2 แบบ
🎛️ สังเคราะห์เสียงด้วยโค้ด
เช่น เสียงกระดาษ สร้างจากเสียงซ่า (noise) แล้วกรองให้เหมือนกระดาษถู ข้อดีคือไม่ต้องหาไฟล์เสียง
🎵 ใช้ไฟล์เสียง
เหมาะกับเพลงประกอบ (BGM) เพราะเพลงที่สังเคราะห์ด้วยโค้ดมักฟังดูเรียบ ๆ
การผูกเสียงกับภาพ
เขียนในบทว่า "วินาทีที่ 1.8 → เสียง Pop" คู่กับ "วินาทีที่ 1.8 → ข้อความโผล่" ทั้งสองอ่านเวลาจากนาฬิกาเดียวกัน จึงตรงกันเสมอ
การตรงจังหวะเพลง (BPM)
ถ้าเพลงมีจังหวะ 120 BPM (120 บีทต่อนาที) แปลว่า 1 บีท = 0.5 วินาที ให้กระดาษแปะลงที่ 0.5, 1.0, 1.5 วินาที ภาพจะ "เต้นไปกับเพลง" ทันที
ข้อควรรู้: เบราว์เซอร์ไม่ยอมให้เว็บเปิดเสียงเองอัตโนมัติ ผู้ใช้ต้องกดปุ่มก่อน ปุ่ม Play จึงทำหน้าที่ "เปิดระบบเสียง" ไปด้วย
ฝ่ายที่ 5: ตากล้อง (Export)
Recorder → MP4มี 3 วิธี เรียงจากง่ายไปยาก
อัดแบบเรียลไทม์
- เบราว์เซอร์ "ถ่าย" Canvas และเสียงพร้อมกันขณะเล่น
- วิดีโอ 40 วิ ต้องรอ 40 วิ
- ห้ามสลับแท็บระหว่างอัด
- Chrome/Edge รุ่นใหม่และ Safari มักได้ MP4 เลย บางเครื่องได้ WebM
แปลงในเบราว์เซอร์
- อัด WebM แล้วแปลงเป็น MP4 ด้วย ffmpeg.wasm
- ไม่ต้องติดตั้งอะไร
- ต้องโหลดไฟล์ประมาณ 30 MB และช้าบนเครื่องสเปกต่ำ
เรนเดอร์ทีละเฟรม
- ให้โปรแกรมสั่งวาดทีละเฟรม ถ่ายเก็บ แล้วรวมเป็นวิดีโอ
- ไม่มีเฟรมตกเลย
- ต้องติดตั้ง Node.js และ ffmpeg
สิ่งที่ควรสั่ง: "ลองวิธี A แบบ MP4 ก่อน ถ้าเบราว์เซอร์ไม่รองรับ ให้อัดเป็น WebM แล้วแปลงเป็น MP4 อัตโนมัติ"
ศัพท์ที่ควรรู้ (อธิบายแบบบ้าน ๆ)
พิมพ์ค้นหาคำที่สงสัยได้เลย
หลักการสั่งงาน 10 ข้อ
แต่ละข้อตอบ 3 คำถาม: คืออะไร → ทำไมต้องบอก → สั่งอย่างไร
เคล็ดลับ: ข้อ 5 (ท่าเคลื่อนไหว) กับข้อ 7 (เสียง) ควรเขียนเป็น "คู่" กัน เช่น กระดาษแปะลงฉาก → เสียงแปะ AI จะผูกเสียงกับภาพได้แม่นขึ้นมาก
ขั้นตอนทำงานจริง 5 ขั้น
แบ่งสั่งเป็นรอบ คุมผลลัพธ์ได้ดีกว่าสั่งทีเดียวจบ
เตรียมเนื้อหา
- เขียนสิ่งที่อยากสื่อสั้น ๆ เป็นข้อ ๆ
- วิดีโอ 30–45 วินาที ควรมีประมาณ 4–7 ฉาก ฉากละ 5–8 วินาที
- แต่ละฉากควรมี 1 ใจความเดียว
ขอ Storyboard ก่อน (ยังไม่เขียนโค้ด)
ทำไมต้องทำขั้นนี้: แก้ตารางใช้เวลา 1 นาที แต่แก้โค้ดที่สร้างผิดทั้งเรื่องใช้เวลาเป็นชั่วโมง
ตรวจ Storyboard ด้วยคำถาม
สั่งสร้างไฟล์
ดู Master Prompt ฉบับเต็มได้ที่แท็บ "7 Master Prompt"
ตรวจงาน
เปิดไฟล์ในเบราว์เซอร์ แล้วเช็กทีละข้อ
สั่งแก้ทีละจุด
ระบุ ฉากไหน + อะไร + เปลี่ยนเป็นอะไร + ห้ามแตะส่วนไหน
ปัญหาที่เจอบ่อย และประโยคสั่งแก้
เจออาการไหน คัดลอกประโยคไปสั่งได้ทันที
➕ สิ่งที่ควรเพิ่มใน Prompt ตั้งแต่แรก
1. "วาดทุกอย่างลง Canvas"
ถ้าไม่สั่ง AI มักทำด้วย DOM + CSS ซึ่ง Preview สวย แต่ Export ได้จอดำ
2. "รอ Font Kanit โหลดเสร็จก่อนวาด"
ใช้ document.fonts.load() ไม่อย่างนั้นเฟรมแรก ๆ จะเป็นฟอนต์ระบบ
3. "สร้าง SFX ด้วย Web Audio"
ไม่ต้องหาไฟล์เสียงเพิ่ม และเตรียมช่องใส่ไฟล์ BGM ของตัวเองได้
4. "เริ่มเสียงหลังผู้ใช้กดปุ่ม"
เบราว์เซอร์บล็อกเสียงที่เล่นเองอัตโนมัติ
5. "ใช้ seeded random"
เพื่อให้ Preview กับ Export ตรงกัน
6. "แสดง progress ระหว่าง Export"
และเตือนห้ามสลับแท็บ เพราะการอัดเรียลไทม์จะหยุดเมื่อแท็บไม่แสดงผล
7. "มีแถบ Timeline ลากดูได้"
เลื่อนไปดูฉากใดก็ได้ตอนตรวจงาน ประหยัดเวลาแก้ไขมาก
Master Prompt Template
คัดลอกไปใช้ได้ทันที แก้เฉพาะค่าใน [ ]
🗂️ ตัวอย่างข้อมูลซีนที่ควรได้
เมื่อโค้ดออกมาถูกหลัก ส่วนที่ต้องแก้จะมีหน้าตาประมาณนี้ และไม่ต้องแตะ Logic ส่วนอื่นเลย
เวลาสอนหรือส่งให้ลูกค้า การชี้ให้เห็นว่า "แก้แค่ตรงนี้ วิดีโอเปลี่ยนทั้งเรื่อง" เป็นจุดที่คนเข้าใจคุณค่าของวิธีนี้ได้เร็วที่สุด
Checklist ก่อนกดส่ง Prompt
ติ๊กให้ครบ 10 ข้อ ผลลัพธ์จะออกมาตรงใจมากขึ้น
สรุปใน 1 ประโยค
วิดีโอด้วย JavaScript คือการเขียน "บท" ที่บอกว่าแต่ละวินาทีมีอะไรบนจอ แล้วให้นาฬิกาเรือนเดียวคุมทั้งภาพและเสียง — การสั่งงานที่ดีคือบอกครบทั้ง 5 ฝ่ายของกองถ่าย โดยเฉพาะ "วาดลง Canvas" และ "ใช้นาฬิกาเดียว"