- เครื่องมือ CLI ที่พัฒนาด้วย Node.js ซึ่งทำให้สามารถ รันคำสั่ง ffmpeg ด้วยภาษาอังกฤษแบบข้อความธรรมดา ได้ และตัดต่อวิดีโอด้วยประโยคง่าย ๆ โดยไม่ต้องใช้ตัวเลือกที่ซับซ้อน
- เมื่อพิมพ์ คำสั่งในรูปประโยค เช่น
ff convert video.mp4 to gif ระบบจะแปลงเป็นคำสั่ง ffmpeg และรันให้อัตโนมัติ
- รองรับงานหลากหลาย เช่น แปลงฟอร์แมต, บีบอัด, ตัดช่วง, แยกเสียง, ปรับขนาด, ปรับความเร็ว, หมุน, รวมไฟล์ และอื่น ๆ
- สามารถใช้ ตัวเลือก
--dry-run เพื่อตรวจดูคำสั่ง ffmpeg ล่วงหน้าได้โดยไม่ต้องรันจริง
- ทำงานออฟไลน์ได้อย่างรวดเร็ว โดยไม่ต้องใช้อินเทอร์เน็ตหรือ AI และใช้งานได้บนสภาพแวดล้อมที่ติดตั้ง ffmpeg พร้อม Node.js 16 ขึ้นไป
ภาพรวม
- ezff คือ wrapper ที่ใช้ภาษาอังกฤษแบบข้อความธรรมดา ซึ่งสร้างขึ้นเพื่อให้ใช้งาน ffmpeg ได้ง่ายขึ้น
- ผู้ใช้ไม่จำเป็นต้องจำแฟลก ffmpeg ที่ซับซ้อนหรืออ่านคู่มือ เพียงป้อนคำสั่งในรูปภาษาธรรมชาติ
- ตัวอย่าง:
ff convert video.mp4 to gif → สร้างและรันคำสั่ง ffmpeg โดยอัตโนมัติ
- ต้องใช้ Node.js 16 ขึ้นไป และ ติดตั้ง ffmpeg โดยสามารถติดตั้งผ่าน npm ด้วย
npm install -g ezff
ฟีเจอร์หลัก
- มี โหมด interactive prompt
- รองรับ โหมดป้อนคำสั่งโดยตรง
- ผู้ใช้สามารถพิมพ์งานที่ต้องการเป็นบรรทัดเดียวได้
- ตัวอย่าง:
ff convert video.mp4 to mp3
ff compress video.mp4 to 10mb
ff trim video.mp4 from 0:30 to 1:00
ff resize video.mp4 to 1280x720
ff speed up video.mp4 by 2x
รายการงานที่รองรับ
- แปลง (Convert) : เปลี่ยนฟอร์แมต (
mp4 → gif, mp4 → mp3)
- บีบอัด (Compress) : กำหนดขนาดไฟล์เป้าหมาย (
10mb เป็นต้น)
- ตัดช่วง (Trim) : ดึงเฉพาะช่วงที่ต้องการ (
from 0:30 to 1:00)
- แยกเสียง (Extract audio) : แยกเฉพาะเสียงออกจากวิดีโอ
- ปรับขนาด (Resize/Scale) : เปลี่ยนความละเอียด (
1280x720, 720p)
- ปรับความเร็ว (Speed up / Slow down) : เปลี่ยนความเร็วการเล่น (
2x)
- รองรับงานอีกหลากหลาย เช่น ย้อนกลับ (Reverse), ปิดเสียง (Mute), หมุน (Rotate), พลิกภาพ (Flip), สร้างภาพขนาดย่อ (Thumbnail), รวมไฟล์ (Merge), ขาวดำ (Grayscale), ลดนอยส์ (Denoise), กันสั่นวิดีโอ (Stabilize) เป็นต้น
ดูตัวอย่างคำสั่งและผลลัพธ์
- ใช้ ตัวเลือก
--dry-run เพื่อแสดงเฉพาะคำสั่ง ffmpeg โดยไม่รันจริงได้
- ไฟล์ผลลัพธ์จะถูกบันทึกไว้ในโฟลเดอร์เดียวกับไฟล์ต้นฉบับ โดยเติมคำต่อท้าย
_output (video_output.gif)
โครงสร้างการทำงานภายใน
- Parser วิเคราะห์ประโยคอินพุตเพื่อดึงการกระทำ (action), ไฟล์ (file), ตัวเลือกต่าง ๆ (เช่น size)
- Builder จับคู่ข้อมูลดังกล่าวให้เป็นคำสั่ง ffmpeg
- ffmpeg เป็นตัวรันคำสั่งจริง
- กระบวนการทั้งหมด ทำงานแบบออฟไลน์ด้วยการจับคู่รูปแบบ โดยไม่มีการเรียก AI หรือ API
การติดตั้งและสภาพแวดล้อม
- ต้องใช้ Node.js 16 ขึ้นไป
- ต้องติดตั้ง ffmpeg ไว้ใน PATH ของระบบ
- macOS:
brew install ffmpeg
- Ubuntu/Debian:
sudo apt install ffmpeg
- Windows:
choco install ffmpeg
- เผยแพร่ภายใต้ สัญญาอนุญาต MIT และยินดีรับ Pull Request
สรุป
- ezff คือ เครื่องมือ CLI แบบเรียบง่ายที่ช่วยลดภาระในการเรียนรู้คำสั่ง ffmpeg
- สามารถ ทำงานตัดต่อวิดีโออัตโนมัติได้ด้วยการป้อนภาษาอังกฤษแบบข้อความธรรมดา
- ด้วย การทำงานออฟไลน์ ความเร็วสูง และฟีเจอร์ที่หลากหลาย จึงเป็นเครื่องมือที่มีประโยชน์ทั้งสำหรับนักพัฒนาและผู้เริ่มต้นตัดต่อวิดีโอ
1 ความคิดเห็น
ความเห็นจาก Hacker News
น่าทึ่งที่ผู้คนพยายามแค่ไหนเพื่อจะไม่ต้องจำ วิธีใช้ ffmpeg พื้นฐาน
จริง ๆ แล้ว ffmpeg ไม่ได้ยากขนาดนั้น และคู่มือก็อธิบายแนวคิดหลักไว้ค่อนข้างดี
แน่นอนว่าค่าตั้งต้นมีจุดอันตราย เช่น ทำให้เกิดการเข้ารหัสใหม่หรือเก็บไว้แค่สตรีมเดียว แต่ถ้าจำ
-c copyได้ ส่วนใหญ่ก็ไม่มีปัญหาการซ่อน “จุดอันตราย” พวกนี้อาจยิ่งสร้างปัญหาใหญ่กว่าเดิม เช่น “ff convert video.mkv to mp4” ทั้งที่จริงแค่ remux ก็พอ กลับไปเข้ารหัสใหม่ทั้งไฟล์
“ffmpeg extract audio from video.mp4” ก็อาจบังคับเข้ารหัสเป็น mp3 ใหม่เสมอจนคุณภาพลดลง
มัลติมีเดียเป็น โดเมนที่ซับซ้อน โดยธรรมชาติ ดังนั้นถ้าซ่อนความซับซ้อนนี้ ผู้ใช้ก็จะเรียนรู้แนวคิดผิด ๆ
ผมคิดว่าการ สอน ผู้ใช้ด้วยชีตสรุปดี ๆ น่าจะถูกทางกว่าการทำ wrapper แบบย่อส่วน
มันทำให้นึกถึงการถกเถียงแนว “แล้วทำไมคนจนไม่ไปหางานดี ๆ ล่ะ”
ถึงอย่างนั้นก็เข้าใจว่าคุณพูดเพื่อสร้างแรงจูงใจ
สิ่งที่ผมต้องการคือ สคริปต์แบบโต้ตอบได้ ที่ถามว่า “อยากทำอะไร” แล้วสร้างคำสั่งให้พร้อมอธิบายความหมายของแต่ละอาร์กิวเมนต์
ตัวอย่างรายการตัวเลือก
ปัญหาที่คุณพูดถึงน่าจะแก้ได้ด้วยบั๊กรายงานหรือข้อเสนอฟีเจอร์
การซ่อนค่าคุณภาพอาจมีเจตนาเพื่อให้ผู้ใช้ไม่ต้องกังวลเรื่องนั้น
การหลีกเลี่ยงการเข้ารหัสใหม่ในการแปลงคอนเทนเนอร์อย่างเดียวก็น่าจะจัดการได้ด้วยตารางแมปปิง
ช่วงหลังผมก็เพิ่งรู้สึกถึงการขาดแมปปิงแบบนี้ตอนทำงานดึงเสียงกับใส่ภาพปก
เวลาแปลงวิดีโอเป็น gif ผมใช้ ฟิลเตอร์ palettegen ตลอด
พร้อมดูคำสั่งตัวอย่างจากบล็อกโพสต์ที่เกี่ยวข้องเมื่อ 10 ปีก่อน
เวลาใช้ animation gif บนเว็บ ถ้าเปลี่ยนเป็น mp4 จะได้ไฟล์เล็กกว่า ลื่นกว่า และสีตรงกว่า
แบบนั้น ffmpeg อาจขึ้นไปใกล้ระดับ gifski ได้
เมื่อก่อน gifski ให้คุณภาพดีกว่าที่ขนาดไฟล์เท่ากันก็เพราะฟีเจอร์นี้
ผมชอบแนวทางนี้ อยากให้มี OS ที่ทำให้ CLI ของลินุกซ์ทั้งระบบเป็นมิตรกับมนุษย์มากขึ้น
แทนคำสั่งกระจัดกระจายอย่าง
tar,ddก็อยากได้ CLI ที่สม่ำเสมอและอิงภาษาธรรมชาติเช่น:
ถ้ารองรับการเติมคำอัตโนมัติและการพูดได้หลายแบบก็คงดี ไม่จำเป็นต้องถึงขั้น LLM
จะเกิดสถานการณ์แบบ “ไม่ใช่ฮาร์ดดิสก์ลูกนั้น เอาอีกลูก!” หรือ “บอกให้ลบ หมายถึงลบถาวรจริง ๆ เหรอ?”
ผมชอบที่ Linux ยังรักษาคุณลักษณะทางเทคนิคของมันไว้ตามเดิม
เช่น: เดิมเริ่มจากเป็น wrapper ของ ffmpeg แต่ตอนนี้พัฒนาเป็นผู้ช่วย CLI ทั่วไปแล้ว
ประโยชน์อย่างเดียวของ AI chatbot คือ เขียนคำสั่ง ffmpeg
คุยไปมาเพื่อให้ได้คำสั่งที่ต้องการ แล้วอันที่ใช้บ่อยก็เซฟเป็นไฟล์
.commandปัญหาคือหลายคนดันเข้าใจผิดว่ามีแค่ Wikipedia กับข้อมูลอีกนิดหน่อยก็สร้าง “ปัญญา” ได้แล้ว
แต่ควรเป็น อินเทอร์เฟซแบบติวเตอร์ ที่แสดงผลลัพธ์ให้ผู้ใช้ตรวจสอบและเรียนรู้ไปด้วย
เพราะแค่มี wrapper ง่าย ๆ สำหรับ ffmpeg ก็แก้ปัญหาได้ 90% แล้ว
เข้า คลัง GitHub ของ ezff ไม่ได้
น่าจะใช้ LLM เพื่อดูตัวเลือกที่เสนอมาแล้วค่อยแก้ไขอีกที
แต่มีปัญหา ชื่อแพ็กเกจชนกัน เลยควรใช้ชื่ออื่นจะดีกว่า
ค้นหา “ezff” จะเจอไลบรารี Python ส่วน “ez-ffmpeg” เป็นไลบรารีสำหรับ Rust
LLM เป็นอินเทอร์เฟซสำหรับ ffmpeg ที่ยอดเยี่ยม
อาจต้องแก้ 2~3 รอบในเรื่องอย่างการซิงก์ซับไตเติล แต่ก็ สร้างคำสั่งซับซ้อนได้เร็ว
ผมสงสัยคำอธิบายที่ว่า “20 รูปแบบทั่วไปครอบคลุม 90%”
อยากรู้ว่านี่เป็นคำพูดของ AI หรือผู้เขียนพูดเอง
npm เหรอ? พอเห็น เหตุการณ์ด้านความปลอดภัย ที่ระเบิดขึ้นแทบทุกสัปดาห์ ก็ไม่อยากเอาความวุ่นวายนั้นเข้ามาในสภาพแวดล้อมพัฒนาของตัวเอง
การเปลี่ยนพาราไดม์ที่ AI จะพามาคือ “การสั่งคอมพิวเตอร์ด้วยภาษาธรรมชาติ” ในที่สุด
คำสั่งอย่าง “ช่วยทำฉากทำอาหารในหนังเรื่องนี้เป็น gif ให้หน่อย” จะกลายเป็นเรื่องจริง
พาราไดม์แบบใช้คำสั่งในปัจจุบันกำลังมีชะตาที่จะหายไป
ไม่จำเป็นต้องดูแคลนความพยายามแบบนี้เลย