การแปลงไฟล์ AVI เป็น MP4 โดยตรงบนเบราว์เซอร์ด้วย FFmpeg: การทดสอบประสิทธิภาพบน Mac M3 และความจริงเกี่ยวกับ WebAssembly

เมื่อไม่นานมานี้ ผมได้ใช้เวลาเขียนโปรแกรมอรรถประโยชน์เล็กๆ ตัวหนึ่ง: มันคือเครื่องมือแปลงไฟล์วิดีโอที่ทำงานบนเบราว์เซอร์ทั้งหมด โดยขับเคลื่อนด้วยแกนหลักของ FFmpeg เพื่อทดสอบความสามารถของมัน ผมจึงนำ MacBook Air M3 (RAM 16GB) ของผมมาเป็นหนูทดลอง โดยลองรันการแปลงไฟล์ AVI เก่าๆ เป็น MP4 โดยตรงบน Google Chrome
ผลลัพธ์ที่ได้นั้นทั้งน่าขบขันและน่าทึ่งในทางเทคนิค: นาฬิกาจับเวลาหยุดลงที่ 747.44 วินาที พอดี (มากกว่า 12.5 นาทีเพียงเล็กน้อย) และชิป M3 ที่ขึ้นชื่อเรื่องความเย็นก็ทำให้ตัวเครื่องอะลูมิเนียมอุ่นขึ้นจนสัมผัสได้อย่างชัดเจน
แล้วทำไมคอมพิวเตอร์ที่ติดตั้งหนึ่งในชิปที่ทรงพลังที่สุดในตลาดปัจจุบันถึงต้อง "เหนื่อยหอบ" นานกว่า 12 นาที เพียงเพื่อเปลี่ยนรูปแบบไฟล์วิดีโอ? ในบทความนี้ เราจะมาเจาะลึกถึงหลักการทำงานทางเทคนิคเบื้องหลังกระบวนการนี้ และตอบคำถามสำคัญที่ว่า: ถ้ามันช้าขนาดนั้น ทำไมเราถึงยังต้องการเครื่องมือประมวลผลบนเบราว์เซอร์อีกล่ะ?
1. คอขวดแรก: Remux เทียบกับ Transcode
เหตุผลหลักที่ทำให้การทดสอบของผมใช้เวลานานมากไม่ใช่เพราะตัวเครื่อง แต่เป็นเพราะไฟล์ต้นฉบับ ไฟล์ที่ผมเลือกคือรูปแบบ AVI รุ่นเก่าที่ใช้มาตรฐานการบีบอัดข้อมูล (Codecs) แบบดั้งเดิม เช่น DivX หรือ Xvid
ในโลกของการประมวลผลวิดีโอ คุณต้องแยกแยะระหว่างสองแนวคิดหลักนี้:
- Remux (คัดลอก - เร็วมาก): หากวิดีโอต้นฉบับของคุณใช้ Codec สมัยใหม่ (เช่น H.264) อยู่แล้ว FFmpeg เพียงแค่ดึง "แกนกลาง" ของวิดีโอและเสียงออกมา แล้วนำไปใส่ใน "กรอบ" MP4 อันใหม่ กระบวนการนี้เปรียบเสมือนการคัดลอกข้อมูลจากโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์หนึ่ง และใช้เวลาเพียงไม่กี่วินาที
- Transcode (ถอดรหัสและเข้ารหัส - ช้ามาก): เนื่องจากไฟล์ AVI ของผมใช้มาตรฐานที่ล้าสมัยซึ่งไม่เข้ากันกับ MP4 ทำให้ FFmpeg ต้อง "สร้างใหม่ตั้งแต่ต้น" มันต้อง Decode (ถอดรหัส) ทุกๆ เฟรมของวิดีโอเก่า จากนั้นจึง Encode (เข้ารหัส) กองเฟรมจำนวนมหาศาลเหล่านั้นให้เป็นมาตรฐาน H.264/H.265 ที่ทันสมัย การทำงานแบบพิกเซลต่อพิกเซลนี้กินทรัพยากร CPU อย่างมหาศาล
2. ความเป็นจริงของ WebAssembly (WASM) บนเบราว์เซอร์
ในการรันซอฟต์แวร์ที่ใช้งานหนักอย่าง FFmpeg (ซึ่งเดิมเขียนด้วย C/C++) โดยตรงบน Google Chrome ผมต้องใช้ประโยชน์จาก WebAssembly (WASM) นี่คือความก้าวหน้าอันน่ามหัศจรรย์สำหรับเว็บสมัยใหม่ แต่มันก็มีจุดอ่อนร้ายแรง: มันไม่สามารถใช้ประโยชน์จากการเร่งความเร็วด้วยฮาร์ดแวร์เฉพาะทาง (Hardware acceleration) ได้อย่างเต็มที่
...
