2 ポイント 投稿者 GN⁺ 2025-12-28 | 1件のコメント | WhatsAppで共有
  • 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 により導入可能

主な機能

  • 対話型プロンプトモード を提供
    • ff コマンドだけを入力すると、ファイルパス、作業の種類、出力形式などを順番に質問
    • 例:
      ? File path: video.mp4  
      ? What do you want to do? › Convert format  
      ? Convert to: › GIF  
      
    • 選択後、ffmpegコマンドが自動生成されて実行される
  • 直接コマンド入力モード に対応
    • ユーザーがやりたい作業を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コマンドだけを出力可能
    • 例:
      ff convert video.mp4 to gif --dry-run  
      → ffmpeg -i video.mp4 -vf fps=15,scale=480:-1:flags=lanczos -loop 0 -y video_output.gif
      
  • 出力ファイルは元ファイルと同じフォルダに _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件のコメント

 
GN⁺ 2025-12-28
Hacker Newsのコメント
  • 人々がffmpegの基本的な使い方を覚えまいと、どれだけ努力しているのかに驚く
    実際のところ ffmpeg はそこまで難しくなく、マニュアルも中核となる概念をきちんと説明している
    もちろん、デフォルト設定が再エンコードを引き起こしたり、ストリームを1つしか保持しなかったりといった危険要素はあるが、-c copy さえ覚えておけばたいていは問題ない
    こうした「危険要素」を隠すと、かえってもっと大きな問題を生むことがある。たとえば「ff convert video.mkv to mp4」は単なるリマックス remux で十分なのに、丸ごと再エンコードしてしまう
    「ffmpeg extract audio from video.mp4」も無条件で mp3 に再エンコードしてしまい、品質が落ちる
    マルチメディアは本質的に複雑な領域なので、この複雑さを隠してしまうと、ユーザーは誤った概念を学んでしまう
    単純化したラッパーよりも、良いチートシートでユーザーに正しい概念を教えるほうがよいと思う

    • 「そこまで難しくない」という言い方には注意すべきだ。何が難しいかは人それぞれ違う
      昔の「貧しい人はなぜただ良い仕事に就かないのか」という類いの議論を思い出す
      それでも、君の言葉が動機づけのためだというのは理解できる
    • 自分も ffmpeg を年に1回くらい使うが、文法を全部覚えるには350年くらいかかりそうだ
    • 頻繁に使う人には簡単でも、1〜2か月に1回使う私のような人間には難しく感じる
      私が欲しいのは対話型スクリプトだ。「何をしたいのか」を尋ねて、それに合ったコマンドを作り、各引数の意味も説明してくれるようなもの
    • 「そこまで難しくない」というのは冗談に聞こえる。ffmpeg には数千ものオプションがあるのだから
      オプション一覧の例
    • 私も Python のパッケージング概念について「そこまで難しくない」と言いがちだが、ffmpeg のコマンドはほとんど独自言語のように感じる
      君が挙げた問題は、バグ報告や機能提案で解決できるかもしれない
      品質設定を隠すのは、ユーザーが知らなくても済むようにする意図なのかもしれない
      単純なコンテナ変換で再エンコードを避けるのは、マッピングテーブルで処理できそうだ
      私も最近、音声抽出とサムネイル追加をしたときに、こうしたマッピング不足を感じた
  • 動画を gif に変換するときは、いつもpalettegen フィルターを使っている
    10年前の関連ブログ記事を、サンプルコマンドとあわせて参考にしている

    • 最近は「gif」という言葉が誤用されることが多い。実際にはmp4 のほうが効率的
      Web サイトでアニメーション gif を使うなら、mp4 に置き換えたほうが小さく、滑らかで、色も正確になる
    • pngquant を ffmpeg フィルターとして統合できれば、より良いパレットを作れそうだ
      そうなれば ffmpeg も gifski レベルまで行けるかもしれない
    • ffmpeg がフレームごとのパレット対応を追加したのか気になる
      昔はこの機能のおかげで、同じファイルサイズなら gifski のほうが高品質だった
    • gifski はパレット認識が優秀なので、よい代替になる
    • こうした設定がデフォルトではないのが惜しい
  • こういうアプローチは気に入っている。Linux 全体の CLI を人間に優しくする OS があればいいのにと思う
    tardd のようにバラバラなコマンドではなく、自然言語ベースの一貫した CLI を想像している
    例:

    zip my-folder into my-zip.tar with compression level 9  
    write my-iso ./zip.zip onto external hard drive  
    git delete commit 1a4db4c  
    convert ./video.mp4 and ./audio.mp3 into ./out.mp4  
    merge ./video.mp4 and ./audio.mp3 to ./out.mp4 without re-encoding
    

    自動補完やさまざまな表現に対応してくれるとよい。LLM までは要らない

    • ただ、こうした自然言語コマンドには曖昧さという問題がある
      「そのハードディスクじゃなくて別のやつ!」「削除って、本当に完全削除?」みたいな状況が起こる
    • そういうアプローチが嫌なら Windows や macOS を使えばいい。
      私は Linux の技術的な特性がそのまま保たれているのが好きだ
    • このアイデアを実際に実装した helpme スクリプト がある
      例:
      helpme ffmpeg assemble all the .jpg files into an .mp4 timelapse video at 8fps
      helpme zip my-folder into my-zip.tar with compression level 9
      helpme git delete commit 1a4db4c
      
      もともとは ffmpeg ラッパーとして始まったが、今では汎用 CLI ヘルパーへと発展している
  • AI チャットボットの唯一の使い道はffmpeg コマンドを書くこと
    対話しながら必要なコマンドを仕上げ、よく使うものは .command ファイルに保存している

    • LLM は自然言語の解析という点で驚くべき進歩だ
      問題は、Wikipedia といくつかのデータだけで「知能」が作れると勘違いしたことだ
    • 悲観的ではあるが、LLM はユーザーのテキストによる説明をコマンドや SQL に変換するのに役立つ
      ただし、結果を見せてユーザーが確認し、学べるようなチューター型インターフェースであるべきだ
    • 以前の AI は、「動画の 0:00〜0:03 を再生してから逆再生を繰り返す」といったバウンス効果をうまく扱えなかった
    • それでも、こういうインターフェースは GPU 資源を浪費する非効率の例に思える
      ffmpeg 用の簡単なラッパーで 90% は解決できるのだから
  • ezff GitHub リポジトリ にアクセスできない

    • 私のところでも 404 エラーになる。npm ページ下部のリンクが問題らしい
    • それでも npm のコードタブ では見られる
  • LLM を使って提案されたオプションを確認し、修正していくのがよさそうだ
    ただし、パッケージ名の衝突があるので別名にしたほうがよい
    「ezff」は Python ライブラリとして、「ez-ffmpeg」は Rust 用ライブラリとして見つかる

  • LLM は ffmpeg のインターフェースとして素晴らしい
    字幕の同期のような問題で 2〜3 回の修正が必要になることはあるが、複雑なコマンドをすばやく生成できる

  • 「20 個の一般的なパターンで 90% を処理する」という説明が気になる
    それが AI の発言なのか、作者自身の発言なのか知りたい

  • npm? 毎週のように起きるセキュリティ事故を見ると、その混沌を自分の開発環境に持ち込みたくはない

  • AI がもたらすパラダイムシフトは、結局のところ「自然言語でコンピューターに話しかけること」なのだと思う
    「この映画の料理シーンを gif にして」といった命令が現実になる
    今のコマンドベースのパラダイムはいずれ消えていく運命だ

    • それでも、一貫していて検証済みのツールの価値は依然としてある
      こうした試み自体をけなす必要はない