- ffmpegコマンドを平易な英語で実行できるようにしたNode.jsベースのCLIツールで、複雑なオプションなしに簡単な文章で動画編集が可能
ff convert video.mp4 to gif のように コマンドを文の形で入力すると、自動でffmpegコマンドに変換して実行
- 形式変換、圧縮、トリミング、音声抽出、リサイズ、速度調整、回転、結合など さまざまな作業をサポート
--dry-run オプションで、実行せずにffmpegコマンドを事前に確認可能
- インターネット接続やAIなしで オフラインで高速に動作し、ffmpegがインストールされた環境でNode.js 16以上から利用可能
概要
- ezff は、ffmpegを簡単に使えるようにした 平易な英語ベースのラッパー(wrapper)
- ユーザーは複雑なffmpegフラグやマニュアルを覚える必要なく、自然言語の形でコマンドを入力できる
- 例:
ff convert video.mp4 to gif → ffmpegコマンドを自動生成して実行
- Node.js 16以上 と ffmpegのインストール が必要で、npm経由で
npm install -g ezff により導入可能
主な機能
- 対話型プロンプトモード を提供
- 直接コマンド入力モード に対応
- ユーザーがやりたい作業を1行で入力可能
- 例:
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は ffmpegコマンド学習の負担をなくすシンプルなCLIツール
- 平易な英語入力だけで動画編集を自動化 可能
- オフライン、高速実行、多彩な機能対応 により、開発者にも動画編集初心者にも役立つツール
1件のコメント
Hacker Newsのコメント
人々がffmpegの基本的な使い方を覚えまいと、どれだけ努力しているのかに驚く
実際のところ ffmpeg はそこまで難しくなく、マニュアルも中核となる概念をきちんと説明している
もちろん、デフォルト設定が再エンコードを引き起こしたり、ストリームを1つしか保持しなかったりといった危険要素はあるが、
-c copyさえ覚えておけばたいていは問題ないこうした「危険要素」を隠すと、かえってもっと大きな問題を生むことがある。たとえば「ff convert video.mkv to mp4」は単なるリマックス remux で十分なのに、丸ごと再エンコードしてしまう
「ffmpeg extract audio from video.mp4」も無条件で mp3 に再エンコードしてしまい、品質が落ちる
マルチメディアは本質的に複雑な領域なので、この複雑さを隠してしまうと、ユーザーは誤った概念を学んでしまう
単純化したラッパーよりも、良いチートシートでユーザーに正しい概念を教えるほうがよいと思う
昔の「貧しい人はなぜただ良い仕事に就かないのか」という類いの議論を思い出す
それでも、君の言葉が動機づけのためだというのは理解できる
私が欲しいのは対話型スクリプトだ。「何をしたいのか」を尋ねて、それに合ったコマンドを作り、各引数の意味も説明してくれるようなもの
オプション一覧の例
君が挙げた問題は、バグ報告や機能提案で解決できるかもしれない
品質設定を隠すのは、ユーザーが知らなくても済むようにする意図なのかもしれない
単純なコンテナ変換で再エンコードを避けるのは、マッピングテーブルで処理できそうだ
私も最近、音声抽出とサムネイル追加をしたときに、こうしたマッピング不足を感じた
動画を gif に変換するときは、いつもpalettegen フィルターを使っている
10年前の関連ブログ記事を、サンプルコマンドとあわせて参考にしている
Web サイトでアニメーション gif を使うなら、mp4 に置き換えたほうが小さく、滑らかで、色も正確になる
そうなれば ffmpeg も gifski レベルまで行けるかもしれない
昔はこの機能のおかげで、同じファイルサイズなら gifski のほうが高品質だった
こういうアプローチは気に入っている。Linux 全体の CLI を人間に優しくする OS があればいいのにと思う
tarやddのようにバラバラなコマンドではなく、自然言語ベースの一貫した CLI を想像している例:
自動補完やさまざまな表現に対応してくれるとよい。LLM までは要らない
「そのハードディスクじゃなくて別のやつ!」「削除って、本当に完全削除?」みたいな状況が起こる
私は Linux の技術的な特性がそのまま保たれているのが好きだ
例: もともとは ffmpeg ラッパーとして始まったが、今では汎用 CLI ヘルパーへと発展している
AI チャットボットの唯一の使い道はffmpeg コマンドを書くことだ
対話しながら必要なコマンドを仕上げ、よく使うものは
.commandファイルに保存している問題は、Wikipedia といくつかのデータだけで「知能」が作れると勘違いしたことだ
ただし、結果を見せてユーザーが確認し、学べるようなチューター型インターフェースであるべきだ
ffmpeg 用の簡単なラッパーで 90% は解決できるのだから
ezff GitHub リポジトリ にアクセスできない
LLM を使って提案されたオプションを確認し、修正していくのがよさそうだ
ただし、パッケージ名の衝突があるので別名にしたほうがよい
「ezff」は Python ライブラリとして、「ez-ffmpeg」は Rust 用ライブラリとして見つかる
LLM は ffmpeg のインターフェースとして素晴らしい
字幕の同期のような問題で 2〜3 回の修正が必要になることはあるが、複雑なコマンドをすばやく生成できる
「20 個の一般的なパターンで 90% を処理する」という説明が気になる
それが AI の発言なのか、作者自身の発言なのか知りたい
npm? 毎週のように起きるセキュリティ事故を見ると、その混沌を自分の開発環境に持ち込みたくはない
AI がもたらすパラダイムシフトは、結局のところ「自然言語でコンピューターに話しかけること」なのだと思う
「この映画の料理シーンを gif にして」といった命令が現実になる
今のコマンドベースのパラダイムはいずれ消えていく運命だ
こうした試み自体をけなす必要はない