h3.c: เครื่องมือสร้างวิดีโอและเสียงด้วย AI บน Mac M-Series
สำหรับผู้ใช้งาน Mac ที่ใช้ชิป Apple Silicon (M-Series) และกำลังมองหาเครื่องมือสร้างสรรค์คอนเทนต์วิดีโอและเสียงด้วย AI อย่างมีประสิทธิภาพ h3.c คือโครงการโอเพนซอร์สที่น่าสนใจอย่างยิ่ง โปรเจกต์นี้ถูกพัฒนาขึ้นเพื่อมอบประสบการณ์การสร้างสรรค์ที่รวดเร็วและยืดหยุ่น โดยใช้ประโยชน์จากพลังของ Metal บนชิป Apple Silicon ได้อย่างเต็มที่
h3.c คืออะไร?
h3.c ย่อมาจาก MiniMax H3 inference engine for Mac computers เป็นเครื่องมือที่ออกแบบมาเพื่อรันโมเดล AI ด้านการสร้างสื่อ (inference engine) บนคอมพิวเตอร์ Mac ที่ใช้ชิป Apple Silicon โดยเฉพาะ โปรเจกต์นี้มุ่งเน้นการทำงานแบบ "vertical slices" คือการสร้างส่วนประกอบที่ใช้งานได้จริงทีละส่วน เริ่มตั้งแต่ข้อมูลเมตาของโฮสต์และโมเดล, การประมวลผลด้วย Metal, การเข้ารหัส Prompt, การสร้างวิดีโอ/เสียงจาก Prompt, ไปจนถึงการใช้เฟรมแรก/สุดท้ายเป็นตัวกำหนดทิศทาง และการอ้างอิงแบบเรียงลำดับ (ordered references)
คุณสมบัติเด่นของ h3.c
- Native Metal Performance: h3.c ถูกปรับแต่งมาเพื่อใช้ประสิทธิภาพสูงสุดของ Metal API บนชิป Apple Silicon โดยเฉพาะ ทำให้การประมวลผลโมเดล AI เป็นไปอย่างรวดเร็วและใช้ทรัพยากรได้อย่างมีประสิทธิภาพ
- Prompt-to-Video/Audio: สามารถสร้างสรรค์วิดีโอและเสียงได้โดยตรงจากข้อความ Prompt ที่ผู้ใช้ป้อนเข้าไป
- First/Last-Frame Conditioning: รองรับการใช้เฟรมแรกหรือเฟรมสุดท้ายของวิดีโอที่มีอยู่แล้ว เป็นตัวกำหนดทิศทางหรือสไตล์ของวิดีโอที่กำลังจะสร้างขึ้น
- Ordered References: สามารถนำรูปภาพ วิดีโอ หรือเสียง มาใช้เป็นข้อมูลอ้างอิงแบบเรียงลำดับ เพื่อประกอบการสร้างสรรค์ผลงาน
- Interactive Session: มาพร้อมกับโหมดการทำงานแบบโต้ตอบ (interactive session) ที่ให้ผู้ใช้สามารถป้อน Prompt และรับผลลัพธ์ได้ทันที โดยไม่ต้องโหลดโมเดลซ้ำทุกครั้ง
- Customizable Presets: มีการตั้งค่า Presets ที่หลากหลาย เพื่อให้ผู้ใช้เลือกปรับความเร็วและคุณภาพของการสร้างสรรค์ผลงานได้ตามต้องการ
การเริ่มต้นใช้งาน h3.c
การใช้งาน h3.c โดยทั่วไปจะเริ่มต้นจากการคอมไพล์และตรวจสอบโมเดล โดยสมมติว่าคุณมี Snapshot ของโมเดลจาก Hugging Face อยู่ในโฟลเดอร์ ./MiniMax-H3 และมีโปรแกรม FFmpeg และ FFprobe ติดตั้งอยู่ใน PATH ของระบบ
1. การสร้างและตรวจสอบโมเดล
คุณสามารถใช้คำสั่ง ./h3 --info เพื่อตรวจสอบโครงสร้างของโมเดล และดูว่า Metal device ที่เลือกใช้งานเป็นตัวใด โดยไม่ต้องโหลดน้ำหนักโมเดลทั้งหมด หรือสร้างสื่อขึ้นมา หากต้องการดูรายละเอียดคำสั่งทั้งหมด สามารถใช้ ./h3 --help
หากไม่ระบุ -p ตัวโปรแกรมจะเข้าสู่โหมด Iris-style interactive session โดยอัตโนมัติ
2. การสร้างวิดีโอเบื้องต้นอย่างรวดเร็ว
เริ่มต้นด้วยการตั้งค่า Preset ที่ผ่านการตรวจสอบแล้ว (validated balanced preset) ซึ่งจะสร้างเฟรมประมาณ 22 เฟรมที่ 24 fps (ประมาณ 0.92 วินาที) โปรแกรมจะแสดงเฟรมกลางของวิดีโอที่กำลังพัฒนาหลังจากการ Denoising แต่ละครั้งใน Terminal ที่รองรับ และแสดงระยะเวลาของแต่ละขั้นตอน
การตั้งค่าเริ่มต้นนี้ไม่ใช่การปรับแต่งที่เข้มข้นที่สุด แต่เป็นการเริ่มต้นที่ดี:
--steps 20: ทำการ Denoising 20 Pass--reuse 2: คำนวณความเร็วของ Denoiser ใหม่เพียง 11 Pass จากทั้งหมด 20 Pass และประมาณค่าการเปลี่ยนแปลงที่ข้ามไป--layers 45: ใช้ 45 ใน 50 Transformer blocks เพื่อลดเวลาและการใช้ Unified Memory--show(Optional): แสดง Preview VAE, เฟรมกลางหลัง Euler transition, และเฟรมสุดท้าย รองรับ Graphical Terminal Protocols เช่น Kitty/Ghostty และ iTerm2/WezTerm/Konsole
การรันครั้งแรกจะมีค่าใช้จ่ายในการโหลดโมเดลและ Cache ข้อมูลบน Disk เปรียบเทียบประสิทธิภาพจากการรันซ้ำ และสลับการใช้งาน Variants ต่างๆ เมื่อเครื่องเริ่มร้อน เนื่องจากงานนี้มีความไวต่อ Thermal Throttling
สำหรับการทดลองที่สั้นมากๆ สามารถขอ Denoising 4 Pass โดยตรง:
--steps N: หมายถึง N Denoising Pass เสมอ การใช้ 4 ถึง 7 Pass จะใช้ Schedule เดียวกันที่ชนะการเปรียบเทียบแบบงบประมาณต่ำ การเพิ่มจาก 4 เป็น 7 จะช่วยเพิ่มรายละเอียดและการเคลื่อนไหว--reuse 1: ใช้กับงบประมาณ Step ที่น้อย เพื่อให้ทุก Pass ที่ร้องขอทำงานกับโมเดลเต็มที่--show: แสดง Preview หลังแต่ละ Pass
3. การปรับปรุงคุณภาพให้ใกล้เคียง Reference
เมื่อต้องการคุณภาพระดับสูง ให้ค่อยๆ ปรับทีละอย่าง เริ่มจากการคืนค่า Layer ทั้งหมด, การประเมิน Denoiser ทั้งหมด, และสุดท้ายคือการเพิ่ม Schedule จาก 20 Pass เป็น 50 Pass (Reference)
การตั้งค่าเริ่มต้นคือ --steps 20 --layers 50 --reuse 1 แต่สำหรับการปรับปรุงคุณภาพ ให้ใช้ --steps 50 เพื่อให้โมเดลทำงาน 50 Block Denoiser อย่างสมบูรณ์ ซึ่งจะใช้เวลาและทรัพยากรมากกว่า แต่ให้ผลลัพธ์ที่แม่นยำกว่า
4. การเลือก Preset ความเร็ว/คุณภาพ
การตั้งค่าเหล่านี้ส่วนใหญ่เป็นอิสระต่อกัน:
--use-int8-row-fc2(Optional): ใช้ Activation Scale ต่อแถว FC2 และ TensorOps เต็มความกว้าง ช่วยลดเวลาการทำงานของ Denoiser ลงประมาณ 2.6%--reuseและ--core-reuse: ไม่สามารถใช้ร่วมกันได้ Layer thinning สามารถใช้ร่วมกับทั้งสองแบบได้- Token Reduction: เพื่อให้คำสั่งแรกเร็วขึ้นโดยที่ยังคงความละเอียดเดิม การลด Token สามารถลดเวลา Profile จาก 16.69 เหลือ 12.60 วินาที (บน M5 Max) แต่การจัดองค์ประกอบอาจแตกต่างไปจาก Close Path
- Internal Rendering & Upscaling: สำหรับ Preview ที่รวดเร็ว สามารถ Render ภายในที่ 320x320 แล้ว Upscale เป็น 512x512 ได้ แต่จะสูญเสียรายละเอียดปลีกย่อยและอาจเปลี่ยน Framing ได้
--core-reuse 6: ใช้สำหรับการ Preview ที่รวดเร็ว ค่าที่สูงกว่า 6 อาจทำให้สูญเสียความสมจริงของ Subject
5. การเลือกความละเอียดและระยะเวลา
- ข้อจำกัด: ความกว้างและความสูงต้องหารด้วย 32 ลงตัว, มีค่าอย่างน้อย 32, และผลคูณต้องไม่เกิน 768 * 1344 พิกเซล
- H3-Base: เป็นโมเดล 768p
- Native 256-square Preview: สำหรับ Preview แบบ Native 256x256 ซึ่งมี Token Grid เพียง 8x8 ทำให้มีพื้นที่น้อยสำหรับรายละเอียดที่ซับซ้อน H3 จะปรับ RoPE coordinates ลงครึ่งหนึ่งโดยอัตโนมัติที่ขนาด 256x256
--render-widthและ--render-height: ต้องตั้งค่าพร้อมกัน, มี Aspect Ratio เดียวกับ Output, และไม่เกินขนาด Output- Frame Rate: h3.c ทำงานที่ 24 fps และปรับจำนวนเฟรมขึ้นให้เป็น 5 + 17*n
--seconds Nหรือ--frames N: เลือกใช้เพียงอย่างใดอย่างหนึ่ง--seconds 10จะให้ผลลัพธ์ 243 เฟรม (10.125 วินาที)
คลิปสั้นๆ มีประโยชน์สำหรับการพัฒนา โดยปกติ Workflow ที่ปล่อยออกมาจะเน้นวิดีโอความยาวประมาณ 4–15 วินาที
6. การปรับปรุง Prompt
Prompt ที่สั้นก็ใช้งานได้ แต่ระบบคาดหวังคำอธิบายที่เหมือน Context-IR คือระบุ Subject, Action, Setting, Camera, Lighting/Style, และ Sound ที่ต้องการ
- ตัวอย่าง: "A cinematic, wide-angle shot of a majestic dragon soaring through a stormy, neon-lit cyberpunk city at night, with heavy rain and dramatic volumetric lighting."
- การเปรียบเทียบ: ใช้
--seed Nเพื่อควบคุม Stream การสุ่ม และเปรียบเทียบผลลัพธ์โดยใช้ Prompt, Seed, Resolution, Frame Count, และ Step Count เดียวกัน
7. การ Preview เฟรมและการวินิจฉัยประสิทธิภาพ
--show: แสดงเฟรมตัวอย่างหลัง Denoising แต่ละครั้ง และเฟรมทั้งหมดเมื่อเสร็จสิ้น--frames-dir DIR: เขียนเฟรมสุดท้ายเป็นไฟล์ PPM-o '': ปิดการเข้ารหัส MP4 ใช้ร่วมกับ--frames-dirหาก FFmpeg ไม่พร้อมใช้งาน--profile: รายงานเวลาการทำงานของแต่ละ Phase, Metal encoding/wait time, Peak live tensor storage, และจำนวน Dispatch
8. การเพิ่ม Image, Video, และ Audio References
- First/Last-Frame Anchors (FL2VA): ใช้สำหรับกำหนดทิศทางจากเฟรมแรก/สุดท้าย
- Ordered References (Ref2VA): ใช้ Reference แบบต่างๆ โดยระบุ Flag ที่ตรงกับประเภทสื่อ:
--ref-image PATH: สำหรับรูปภาพ--ref-video PATH: สำหรับวิดีโอ--ref-audio PATH: สำหรับเสียง (ต้องมีความยาว 2-15 วินาที, รองรับสูงสุด 3 ไฟล์, รวมความยาวไม่เกิน 15 วินาที)- Flag เหล่านี้สามารถใช้ซ้ำได้ และลำดับบน Command Line จะถูกรักษาไว้
การทดสอบและข้อกำหนดในการใช้งาน
make test: รันชุดทดสอบบน Host และคอมไพล์ Metal source เพื่อตรวจสอบ H3 block กับผลลัพธ์จาก MLXmake parity: รันเฉพาะการตรวจสอบ Metal/MLX- FFmpeg และ FFprobe: ต้องติดตั้งใน PATH เพื่อใช้สำหรับการนำเข้าสื่อและสร้าง Output MP4
หมายเหตุเกี่ยวกับการ Implement และประสิทธิภาพ
- Sampler และ DiT Controls: Sampler เริ่มต้นใช้ Schedule วิดีโอ/เสียงที่ปล่อยออกมา
--stepsระบุจำนวน Denoising Pass,--reuseประเมิน Pass แรกและสุดท้าย รวมถึงช่วงที่กำหนด แล้วจึงประมาณค่า Velocity ที่ข้ามไป - Layer Thinning: จัดอันดับ AdaLN gates ใน Checkpoint โดยป้องกัน Block แรกและสุดท้าย ทำให้
--layers 45และ--layers 40ลดเวลา Transformer และการใช้ Unified Memory - Core Reuse: เก็บ Residual Transformer เต็มรูปแบบไว้ โดย Refresh Patch Projection และ Timestep-aware Head ใช้ร่วมกับ Whole-velocity reuse ไม่ได้
h3.c เป็นเครื่องมือที่ทรงพลังสำหรับผู้ใช้งาน Mac Apple Silicon ที่ต้องการสำรวจโลกของการสร้างสรรค์สื่อด้วย AI ด้วยการปรับแต่งที่ยืดหยุ่นและประสิทธิภาพที่ยอดเยี่ยม ทำให้การสร้างสรรค์วิดีโอและเสียงเป็นไปได้อย่างง่ายดายและรวดเร็วยิ่งขึ้น
#h3c #AI #Mac #AppleSilicon #Metal #VideoGeneration #AudioGeneration
ขอบคุณ แหล่งข้อมูล
https://github.com/antirez/h3.c