สร้างและตัดต่อคลิปด้วย Claude
ตั้งแต่ศูนย์ถึง MP4
Claude ไม่ใช่โปรแกรมตัดต่อที่มีไทม์ไลน์ให้ลากวาง แต่เป็นผู้กำกับและช่างตัดต่อที่เขียนสคริปต์ สั่งเครื่องมือ และประกอบทุกอย่างเป็นคลิปให้ คุณแค่บอกว่าอยากได้อะไรด้วยภาษาธรรมดา
ทำคลิปด้วย Claude มี 2 เส้นทาง
Claude ทำงานผ่านเครื่องมือที่เรียกใช้ได้ ทั้งโปรแกรมตัดต่อผ่านคำสั่ง บริการสร้างเสียงและภาพ และเบราว์เซอร์เบื้องหลังที่ใช้เรนเดอร์หน้าเว็บเป็นวิดีโอ เลือกเส้นทางตามชนิดคลิปที่อยากได้
ตัดต่อฟุตเทจและเสียงพากย์
- ใช้ภาพหรือวิดีโอ stock และภาพที่ AI สร้าง
- FFmpeg ทำหน้าที่ตัด ต่อ ซ้อนเสียง ใส่ซับ
- เหมาะกับคลิปขายของ คลิปเล่าเรื่อง คลิปสั้นแนวไวรัล
- ไม่ต้องเขียนโค้ดเอง Claude เขียนและรันให้
สร้างภาพทั้งคลิปด้วยโค้ด
- HTML, SVG, Canvas, WebGL วาดภาพทุกเฟรม
- เรนเดอร์ผ่าน headless browser แล้วรวมด้วย FFmpeg
- เหมาะกับคลิปอธิบาย อินโฟกราฟิก ตัวหนังสือเคลื่อนไหว
- คุมทุกพิกเซล แก้ตัวเลขแล้วเรนเดอร์ใหม่ได้ทันที
จากไอเดียถึงไฟล์ 4 ช่วงใหญ่
วางโครงและสคริปต์
เป้าหมาย ผู้ชม Hook CTA และบทพูด
เสียงและภาพ
เสียงพากย์ ฟุตเทจ หรือกราฟิกจากโค้ด
ประกอบและเรนเดอร์
ตัด ต่อ ซับ เพลง แล้วออกเป็น MP4
ตรวจและเก็บเป็น Skill
เช็กลิสต์ แก้เป็นจุด แล้วบันทึกสไตล์ไว้
9 ขั้นตอน ตัดต่อฟุตเทจ ด้วย Claude
เรียงตามลำดับที่ควรทำจริง แต่ละขั้นมีตัวอย่างคำสั่งที่กดคัดลอกไปใช้ได้ทันที และคีย์เวิร์ดที่ควรใส่ในคำสั่ง
กำหนดเป้าหมายและโครงสร้างคลิปก่อนสั่งงาน
ความผิดพลาดที่พบบ่อยที่สุดคือสั่งว่า "ทำคลิปให้หน่อย" แล้วหวังให้ Claude เดาให้ถูก ก่อนเริ่มควรตอบให้ได้ 5 ข้อ คือ คลิปนี้เล่าเรื่องอะไร ใครคือผู้ชม ต้องการให้ผู้ชมทำอะไรหลังดูจบ (Call to Action) แพลตฟอร์มไหน (TikTok, Reels, Shorts ใช้แนวตั้ง 9:16 ส่วน YouTube ปกติใช้ 16:9) และความยาวเท่าไร คลิปสั้นแนวไวรัลมักอยู่ที่ 30-60 วินาที
โครงที่ใช้ได้ผลคือ Hook (3 วินาทีแรกที่ดึงให้หยุดดู) → Pain Point (ปัญหาของผู้ชม) → Solution (วิธีแก้) → Proof (ตัวเลขหรือตัวอย่างจริง) → CTA (ให้ทำอะไรต่อ)
ตัวอย่างคำสั่ง
ฉันจะทำคลิปแนวตั้ง 9:16 ความยาว 45 วินาที เรื่อง "3 วิธีใช้ AI ลดเวลาทำรายงานจาก 3 ชั่วโมงเหลือ 20 นาที" กลุ่มเป้าหมายคือพนักงานออฟฟิศ โทนเป็นที่ปรึกษา ไม่ใช่เซลส์ ช่วยเสนอโครงคลิปแบบ Hook → Pain Point → Solution → Proof → CTA พร้อมเวลาของแต่ละช่วง
เตรียมเครื่องมือให้ Claude ทำงานได้จริง
Claude ตัดต่อวิดีโอได้เมื่อมี "มือ" คือเครื่องมือที่เรียกใช้ได้ โดยทั่วไปใช้ Claude ในโหมดที่เข้าถึงไฟล์และสั่งรันคำสั่งได้ (เช่น Claude Cowork หรือ Claude Code) ซึ่งมี FFmpeg เป็นโปรแกรมตัดต่อผ่านคำสั่งที่ทรงพลังที่สุด ใช้ตัด ต่อ ซ้อนเสียง ใส่ซับ และเปลี่ยนขนาดคลิปได้ทั้งหมด
ถ้าต้องการภาพ เสียงพากย์ และเพลง ให้เชื่อมต่อบริการภายนอกผ่าน MCP Connector เช่น คลังภาพและฟุตเทจ ระบบสร้างเสียงพากย์ (Text-to-Speech) และเครื่องมือสร้างภาพ AI ส่วนงานที่ทำซ้ำบ่อย ควรทำเป็น Skill คือชุดคำแนะนำที่บันทึกสไตล์คลิปของคุณไว้ เรียกใช้ครั้งต่อไปได้ทันทีโดยไม่ต้องอธิบายใหม่
ตัวอย่างคำสั่ง
ตรวจสอบว่าในเครื่องนี้มี ffmpeg และ Python พร้อมใช้งานไหม ถ้ายังไม่มีให้ติดตั้ง แล้วบอกฉันว่ามี connector อะไรที่ใช้สร้างเสียงพากย์และหาภาพ stock ได้บ้าง
ให้ Claude เขียนสคริปต์พร้อมแบ่งฉาก (Storyboard)
เมื่อได้โครงแล้ว ให้ Claude เขียนสคริปต์เป็นประโยคพูดจริง ไม่ใช่ภาษาเขียน และแบ่งเป็นฉาก ๆ โดยระบุว่าแต่ละฉากพูดอะไร ใช้ภาพอะไร และมีตัวหนังสือบนจอว่าอะไร ข้อควรระวังคือประโยคภาษาไทยที่อ่านออกเสียงต้องไม่ยาวเกินไป โดยทั่วไปคนไทยพูดราว 3-4 พยางค์ต่อวินาที คลิป 45 วินาทีจึงควรมีสคริปต์ไม่เกินประมาณ 120-150 คำ
ให้ Claude นับเวลาให้ด้วยจะช่วยลดการแก้ภายหลัง และควรใส่ตัวเลขที่จับต้องได้ เช่น "ประหยัด 2 ชั่วโมง 40 นาที" แทนคำกว้าง ๆ อย่าง "ประหยัดเวลามาก"
ตัวอย่างคำสั่ง
เขียนสคริปต์คลิป 45 วินาทีตามโครงด้านบน เป็นภาษาพูดแบบที่ปรึกษาธุรกิจ แสดงผลเป็นตาราง Storyboard คอลัมน์: ฉากที่ | เวลา | บทพูด | ภาพประกอบ | ข้อความบนจอ เน้นตัวเลขที่ชัดเจน ประโยคละไม่เกิน 15 คำ และ Hook ต้องไม่เกิน 3 วินาที
สร้างเสียงพากย์ (Voiceover)
เมื่อสคริปต์ผ่านแล้ว ให้ Claude ส่งบทพูดไปยังเครื่องมือสร้างเสียง TTS แล้วบันทึกเป็นไฟล์เสียง (.mp3 หรือ .wav) สิ่งที่ควรกำหนดคือ ภาษา เพศและโทนเสียง ความเร็วในการพูด และอารมณ์ เช่น มั่นใจ เป็นกันเอง จริงจัง
หลังได้ไฟล์เสียงแล้ว ให้ Claude วัดความยาวจริงของเสียงแต่ละประโยคด้วย เพราะข้อมูลนี้จะใช้กำหนดจังหวะการเปลี่ยนฉากในขั้นตัดต่อ และควรฟังตรวจคำอ่านผิด เช่น ชื่อแบรนด์ ตัวย่อ หรือตัวเลข แล้วสั่งสร้างเฉพาะประโยคที่ผิดซ้ำ ไม่ต้องสร้างทั้งคลิปใหม่
ตัวอย่างคำสั่ง
สร้างเสียงพากย์ภาษาไทยจากบทพูดทั้งหมด เสียงผู้ชาย โทนมั่นใจแต่เป็นกันเอง ความเร็วปกติ แยกไฟล์เสียงเป็นรายประโยค ตั้งชื่อ vo_01.mp3, vo_02.mp3 ... แล้ววัดความยาวของแต่ละไฟล์ (วินาที) สรุปเป็นตารางให้ฉัน
รวบรวมภาพและฟุตเทจประกอบ
คลิปที่ดูแพงมักมาจากภาพที่ตรงกับคำพูดทุกจังหวะ ให้ Claude ค้นหาและดาวน์โหลดภาพหรือวิดีโอ stock ตามบทพูดแต่ละฉาก โดยบอกคีย์เวิร์ดภาษาอังกฤษให้ชัด เพราะคลังภาพส่วนใหญ่ค้นด้วยภาษาอังกฤษได้ผลดีกว่า ควรระบุแนวตั้ง (vertical/portrait) เพื่อไม่ต้องครอปทีหลัง และกำหนดสไตล์ภาพให้สอดคล้องกันทั้งคลิป เช่น โทนสีน้ำเงินกรมท่าและขาว ภาพสะอาด
ถ้าไม่มีภาพที่ต้องการ ให้ใช้การสร้างภาพด้วย AI แทนได้ โดยเขียน prompt ที่ระบุตัวแบบ มุมกล้อง แสง และสไตล์
ตัวอย่างคำสั่ง
ค้นหาฟุตเทจแนวตั้งสำหรับแต่ละฉากตาม Storyboard ฉาก 1: "stressed office worker laptop night" ฉาก 2: "clock time passing desk" ฉาก 3: "AI assistant dashboard laptop" เลือกคลิปความยาวอย่างน้อย 5 วินาที โทนสีเย็น ภาพสะอาด แล้วดาวน์โหลดไว้ในโฟลเดอร์ footage/
ตัดต่อและประกอบฉากด้วย FFmpeg
ขั้นนี้คือหัวใจของการตัดต่อ Claude จะเขียนคำสั่งหรือสคริปต์ให้ทำ 4 อย่างหลัก คือ ตัด (trim) ฟุตเทจให้ยาวเท่าเสียงพากย์ของแต่ละฉาก ปรับขนาด (scale/crop) ให้เป็น 1080×1920 ต่อ (concat) ทุกฉากเข้าด้วยกัน และ ซ้อนเสียง (mix) เสียงพากย์กับวิดีโอ
หากต้องการกราฟิกที่ซับซ้อนกว่านั้น เช่น ตัวหนังสือเคลื่อนไหว ตัวนับเลข หรือกล่องข้อความ Claude สามารถสร้างเป็นหน้า HTML ที่ใช้แอนิเมชันแล้วเรนเดอร์ออกเป็นวิดีโอได้ (ดูภาคที่ 2) ทางที่ดีให้สั่งแบบแบ่งงานเป็นขั้น ๆ และขอดูตัวอย่างความยาวรวมเทียบกับเสียงพากย์ก่อนไปขั้นต่อไป
ตัวอย่างคำสั่ง
ประกอบคลิปตาม Storyboard: ตัดฟุตเทจแต่ละฉากให้ยาวเท่ากับเสียง vo_XX ของฉากนั้น ปรับเป็น 1080x1920 (ครอปกึ่งกลาง) ใส่ fade 0.3 วินาทีระหว่างฉาก ต่อทุกฉากแล้วซ้อนเสียงพากย์ ได้ไฟล์ draft_v1.mp4 ที่ 30 fps
คำสั่ง FFmpeg ที่ Claude จะรันให้ (ไม่ต้องพิมพ์เอง)
# ตัดฉากให้ยาว 4.2 วินาที ครอปเป็น 1080x1920 และตัดเสียงเดิมออก ffmpeg -i footage/scene1.mp4 -t 4.2 \ -vf "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920" \ -an out/scene1.mp4 # ซ้อนเสียงพากย์ลงบนวิดีโอที่ต่อฉากเสร็จแล้ว ffmpeg -i draft_silent.mp4 -i voiceover.mp3 \ -c:v copy -c:a aac -shortest draft_v1.mp4
ใส่ซับไตเติล ตัวหนังสือเน้นคำ เพลง และเสียงประกอบ
คนดูคลิปสั้นจำนวนมากดูโดยปิดเสียง ซับไตเติลจึงสำคัญ ให้ Claude สร้างซับจากบทพูดและเวลาจริงของเสียง โดยตัดเป็นท่อนสั้น 1-2 บรรทัด ใช้ฟอนต์ไทยที่อ่านง่าย เช่น Kanit หรือ Prompt ขนาดใหญ่ มีขอบหรือพื้นหลังให้อ่านชัดบนทุกภาพ แล้วเน้นสีเฉพาะคำสำคัญ เช่น ตัวเลขหรือชื่อเครื่องมือ
จากนั้นเพิ่ม เพลงประกอบ (ลดเสียงให้ต่ำกว่าเสียงพูดมาก โดยทั่วไปราว -18 ถึง -22 dB) และ เอฟเฟกต์เสียง (SFX) เบา ๆ ตอนเปลี่ยนฉากหรือขึ้นตัวเลข ใช้พอดี ไม่ต้องใส่ทุกจุด
ตัวอย่างคำสั่ง
ใส่ซับไตเติลภาษาไทยจากบทพูด ฟอนต์ Kanit ตัวหนา ขนาดใหญ่ ขอบดำบาง วางกึ่งกลางล่าง เน้นคำที่เป็นตัวเลขด้วยสีเหลือง ใส่เพลงประกอบจังหวะสบาย ๆ ลดเสียงเหลือ -20 dB และเพิ่มเสียง whoosh สั้น ๆ ตอนเปลี่ยนฉาก ได้ไฟล์ draft_v2.mp4
ตรวจงานอย่างเป็นระบบแล้วสั่งแก้เป็นจุด
เมื่อได้ draft แล้ว ให้ Claude ตรวจเช็กลิสต์ก่อน ได้แก่ เฟรมแรกต้องมีภาพเต็ม ไม่เป็นจอดำหรือว่าง ความยาวรวมตรงเป้า เสียงพูดไม่ถูกเพลงกลบ ซับไม่หลุดขอบจอหรือถูกปุ่มของแพลตฟอร์มบัง ตัวเลขและชื่อสะกดถูกต้อง และไม่มีภาพที่ไม่เกี่ยวกับเนื้อหา
จากนั้นคุณดูเองแล้วสั่งแก้แบบเจาะจงเป็นเวลาหรือฉาก เช่น "วินาทีที่ 12-15 ซับเล็กไป" ซึ่งได้ผลดีกว่าบอกว่า "ปรับให้สวยขึ้น" มาก และแต่ละรอบให้ตั้งชื่อไฟล์ตามเวอร์ชัน (v1, v2, v3) เพื่อย้อนกลับได้
ตัวอย่างคำสั่ง
ตรวจ draft_v2.mp4 ตามเช็กลิสต์: เฟรมแรกเต็มภาพ, ความยาว 45±2 วินาที, เสียงพูดชัดกว่าเพลง, ซับอยู่ใน safe zone สรุปปัญหาที่พบเป็นข้อ ๆ แล้วแก้ให้เลย แก้เพิ่ม: ฉากที่ 3 ขยายตัวเลข "20 นาที" ให้ใหญ่ขึ้น 1.5 เท่า และค้างบนจอเพิ่ม 1 วินาที
บันทึกขั้นตอนเป็น Skill เพื่อทำซ้ำได้ทันที
เมื่อได้คลิปที่พอใจแล้ว อย่าปล่อยให้ความรู้ทั้งหมดอยู่แค่ในแชต ให้สั่งให้ Claude สรุปสไตล์ที่ใช้เป็น Skill เช่น สีและฟอนต์ ขนาด ความยาวมาตรฐาน โครงเรื่อง ค่าเสียง ระดับเพลง และกฎที่ได้จากการแก้งาน (เช่น เฟรมแรกต้องเป็นปกเต็มเสมอ)
คลิปครั้งต่อไปคุณเหลือแค่ใส่หัวข้อใหม่ ส่วนที่เหลือเป็นขั้นตอนเดิมที่ Claude ทำตามกฎเดิม ช่วยให้คลิปทั้งซีรีส์มีหน้าตาสม่ำเสมอ และลดเวลาทำงานต่อคลิปลงมาก
ตัวอย่างคำสั่ง
สรุปวิธีทำคลิปนี้ทั้งหมดเป็น Skill สำหรับทำคลิปแนวตั้งสไตล์เดียวกัน ใส่: ขนาดและ fps, ฟอนต์และสี, โครงเรื่อง, ค่าเสียงและระดับเพลง, เช็กลิสต์ตรวจงาน และกฎที่เราแก้กันระหว่างทาง ตั้งชื่อ Skill ว่า "คลิปสั้นสไตล์ที่ปรึกษา"
สั่งทีละขั้นและตรวจผลทุกขั้น ดีกว่าสั่งทั้งหมดในประโยคเดียว เพราะถ้าเสียงหรือสคริปต์ผิดแล้วไปต่อ จะต้องแก้ย้อนหลังทั้งคลิปหลักการทำงานของภาคที่ 1 ต่อเนื่องไปถึงภาคที่ 2
สร้างคลิปด้วย โค้ด JavaScript, HTML, WebGL
ใช้แทนการตัดต่อด้วยฟุตเทจ stock คือให้ Claude เขียนโค้ดวาดภาพและแอนิเมชันทั้งคลิป แล้วแปลงเป็นวิดีโอ เหมาะกับคลิปอธิบาย อินโฟกราฟิก ตัวหนังสือเคลื่อนไหว ตัวเลขนับขึ้น ไดอะแกรมเวิร์กโฟลว์ และ Motion Graphics ข้อดีคือคุมทุกพิกเซล ทำซ้ำได้ และไม่ต้องพึ่งคลังภาพ
เลือกเทคนิคให้เหมาะกับงาน
ไม่จำเป็นต้องใช้ WebGL ทุกงาน ให้เลือกตามความซับซ้อนที่ต้องการ หลักง่าย ๆ คือเริ่มจาก HTML + CSS + GSAP ก่อน ซึ่งครอบคลุมคลิปอธิบายส่วนใหญ่ แล้วค่อยเพิ่ม Canvas หรือ WebGL เฉพาะฉากที่ต้องการความอลังการ
| เทคนิค | เหมาะกับ | ข้อสังเกต |
|---|---|---|
| HTML + CSS | ข้อความ กล่อง การ์ด ซับไตเติล | ทำเร็วที่สุด ตัวหนังสือไทยสวยคมเพราะใช้ฟอนต์เว็บได้ตรง |
| SVG | ไอคอน เส้นลายมือ ไดอะแกรม ลูกศร | ภาพเวกเตอร์ ขยายไม่แตก เหมาะกับเส้นที่ค่อย ๆ วาด |
| Canvas 2D | กราฟ อนุภาค ตัวนับ ภาพวาดที่คุมเอง | วาดทีละเฟรมด้วยโค้ด ควบคุมละเอียด |
| GSAP | จัดลำดับแอนิเมชันบนไทม์ไลน์ | เหมาะกับการเรนเดอร์เป็นวิดีโอ เพราะกระโดดไปเวลาไหนก็ได้ |
| Three.js / WebGL | วัตถุ 3 มิติ เอฟเฟกต์แสง พื้นหลังเคลื่อนไหว | ได้ภาพระดับ Motion Graphics แต่ตั้งค่าเรนเดอร์ยากกว่า |
| GLSL Shader | พื้นหลังไล่สีไหล ๆ เอฟเฟกต์กลิตช์ ฟิล์มเกรน | โค้ดเล็กแต่ได้ภาพสวยมาก |
ตัวอย่างคำสั่ง
ฉันจะทำคลิปอธิบายแนวตั้ง 1080x1920 ความยาว 45 วินาที เรื่อง "ขั้นตอนทำงาน 3 ขั้นด้วย AI" ช่วยแนะนำว่าแต่ละฉากควรใช้เทคนิคไหน (HTML/CSS, SVG, Canvas, WebGL) และเพราะอะไร แล้วสรุปเป็นตาราง ฉากที่ | เทคนิค | เหตุผล
ตั้งโครงโปรเจกต์เป็นหน้าเว็บที่ควบคุมด้วย "เวลา"
หลักสำคัญที่สุดของการทำคลิปด้วยเว็บคือ ต้องให้ภาพทุกเฟรมคำนวณจากค่าเวลา (t) ที่เรากำหนด ไม่ใช่จากเวลาจริงของเครื่อง ถ้าใช้ Date.now() หรือปล่อยให้แอนิเมชันเล่นเองตามเวลาจริง ตอนเรนเดอร์เป็นวิดีโอ ภาพจะกระตุก เร็วช้าไม่คงที่ และเรนเดอร์ซ้ำแล้วได้ผลไม่เหมือนเดิม
วิธีที่ถูกคือสร้างฟังก์ชัน render(t) ที่วาดภาพของวินาทีที่ t ให้ได้ผลเดียวกันทุกครั้ง แล้วสั่งให้ไปทีละเฟรม เช่น 30 fps คือ t = 0, 1/30, 2/30, ...
โครงโค้ดพื้นฐาน (ให้ Claude ขยายต่อ)
<canvas id="c" width="1080" height="1920"></canvas>
<script>
const FPS = 30, DURATION = 45;
const ctx = document.getElementById('c').getContext('2d');
// วาดภาพของวินาทีที่ t (ต้องให้ผลเหมือนเดิมทุกครั้ง)
function render(t) {
ctx.clearRect(0, 0, 1080, 1920);
// ... วาดพื้นหลัง ข้อความ ตัวนับ โดยคำนวณจาก t เท่านั้น
}
// ให้โปรแกรมเรนเดอร์เรียกใช้เพื่อไปที่เฟรมที่ต้องการ
window.seekTo = (t) => render(t);
</script>ตัวอย่างคำสั่ง
สร้างหน้า HTML ขนาด 1080x1920 สำหรับคลิป 45 วินาที 30 fps ให้ทุกภาพคำนวณจากฟังก์ชัน render(t) หรือ GSAP timeline ที่ seek ได้เท่านั้น ห้ามใช้ Date.now หรือ requestAnimationFrame ที่พึ่งเวลาจริง เตรียม window.seekTo(t) ไว้ให้โปรแกรมเรนเดอร์เรียก
ทำแอนิเมชันด้วย GSAP Timeline
สำหรับงานส่วนใหญ่ GSAP ช่วยให้เขียนลำดับแอนิเมชันง่ายกว่าคำนวณเอง คุณสั่งว่า "ที่วินาทีที่ 2 ให้หัวข้อเลื่อนเข้ามา ที่วินาทีที่ 5 ให้ตัวเลขนับจาก 0 ถึง 20" แล้วรวมทุกอย่างไว้บน Timeline เดียว จากนั้นหยุด timeline ไว้ (paused: true) และสั่งกระโดดไปที่เวลาใดก็ได้ด้วย time(t) ซึ่งตรงกับหลัก seek ในขั้นก่อนหน้า
ควรให้ Claude อ่านความยาวเสียงพากย์แต่ละประโยคจากขั้นที่ 4 ของภาคที่ 1 แล้วใช้เป็นเวลาเริ่มของแต่ละฉากบน timeline เพื่อให้ภาพตรงกับคำพูด
ตัวอย่างโค้ด GSAP
const tl = gsap.timeline({ paused: true });
// ฉาก 1: หัวข้อเด้งเข้า (0-3 วินาที)
tl.from('#title', { y: 120, opacity: 0, duration: 0.6, ease: 'back.out(1.7)' }, 0);
// ฉาก 2: ตัวเลขนับขึ้น (3-6 วินาที)
const counter = { v: 0 };
tl.to(counter, {
v: 20, duration: 2, ease: 'power2.out',
onUpdate: () => document.getElementById('num').textContent = Math.round(counter.v)
}, 3);
window.seekTo = (t) => tl.time(t);ตัวอย่างคำสั่ง
ใช้ GSAP สร้าง timeline ตาม Storyboard ฉาก 1-5 โดยใช้เวลาเริ่มของแต่ละฉากจากความยาวไฟล์เสียง vo_01-vo_05 ใส่แอนิเมชัน: หัวข้อเด้งเข้า ตัวเลขนับขึ้น ลูกศรวาดเส้นด้วย stroke-dashoffset และการ์ดสไลด์ซ้อนกัน ตั้ง timeline เป็น paused และเปิด window.seekTo(t) ให้ใช้เรนเดอร์
เพิ่มฉากพิเศษด้วย Canvas, Three.js และ Shader
ใช้เมื่อต้องการภาพที่ HTML ธรรมดาทำไม่ได้ เช่น อนุภาคลอยทั่วจอ กราฟเส้นที่วาดตามข้อมูล พื้นหลัง 3 มิติหมุนช้า ๆ หรือสีไล่ระดับที่ไหลเหมือนของเหลว สิ่งที่ต้องจำคือ ทุกอย่างต้องขึ้นกับ t ตัวอย่างเช่น ตำแหน่งอนุภาคคำนวณจากสูตรที่มี t ไม่ใช่สุ่มใหม่ทุกเฟรม
ถ้าต้องใช้ค่าสุ่ม ให้ใช้ seeded random (ตั้งค่าเมล็ดสุ่มคงที่) เพื่อให้เรนเดอร์กี่รอบก็ได้ภาพเหมือนเดิม ส่วน WebGL ต้องเปิด preserveDrawingBuffer: true ไม่เช่นนั้นตอนจับภาพ canvas อาจได้ภาพว่าง
Three.js: พื้นหลังหมุนตามเวลา t
// ใช้ t คำนวณตรง ๆ ไม่สะสมค่าเอง
function render(t) {
mesh.rotation.y = t * 0.4;
mesh.position.y = Math.sin(t * 1.2) * 0.2;
renderer.render(scene, camera);
}
const renderer = new THREE.WebGLRenderer({ canvas, preserveDrawingBuffer: true });GLSL fragment shader: ไล่สีไหลตามเวลา
uniform float uTime; uniform vec2 uRes;
void main() {
vec2 uv = gl_FragCoord.xy / uRes;
float w = sin(uv.x * 6.0 + uTime) * 0.5 + 0.5;
gl_FragColor = vec4(mix(vec3(0.05,0.12,0.30), vec3(0.15,0.45,0.85), w * uv.y), 1.0);
}ตัวอย่างคำสั่ง
เพิ่มพื้นหลังด้วย WebGL fragment shader เป็นไล่สีน้ำเงินกรมท่าไหลช้า ๆ ใช้ uniform uTime ที่รับค่าจาก t เพิ่มอนุภาค 80 จุดลอยขึ้นด้วย Canvas โดยใช้ seeded random เพื่อให้เรนเดอร์ซ้ำแล้วภาพเหมือนเดิม ตั้ง preserveDrawingBuffer: true
ตั้งค่าฟอนต์ไทยและทรัพยากรให้พร้อมก่อนเรนเดอร์
ปัญหาที่เจอบ่อยคือเฟรมแรก ๆ ได้ตัวหนังสือเป็นฟอนต์สำรองหรือเป็นช่องสี่เหลี่ยม เพราะฟอนต์โหลดไม่ทัน ให้ Claude สั่งรอให้ฟอนต์ รูปภาพ และไฟล์เสียงโหลดครบก่อนเริ่มจับเฟรม โดยฟอนต์ใช้ document.fonts.ready
ควรฝังฟอนต์ไว้ในโปรเจกต์ (ไฟล์ .woff2 หรือ .ttf) แทนการพึ่งอินเทอร์เน็ต เพราะสภาพแวดล้อมเรนเดอร์อาจเข้าเว็บภายนอกไม่ได้ และอย่าลืมตรวจการตัดคำภาษาไทย ตัวอักษรซ้อนวรรณยุกต์ และความสูงบรรทัดให้ไม่ตัดหัวหาง
รอทรัพยากรให้พร้อม
await document.fonts.ready; // รอฟอนต์ไทย (เช่น Kanit) พร้อมใช้ await Promise.all([...document.images].map(i => i.decode())); window.READY = true; // บอกโปรแกรมเรนเดอร์ว่าเริ่มจับเฟรมได้
ตัวอย่างคำสั่ง
ฝังฟอนต์ Kanit ไว้ในโฟลเดอร์ fonts/ ผ่าน @font-face แล้วตั้ง window.READY = true หลังฟอนต์และรูปโหลดครบ ตรวจว่าข้อความไทยไม่ถูกตัดหัวหางและตัดคำได้เหมาะสม
เรนเดอร์หน้าเว็บเป็นวิดีโอ (Frame-by-Frame Capture)
นี่คือขั้นแปลงโค้ดเป็นไฟล์วิดีโอ วิธีที่แม่นยำที่สุดคือเปิดหน้าเว็บด้วยเบราว์เซอร์ที่ไม่มีหน้าจอ (headless browser เช่น Puppeteer หรือ Playwright) แล้ววนลูปตั้งแต่เฟรม 0 ถึงเฟรมสุดท้าย เรียก seekTo(t) แล้วแคปภาพเก็บเป็นไฟล์ PNG ทีละเฟรม จากนั้นให้ FFmpeg รวมภาพทั้งหมดและซ้อนเสียงพากย์เป็น MP4
วิธีนี้ช้ากว่าเล่นแบบเรียลไทม์ แต่ภาพนิ่งและสมูทเสมอ ไม่ว่าเครื่องจะแรงแค่ไหน ถ้าเครื่องเรนเดอร์ไม่มี GPU การวาด WebGL ต้องพึ่งการเรนเดอร์ด้วยซอฟต์แวร์ (เช่น SwiftShader) ซึ่งช้ากว่า ฉากไหนหนักมากควรลดความซับซ้อนหรือลดความละเอียดตอนทดสอบ และ -pix_fmt yuv420p สำคัญมาก เพราะทำให้ไฟล์เปิดได้บนมือถือและทุกแพลตฟอร์ม
render.js (Puppeteer)
const puppeteer = require('puppeteer');
const FPS = 30, DURATION = 45, TOTAL = FPS * DURATION;
(async () => {
const browser = await puppeteer.launch({
args: ['--use-gl=angle', '--use-angle=swiftshader', '--enable-unsafe-swiftshader']
});
const page = await browser.newPage();
await page.setViewport({ width: 1080, height: 1920 });
await page.goto('file://' + __dirname + '/index.html');
await page.waitForFunction('window.READY === true');
for (let i = 0; i < TOTAL; i++) {
await page.evaluate((t) => window.seekTo(t), i / FPS);
await page.screenshot({ path: `frames/f_${String(i).padStart(5, '0')}.png` });
}
await browser.close();
})();รวมเฟรมกับเสียงพากย์ด้วย FFmpeg
ffmpeg -framerate 30 -i frames/f_%05d.png -i voiceover.mp3 \ -c:v libx264 -pix_fmt yuv420p -crf 18 -c:a aac -shortest clip_v1.mp4
ตัวอย่างคำสั่ง
เขียนสคริปต์ Puppeteer เรนเดอร์ index.html เป็น PNG ทีละเฟรม 30 fps 45 วินาที ลงโฟลเดอร์ frames/ รอ window.READY ก่อนเริ่ม แล้วใช้ ffmpeg รวมเฟรมกับ voiceover.mp3 เป็น clip_v1.mp4 (H.264, yuv420p, crf 18) ก่อนเรนเดอร์เต็ม ให้ทดสอบ 5 วินาทีแรกก่อนเพื่อดูความเร็วและความถูกต้อง
ทางเลือกอื่นในการแปลงเป็นวิดีโอ
นอกจากจับเฟรมทีละภาพ ยังมีวิธีอื่นให้เลือกตามงาน MediaRecorder + canvas.captureStream() บันทึกวิดีโอจาก canvas แบบเรียลไทม์ ได้ไฟล์เร็วแต่ความแม่นยำของเวลาต่ำกว่า ไฟล์มักเป็น WebM และต้องแปลงต่อ เหมาะกับงานร่างเร็ว ๆ
WebCodecs API (VideoEncoder) เข้ารหัสวิดีโอในเบราว์เซอร์โดยตรง ได้ความแม่นยำสูงและเร็วกว่าการแคปภาพ แต่ต้องเขียนโค้ดมากกว่า ส่วน Remotion เป็นเฟรมเวิร์กทำวิดีโอด้วยโค้ด (React) ที่จัดการเรื่องเฟรม ไทม์ไลน์ และการเรนเดอร์ให้ เหมาะถ้าคุณจะทำคลิปจากเทมเพลตเดียวแต่เปลี่ยนข้อมูลบ่อย ๆ ควรให้ Claude เทียบข้อดีข้อเสียกับงานของคุณก่อนเลือก
ตัวอย่างคำสั่ง
เปรียบเทียบ 4 วิธีแปลงหน้าเว็บเป็น MP4: Puppeteer+FFmpeg, MediaRecorder, WebCodecs, Remotion ในแง่ความแม่นยำ ความเร็ว ความยากในการตั้งค่า และความเหมาะกับคลิปอธิบาย 45 วินาที แล้วแนะนำวิธีที่เหมาะกับฉันที่สุด
ผสานกับฟุตเทจ เสียง และซับไตเติล
คลิปที่เรนเดอร์จากโค้ดไม่ต้องใช้อย่างเดียว คุณผสมกับเทคนิคในภาคที่ 1 ได้ เช่น เรนเดอร์เฉพาะฉากกราฟิกเป็นคลิปสั้น ๆ แล้วต่อกับฟุตเทจ stock ด้วย FFmpeg หรือเรนเดอร์กราฟิกเป็นพื้นโปร่งใส (ภาพ PNG มีช่องอัลฟา) เพื่อซ้อนทับบนวิดีโออื่น วิธีนี้ทำให้ตัวเลข กล่องข้อความ และกราฟอยู่เหนือฟุตเทจได้อย่างคม
ส่วนซับไตเติลมีสองทาง ทางแรกวาดซับเป็น HTML ในหน้าเว็บเดียวกัน ทำให้ฟอนต์และเอฟเฟกต์เน้นคำสวยตรงกับดีไซน์ ทางที่สองสร้างไฟล์ .srt แล้วฝังด้วย FFmpeg เหมาะกับงานที่ต้องการซับแก้ไขง่าย
จับเฟรมพื้นโปร่งใส และซ้อนบนฟุตเทจ
// ในหน้าเว็บ: ตั้ง body { background: transparent } แล้วแคปด้วย
await page.screenshot({ path: `gfx/f_${String(i).padStart(5, '0')}.png`, omitBackground: true });
# ซ้อนกราฟิกบนฟุตเทจด้วย FFmpeg
ffmpeg -i footage/scene3.mp4 -framerate 30 -i gfx/f_%05d.png \
-filter_complex "[0:v][1:v]overlay=0:0:shortest=1" \
-c:v libx264 -pix_fmt yuv420p scene3_final.mp4ตัวอย่างคำสั่ง
เรนเดอร์กราฟิกฉากที่ 3 (ตัวเลขนับขึ้นและกราฟแท่ง) เป็นภาพ PNG พื้นโปร่งใส 30 fps แล้วใช้ ffmpeg overlay ซ้อนบนฟุตเทจ footage/scene3.mp4 ได้ไฟล์ scene3_final.mp4 ซับไตเติลให้ทำเป็น HTML ในหน้าเว็บ เน้นตัวเลขด้วยสีเหลือง
ตรวจคุณภาพเฉพาะงานที่ทำจากโค้ด
เพิ่มเช็กลิสต์นี้ต่อจากเช็กลิสต์ในขั้นที่ 8 ของภาคที่ 1 ข้อแรก เฟรมแรกต้องเป็นภาพเต็ม ไม่ใช่จอว่างหรือจอดำ ข้อสอง ฟอนต์ไทยแสดงถูกทุกเฟรม ข้อสาม เรนเดอร์ซ้ำแล้วได้ภาพเหมือนเดิม (ทดสอบโดยเรนเดอร์เฟรมเดิมสองครั้งแล้วเทียบกัน) ข้อสี่ ความยาววิดีโอตรงกับเสียงพากย์ ข้อห้า ไม่มีเฟรมกระตุกหรือกระโดด และข้อหก ไฟล์เปิดได้บนมือถือ (H.264 + yuv420p)
นอกจากนี้ให้ทดสอบ 3-5 เฟรมสำคัญเป็นภาพนิ่งก่อนเรนเดอร์ทั้งคลิป เพราะแก้ไขเร็วและประหยัดเวลามาก
ตัวอย่างคำสั่ง
ก่อนเรนเดอร์เต็ม ให้จับภาพนิ่งที่วินาที 0, 3, 12, 30, 44 ส่งมาให้ดู แล้วตรวจเช็กลิสต์: เฟรมแรกเต็มภาพ, ฟอนต์ไทยถูกต้อง, เรนเดอร์ซ้ำแล้วภาพเหมือนเดิม, ความยาวตรงเสียง
บันทึกเป็นเทมเพลตหรือ Skill
เมื่อได้คลิปที่พอใจ ให้ Claude แยกโค้ดเป็นส่วน ๆ ที่เปลี่ยนไม่บ่อย (ตัวเรนเดอร์ ฟอนต์ สี พื้นหลัง องค์ประกอบกราฟิก) กับส่วนที่เปลี่ยนทุกคลิป (ข้อความ ตัวเลข ไฟล์เสียง) โดยแยกส่วนที่เปลี่ยนไปไว้ในไฟล์ข้อมูลเดียว เช่น content.json
ครั้งต่อไปคุณเปลี่ยนแค่ไฟล์นั้นแล้วสั่งเรนเดอร์ได้เลย จากนั้นสรุปทั้งหมดเป็น Skill เพื่อให้คลิปทั้งซีรีส์หน้าตาเหมือนกันและทำเร็วขึ้นมาก
ตัวอย่างคำสั่ง
แยกโปรเจกต์นี้เป็นเทมเพลต: ส่วนคงที่ (render.js, styles, fonts) กับส่วนที่เปลี่ยนต่อคลิป (content.json: หัวข้อ บทพูด ตัวเลข ไฟล์เสียง) แล้วสรุปเป็น Skill ชื่อ "คลิปโค้ด HTML สไตล์ที่ปรึกษา" พร้อมขั้นตอน ค่ามาตรฐาน และเช็กลิสต์ตรวจงาน
เคล็ดลับของภาคนี้: เริ่มจากฉากเดียวที่ 5 วินาทีให้เรนเดอร์ผ่านตลอดทางก่อน คือ โค้ด → เฟรม PNG → MP4 → เปิดดูบนมือถือ แล้วค่อยขยายเป็นทั้งคลิป เพราะปัญหาฟอนต์ WebGL และความเร็วเรนเดอร์จะเจอตั้งแต่ฉากแรก ดีกว่าไปเจอตอนทำเสร็จทั้งคลิปแล้ว
เช็กลิสต์ตรวจ ก่อนส่งงาน
ติ๊กทีละข้อ ระบบจำความคืบหน้าไว้ในเบราว์เซอร์ของคุณ ข้อ 7-10 ใช้เฉพาะคลิปที่สร้างจากโค้ด
สรุป คำศัพท์ ทั้ง 2 ภาค
| คำ | ความหมายสั้น ๆ |
|---|---|
| Hook | ช่วงเปิด 3 วินาทีแรกที่ดึงให้คนหยุดดู |
| CTA | คำชวนให้ผู้ชมทำสิ่งต่อไป เช่น ติดตาม ทักแชต |
| Storyboard | ตารางแบ่งฉาก บทพูด ภาพ และเวลา |
| B-roll | ภาพประกอบที่ใช้คลุมเสียงพากย์ |
| TTS | ระบบแปลงข้อความเป็นเสียงพูด |
| FFmpeg | โปรแกรมตัดต่อผ่านคำสั่ง |
| Trim / Crop / Scale | ตัดช่วง / ครอปภาพ / ปรับขนาด |
| Concat | ต่อคลิปหลายท่อนเข้าด้วยกัน |
| Safe zone | พื้นที่ปลอดภัยที่ปุ่มของแพลตฟอร์มไม่บังข้อความ |
| Render | การประมวลผลทุกอย่างออกเป็นไฟล์วิดีโอสุดท้าย |
| Deterministic rendering | เรนเดอร์กี่รอบก็ได้ภาพเหมือนเดิม เพราะคำนวณจากค่า t |
| Timeline / Tween | แถบเวลาที่เรียงแอนิเมชัน / การเคลื่อนค่าหนึ่งไปอีกค่า |
| Seek | กระโดดไปยังเวลาที่ต้องการ |
| Canvas 2D | พื้นที่วาดภาพด้วยโค้ดแบบ 2 มิติ |
| WebGL / Three.js | วาดกราฟิกด้วย GPU / ไลบรารีช่วยทำ 3 มิติ |
| Shader (GLSL) | โปรแกรมเล็ก ๆ ที่คำนวณสีของแต่ละพิกเซล |
| Headless browser | เบราว์เซอร์ที่ทำงานเบื้องหลังโดยไม่มีหน้าต่าง |
| Alpha channel | ช่องความโปร่งใสของภาพ |
| Seeded random | การสุ่มที่ตั้งเมล็ดคงที่ ได้ลำดับเดิมทุกครั้ง |
คำถามที่ พบบ่อย
ควรเริ่มจากภาคที่ 1 หรือภาคที่ 2 ก่อน?
ทำไมต้องคำนวณภาพจากค่า t ไม่ใช่เวลาจริง?
ทำไมเฟรมแรกต้องเป็นภาพเต็ม?
แก้คลิปอย่างไรให้ได้ผลเร็วที่สุด?
ใช้อย่างปลอดภัย
คลิปที่ทำเสร็จมักถูกเผยแพร่สู่สาธารณะ จึงควรตรวจเรื่องสิทธิ์และความถูกต้องก่อนทุกครั้ง
- ตรวจเงื่อนไขลิขสิทธิ์ของภาพ ฟุตเทจ เพลง และเสียงที่ใช้ โดยเฉพาะการใช้เชิงพาณิชย์
- อ่านตัวเลข ชื่อคน และข้อมูลสำคัญเองทุกครั้ง ก่อนปล่อยคลิป
- ทำงานกับไฟล์สำเนา และตั้งชื่อเวอร์ชันเพื่อย้อนกลับได้
- อย่าใส่รหัสผ่านหรือคีย์ API ลงในสคริปต์หรือหน้าเว็บที่จะแชร์ต่อ