- Công cụ CLI dựa trên Node.js cho phép chạy lệnh ffmpeg bằng tiếng Anh thường ngày, giúp chỉnh sửa video bằng những câu đơn giản mà không cần các tùy chọn phức tạp
- Khi nhập lệnh dưới dạng câu, như
ff convert video.mp4 to gif, công cụ sẽ tự động chuyển thành lệnh ffmpeg và thực thi
- Hỗ trợ nhiều tác vụ như chuyển đổi định dạng, nén, cắt, trích xuất âm thanh, thay đổi kích thước, điều chỉnh tốc độ, xoay, ghép và nhiều hơn nữa
- Có thể xem trước lệnh ffmpeg mà không thực thi thực tế bằng tùy chọn
--dry-run
- Hoạt động nhanh ở chế độ ngoại tuyến mà không cần kết nối Internet hay AI, và có thể dùng với Node.js 16 trở lên trong môi trường đã cài ffmpeg
Tổng quan
- ezff là một wrapper dựa trên tiếng Anh thường ngày được tạo ra để giúp ffmpeg dễ dùng hơn
- Người dùng có thể nhập lệnh theo dạng ngôn ngữ tự nhiên mà không cần nhớ các cờ ffmpeg phức tạp hay đọc manual
- Ví dụ:
ff convert video.mp4 to gif → tự động tạo và chạy lệnh ffmpeg
- Cần Node.js 16 trở lên và ffmpeg đã được cài đặt, có thể cài qua npm bằng
npm install -g ezff
Tính năng chính
- Cung cấp chế độ prompt tương tác
- Hỗ trợ chế độ nhập lệnh trực tiếp
- Người dùng có thể nhập tác vụ mong muốn trên một dòng
- Ví dụ:
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
Danh sách tác vụ được hỗ trợ
- Chuyển đổi (Convert): thay đổi định dạng (
mp4 → gif, mp4 → mp3)
- Nén (Compress): đặt giới hạn kích thước tệp (
10mb v.v.)
- Cắt (Trim): trích xuất một đoạn cụ thể (
from 0:30 to 1:00)
- Trích xuất âm thanh (Extract audio): tách riêng phần âm thanh từ video
- Thay đổi kích thước (Resize/Scale): đổi độ phân giải (
1280x720, 720p)
- Điều chỉnh tốc độ (Speed up / Slow down): thay đổi tốc độ phát (
2x)
- Hỗ trợ nhiều tác vụ khác như đảo ngược (Reverse), tắt tiếng (Mute), xoay (Rotate), lật (Flip), trích xuất thumbnail (Thumbnail), ghép (Merge), thang độ xám (Grayscale), khử nhiễu (Denoise), ổn định video (Stabilize)
Xem trước lệnh và đầu ra
- Có thể chỉ in ra lệnh ffmpeg mà không thực thi thực tế bằng tùy chọn
--dry-run
- Tệp kết quả được lưu trong cùng thư mục với tệp gốc, kèm hậu tố
_output (video_output.gif)
Cấu trúc hoạt động bên trong
- Parser phân tích câu lệnh đầu vào để trích xuất hành động (action), tệp (file), tùy chọn (như kích thước)
- Builder ánh xạ thông tin đó thành lệnh ffmpeg
- ffmpeg thực thi lệnh thực tế
- Toàn bộ quá trình được thực hiện ngoại tuyến dựa trên pattern matching mà không cần gọi AI hay API
Cài đặt và môi trường
- Cần Node.js 16 trở lên
- ffmpeg phải được cài và có trong system PATH
- macOS:
brew install ffmpeg
- Ubuntu/Debian:
sudo apt install ffmpeg
- Windows:
choco install ffmpeg
- Được phát hành theo giấy phép MIT, hoan nghênh Pull Request
Tóm tắt
- ezff là công cụ CLI đơn giản giúp loại bỏ gánh nặng học lệnh ffmpeg
- Có thể tự động hóa chỉnh sửa video chỉ bằng cách nhập tiếng Anh thường ngày
- Với hoạt động ngoại tuyến, thực thi nhanh và hỗ trợ nhiều tính năng, đây là công cụ hữu ích cho cả lập trình viên lẫn người mới bắt đầu chỉnh sửa video
1 bình luận
Ý kiến trên Hacker News
Thật ngạc nhiên khi mọi người cố gắng đến mức nào để không phải nhớ cách dùng ffmpeg cơ bản
Thực ra ffmpeg không khó đến vậy, và tài liệu hướng dẫn cũng giải thích khá rõ các khái niệm cốt lõi
Tất nhiên, có những điểm nguy hiểm như thiết lập mặc định gây tái mã hóa hoặc chỉ giữ lại một luồng, nhưng chỉ cần nhớ
-c copythì phần lớn sẽ ổnViệc che giấu những “điểm nguy hiểm” này thậm chí có thể tạo ra vấn đề lớn hơn. Ví dụ, “ff convert video.mkv to mp4” lẽ ra chỉ cần remux đơn giản nhưng lại tái mã hóa toàn bộ
“ffmpeg extract audio from video.mp4” cũng luôn tái mã hóa sang mp3 nên làm giảm chất lượng
Đa phương tiện vốn dĩ là một lĩnh vực phức tạp, nên nếu che giấu sự phức tạp này thì người dùng sẽ học sai khái niệm
Tôi nghĩ thay vì một wrapper đơn giản hóa, tốt hơn là dùng một cheat sheet tốt để dạy cho người dùng các khái niệm đúng
Nó làm tôi nhớ đến kiểu tranh luận “người nghèo sao không kiếm một công việc tốt hơn”
Dù vậy, tôi hiểu ý bạn là muốn khích lệ
Điều tôi muốn là một script tương tác. Nó hỏi “bạn muốn làm gì”, tạo lệnh phù hợp, rồi giải thích ý nghĩa của từng tham số
Ví dụ danh sách tùy chọn
Những vấn đề bạn nêu có lẽ có thể xử lý bằng bug report hoặc đề xuất tính năng
Việc che giấu các thiết lập chất lượng có thể là để người dùng không cần bận tâm đến chúng
Tránh tái mã hóa khi chỉ chuyển đổi container đơn giản có thể xử lý bằng bảng ánh xạ
Gần đây tôi cũng làm việc trích xuất âm thanh và thêm thumbnail nên thấy rõ sự thiếu vắng kiểu ánh xạ này
Khi chuyển video sang gif, tôi luôn dùng bộ lọc palettegen
Tôi tham khảo một bài blog liên quan từ 10 năm trước cùng với lệnh ví dụ
Khi dùng gif động trên website, đổi sang mp4 sẽ nhẹ hơn, mượt hơn và màu sắc cũng chính xác hơn
Khi đó ffmpeg có thể đạt đến trình độ của gifski
Trước đây gifski cho chất lượng tốt hơn với cùng kích thước tệp chính nhờ tính năng này
Tôi thích kiểu tiếp cận này. Giá mà có một hệ điều hành biến toàn bộ CLI của Linux trở nên thân thiện với con người
Tôi hình dung một CLI nhất quán dựa trên ngôn ngữ tự nhiên thay vì các lệnh rời rạc như
tar,ddVí dụ:
Sẽ hay nếu nó hỗ trợ tự động hoàn thành và nhiều cách diễn đạt khác nhau. Không cần đến LLM
Sẽ có những tình huống như “không phải ổ cứng đó, ổ khác!” hoặc “bảo xóa là xóa hẳn thật à?”
Tôi thích giữ nguyên các đặc tính kỹ thuật của Linux
Ví dụ: Ban đầu nó là một wrapper cho ffmpeg, nhưng giờ đã phát triển thành trợ lý CLI đa dụng
Công dụng duy nhất của chatbot AI là viết lệnh ffmpeg
Tôi hoàn thiện lệnh cần thiết qua hội thoại, rồi lưu những lệnh hay dùng thành tệp
.commandVấn đề là người ta đã lầm tưởng rằng chỉ với Wikipedia và vài bộ dữ liệu là có thể tạo ra “trí tuệ”
Tuy nhiên, nó nên là một giao diện kiểu gia sư: hiển thị kết quả để người dùng xác nhận và học hỏi
Vì một wrapper đơn giản cho ffmpeg có thể giải quyết 90% nhu cầu
Không truy cập được vào kho GitHub của ezff
Có lẽ nên dùng LLM để xem các tùy chọn được đề xuất rồi chỉnh sửa lại
Tuy nhiên, do xung đột tên gói, tốt hơn nên dùng tên khác
Tìm “ezff” ra một thư viện Python, còn “ez-ffmpeg” là một thư viện cho Rust
LLM là một giao diện tuyệt vời cho ffmpeg
Dù phải chỉnh lại 2–3 lần vì các vấn đề như đồng bộ phụ đề, nó vẫn có thể tạo nhanh những lệnh phức tạp
Tôi tò mò về câu “xử lý 90% bằng 20 mẫu phổ biến”
Không rõ đó là lời AI nói hay chính tác giả nói
npm à? Nhìn các sự cố bảo mật nổ ra hàng tuần, tôi không muốn mang mớ hỗn độn đó vào môi trường phát triển của mình
Sự thay đổi mô hình mà AI mang lại rốt cuộc sẽ là “nói với máy tính bằng ngôn ngữ tự nhiên”
Những lệnh như “hãy tạo gif từ cảnh nấu ăn trong bộ phim này” sẽ trở thành hiện thực
Mô hình dựa trên câu lệnh hiện nay sớm muộn cũng sẽ biến mất
Không cần phải xem nhẹ những thử nghiệm như thế này