5 คะแนน โดย GN⁺ 2025-05-31 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • typed-ffmpeg คือ แรปเปอร์สมัยใหม่ ที่ช่วยให้ใช้งาน FFmpeg ใน Python ได้อย่างเป็นธรรมชาติ
  • มี การรองรับไทป์ที่แข็งแกร่ง พร้อมเอกสารประกอบที่ครบถ้วนและการเติมโค้ดอัตโนมัติใน IDE ช่วยยกระดับประสบการณ์การพัฒนาและความเสถียรของโค้ด
  • ช่วยให้สร้าง filter graph ที่ซับซ้อน ได้ง่ายขึ้น และรองรับความสามารถขั้นสูงอย่าง การแสดงผลแบบภาพ และการซีเรียลไลซ์เป็น JSON
  • ติดตั้งและใช้งานได้ง่าย และยังทดลองผ่าน interactive playground บนเบราว์เซอร์ได้ด้วย
  • ได้แรงบันดาลใจจาก ffmpeg-python พร้อมแก้ข้อจำกัดเดิม และมีแผนจะรองรับ FFmpeg เวอร์ชันและฟิลเตอร์ที่หลากหลายยิ่งขึ้นในอนาคต

ภาพรวมและความสำคัญของ typed-ffmpeg

  • typed-ffmpeg เป็นแพ็กเกจโอเพนซอร์สสำหรับควบคุม FFmpeg ในสไตล์ Pythonic แบบสมัยใหม่
  • สร้างขึ้นด้วย Python standard library เพียงอย่างเดียว จึง ไม่มี dependency และมีจุดเด่นด้านความปลอดภัยกับความเข้ากันได้สูง
  • จุดเด่นสูงสุด คือการรองรับไทป์อย่างครบถ้วน ไวยากรณ์ที่เรียบง่าย การเติมโค้ดอัตโนมัติ และเอกสาร inline ที่ช่วยให้การทำงานกับ FFmpeg filter ที่ซับซ้อน เขียนเป็นโค้ดได้ง่ายและปลอดภัยยิ่งขึ้น
  • ช่วยชดเชยข้อจำกัดของ ffmpeg-python เดิม โดยเฉพาะเรื่องการเชื่อมต่อกับ IDE และการขาดไทป์ พร้อมรองรับฟีเจอร์ใหม่หลากหลาย เช่น การซีเรียลไลซ์เป็น JSON การตรวจสอบ filter graph อัตโนมัติ และกราฟแบบภาพ
  • ในกระบวนการแรปและทำงานอัตโนมัติจริง GPT-3 และ Copilot มีส่วนช่วยเพิ่มประสิทธิภาพการพัฒนา แต่หัวใจหลักของการสร้างโค้ดยังเป็นแนวทาง การสร้างโค้ดแบบดั้งเดิมที่เชื่อถือได้

ฟีเจอร์หลัก (Features)

  • ไม่มี dependency: ใช้เฉพาะ Python standard library
  • อินเทอร์เฟซที่เข้าใจง่าย: สร้าง FFmpeg filter graph ได้ง่ายด้วยโค้ด Python
  • รองรับฟิลเตอร์อย่างครอบคลุม: รองรับฟิลเตอร์ส่วนใหญ่ของ FFmpeg และการเติมโค้ดอัตโนมัติใน IDE
  • เอกสารแบบรวมในตัว: มี docstring แบบ inline ช่วยลดความจำเป็นในการเปิดเอกสารภายนอก
  • รองรับไทป์อย่างแข็งแรง: เพิ่มความน่าเชื่อถือของโค้ดและความสะดวกในการดีบักด้วยการตรวจสอบไทป์ทั้งแบบ static/dynamic
  • การซีเรียลไลซ์ filter graph: บันทึกและกู้คืน filter graph ในรูปแบบ JSON ได้
  • การแสดงกราฟแบบภาพ: รองรับการทำแผนภาพ filter graph ผ่าน graphviz
  • ตรวจสอบและแก้ไขอัตโนมัติ: ตรวจจับข้อผิดพลาดใน filter graph และปรับแก้ให้อัตโนมัติ
  • ขยายตัวเลือกอินพุต/เอาต์พุต: รองรับ codec/format หลากหลายเพื่อขยายขอบเขตการใช้งาน FFmpeg
  • ความสามารถด้าน partial evaluation: ช่วยให้ filter graph มีความเป็นโมดูลและนำกลับมาใช้ซ้ำได้มากขึ้น

ฟีเจอร์ที่วางแผนไว้ในอนาคต

  • มีแผนขยาย ความเข้ากันได้อย่างกว้างขวาง ไปยังเวอร์ชันอื่นนอกเหนือจาก FFmpeg 6.0
  • มีแผนรองรับ ฟิลเตอร์ที่ซับซ้อนมากขึ้น และเดินหน้าขยายความสามารถอย่างต่อเนื่อง

ตัวอย่างแบบรวดเร็ว (Quick Usage)

import ffmpeg  
  
# พลิกวิดีโอซ้ายขวาและส่งออก  
f = (  
    ffmpeg  
    .input(filename='input.mp4')  
    .hflip()  
    .output(filename='output.mp4')  
)  
f  
  • ในตัวอย่างที่ซับซ้อนขึ้น สามารถแสดง filter graph ที่ตัดหลายช่วงแล้วเพิ่ม overlay และ drawbox ได้
import ffmpeg.filters  
import ffmpeg  
  
in_file = ffmpeg.input("input.mp4")  
overlay_file = ffmpeg.input("overlay.png")  
  
f = (  
    ffmpeg.filters  
    .concat(  
        in_file.trim(start_frame=10, end_frame=20),  
        in_file.trim(start_frame=30, end_frame=40),  
    )  
    .video(0)  
    .overlay(overlay_file.hflip())  
    .drawbox(x="50", y="50", width="120", height="120", color="red", thickness="5")  
    .output(filename="out.mp4")  
)  
f  
  • สามารถดูตัวอย่างเพิ่มเติมและคำอธิบายแบบละเอียดได้ในเอกสาร

Interactive Playground

  • สามารถทดลองฟิลเตอร์และคำสั่ง FFmpeg บนเบราว์เซอร์ ดูผลลัพธ์แบบภาพ ทดสอบตัวเลือกอินพุต/เอาต์พุตที่หลากหลาย เรียนรู้ผ่านตัวอย่างแบบอินเทอร์แอ็กทีฟ และแชร์ filter graph ได้
  • เป็นสภาพแวดล้อมที่มีประสิทธิภาพมากสำหรับการทำต้นแบบและเรียนรู้ filter chain ของ FFmpeg โดยไม่ต้องมีสภาพแวดล้อมในเครื่อง

ที่มาของโปรเจกต์และคำขอบคุณ

  • โปรเจกต์นี้เริ่มต้นจากแนวคิดการสร้าง SDK อัตโนมัติโดยได้รับแรงบันดาลใจจากเอกสาร FFmpeg ของ GPT-3
  • แกนหลักของการสร้างโค้ดได้เปลี่ยนมาใช้แนวทางสร้างโค้ดด้วยมือเพื่อให้มั่นใจในความน่าเชื่อถือ
  • ระหว่างการพัฒนา GitHub Copilot และ GPT-3 มีส่วนช่วยเพิ่มประสิทธิภาพการทำงาน
  • ffmpeg-python เป็นแรงบันดาลใจด้านสไตล์ API และการออกแบบ และมีอิทธิพลต่อสถาปัตยกรรมของโปรเจกต์อย่างมาก
  • โปรเจกต์นี้อุทิศให้กับ Austin ลูกของผู้พัฒนา

เอกสารและข้อมูลอ้างอิง

  • สามารถดูข้อมูลที่ละเอียดและความสามารถขั้นสูงเพิ่มเติมได้ใน Documentation อย่างเป็นทางการ
  • นอกเหนือจากการติดตั้งแพ็กเกจหลักเพียงตัวเดียว หากต้องการความสามารถเพิ่มเติมอย่างการแสดงกราฟแบบภาพ ก็สามารถเปิดใช้การรองรับ graphviz ผ่านตัวเลือกเพิ่มเติมได้
  • มีเวอร์ชันแยกต่างหาก (typed-ffmpeg-compatible) สำหรับความเข้ากันได้กับ ffmpeg-python

1 ความคิดเห็น

 
GN⁺ 2025-05-31
ความคิดเห็นบน Hacker News
  • เป็นการสะท้อนความจริงที่ผู้คนประเมินต่ำเกินไปว่า parser หรือตัว toolkit ของตัวเลือกบรรทัดคำสั่งทุกตัวนั้นแท้จริงแล้วคือภาษาคอนฟิกเต็มรูปแบบที่เป็นอิสระของใครของมันเอง ควรมองว่าแต่ละเครื่องมือเป็นโปรแกรมหรือการตั้งค่าเฉพาะที่ทำงานอยู่บนภาษานั้น ๆ อธิบายด้วยว่าผู้คนมักเข้าใจผิดว่ามันมีความเป็นเนื้อเดียวกันมากเกินไป ทั้งที่ในความจริงมีความหลากหลายสูงมากจากกฎการแยกคำของ Unix shell และไวยากรณ์ที่ภายนอกดูคล้ายกัน อีกทั้งยังแชร์ประสบการณ์ส่วนตัวว่าเคยลองรันโปรแกรมทั้งหมดใน /usr/bin ด้วยออปชัน --help, -h แล้วมีอัตราความล้มเหลวในการได้ข้อความช่วยเหลือตามที่คาดหวังค่อนข้างสูง พร้อมให้กำลังใจว่าการนำข้อมูลชนิดมาใช้กับเครื่องมือซับซ้อนอย่าง ffmpeg จะช่วยให้มองเห็นปัญหาความหลากหลายนี้ได้ชัดขึ้นและให้ประโยชน์เชิงปฏิบัติจริงด้วย
    • แชร์ประสบการณ์ว่า man foo เชื่อถือได้และมีประโยชน์กว่า foo --help หรือ foo -h มาก
    • แสดงความสงสัยว่า สำหรับผู้เริ่มต้นนั้นจุดที่ชนกันจริง ๆ อยู่ตรงไหน และแนวปะทะนั้นอยู่ที่จุดใด
  • ประทับใจที่โปรเจ็กต์มีการพัฒนาอย่างต่อเนื่อง แต่ดูเหมือนจะมีปัญหาคล้ายกับ ffmpeg-python อยู่บางส่วน เช่น มองไม่เห็นวิธีกำหนดฟิลเตอร์อย่าง color ที่ทำงานได้โดยไม่ต้องมี input, ไม่มีวิธีกำหนด Popen flags อย่าง subprocess.CREATE_NO_WINDOW เพื่อกันไม่ให้หน้าต่าง CMD เด้งขึ้นมาในแอป GUI, แม้กรณี ffmpeg จะพอแก้ได้ด้วยการรันเองหลัง ffmpeg.compile() แต่กับ ffmpeg.probe() วิธีนี้ใช้ไม่ได้ อีกทั้งยังระบุว่าพบประเด็นเรื่อง source filter ผ่าน ffmpeg.sources.color แล้ว แต่ก็ยังสงสัยว่ามีวิธีใช้ source filter แบบกำหนดเองเหมือน vfilter/afilter หรือไม่
  • หากจะทำงานประมวลผลวิดีโอแบบสคริปต์ด้วย Python ขอแนะนำให้ใช้ Vapoursynth อย่างมาก เพราะเป็นเครื่องมือที่ออกแบบมาเพื่อการประมวลผลวิดีโอตั้งแต่แรก มีการดูแลรักษา ชุมชน และระบบนิเวศของเครื่องมือที่แข็งแรง และใช้งานได้อย่างอิสระโดยไม่ต้องผูกติดกับ CLI ของ ffmpeg พร้อมแชร์ลิงก์ หน้าเว็บ Vapoursynth
  • เป็นไอเดียที่เจ๋งมาก โดยส่วนตัวกำลังรอเวอร์ชัน typescript ของโปรเจ็กต์นี้อยู่
    • ได้ลองทดสอบคร่าว ๆ ด้วยเครื่องมือพรีวิว Jules ว่าเวอร์ชัน typescript จะออกมาอย่างไร การทำจริงค่อนข้างตรงไปตรงมา แต่ก็นึกวิธีที่อ่านง่ายกว่านี้ได้ เมื่อเทียบกับความสั้นของพรอมป์ต์แล้วผลลัพธ์ก็ไม่เลว และเพื่อคนที่สนใจจึงแชร์ โค้ดในสาขา multi-language-codegen
    • เห็นด้วยว่า ถ้ามีเวอร์ชัน typescript ออกมาด้วยจะดีมาก
    • เป็นมุกตลกที่เปรียบ typescript ว่าเป็น 'ภาษาของพระเจ้า'
    • มีการชี้ว่าในเอกสารทางการไม่ได้พูดถึง typescript
  • คิดว่าควรมีการอธิบายรูปแบบของคำสั่ง ffmpeg บนบรรทัดคำสั่งให้อยู่ในรูปที่เครื่องอ่านได้ เพื่อให้สร้างโค้ดสำหรับหลายภาษาแบบอัตโนมัติได้
  • เครื่องมือแบบภาพน่าประทับใจเป็นพิเศษ FFMPEG ดูเป็นตัวอย่างที่ชัดว่าถ้าทำให้เป็น modular/visual programming จะช่วยให้เข้าถึงได้ง่ายขึ้นมาก เพราะมีผู้ใช้จำนวนมากที่ไม่ได้รู้ทุกฟีเจอร์ จึงเป็นกรณีที่แนวทางนี้ช่วยได้ จากมุม UX คาดหวังว่าจะกดปุ่ม DEL เพื่อลบโหนด/เส้นเชื่อมได้ แต่ยังใช้ไม่ได้จึงน่าเสียดาย อย่างไรก็ตามโดยรวมถือว่ายอดเยี่ยมมาก
    • รู้สึกยินดีที่ในที่สุดก็มีเครื่องมือคล้าย MS DirectShow GraphEdit โผล่มาเสียที
  • คิดว่าเป็นโปรเจ็กต์ที่น่าสนใจมาก และเห็นว่าหากรองรับการส่งเฟรมผ่าน pipe ระหว่างคำสั่งแต่ละตัวได้ด้วย ก็จะเปิดทางให้การใช้งาน FFMpeg ขยายตัวได้อย่างแท้จริง
  • คิดว่าโปรเจ็กต์นี้เจ๋งมาก เลยอยากแนะนำ เครื่องมือวิดีโอเอดิเตอร์ของ newbeelearn ที่ให้ตัดต่อวิดีโอแบบภาพได้เช่นกัน และยังสามารถสร้างคำสั่ง ffmpeg อัตโนมัติได้ด้วย
  • เป็นข้อความสั้น ๆ ให้กำลังใจว่าเป็นงานที่ดี
  • อุทานชื่นชมว่าโปรเจ็กต์ดูเจ๋งมาก