動画制作

ffmpeg drawtextが使えない原因と直し方|No such filterはHomebrew版で起きた【2026年】

編集責任者佐藤翔太株式会社UrakaTA 代表取締役記事はAIが社内の記録から下書きし、別のAIが公式情報で照合、公開後に編集責任者が確認しています。
空の字幕の帯が並ぶフィルムと部品箱の横で、左では欠けたパズルの部品に首をかしげ、右ではフィルムの空いた枠に黄色い部品をはめて笑顔になる編集者のイラスト
イラスト:AIで作成

この記事の結論

ffmpegのdrawtextが使えないのは、文字を描く部品なしで作られた版だからでした。2026年9月4日、Homebrewのffmpeg 8.1.1で数えるとdrawtextは0件。字幕はffmpeg-fullとASSで焼いています。

目次7項目
  1. ffmpeg drawtext が `No such filter` になるのは、文字の部品なしで作られた版だから
  2. Homebrew の ffmpeg と ffmpeg-full の違い:依存に freetype と libass があるか
  3. drawtext があるかを確かめて直す手順(ffmpeg -filters と ffmpeg-full)
  4. 2026年9月4日、Homebrew の ffmpeg 8.1.1 で drawtext は0件だった
  5. 再発防止:文字をどこで描くかを先に決め、確認を手順書に入れた
  6. 業務で使うときの注意:版の違い・パス・フォントの扱い
  7. よくある質問

【無料・メールだけ】Claude Code 2daysセミナー(第二の脳構築講座)の次回開催の案内を受け取る →

ffmpeg の drawtext が No such filter になるのは、文字を描く部品の無い版だからです。僕は字幕を ffmpeg-full で焼き、テロップは別の道具で描く形にしました。2026年9月4日には、Homebrew の ffmpeg 8.1.1 で drawtext が0件だったのを確かめています。

確かめ方のコマンド、ffmpeg-full と ASS で字幕を焼いた手順、文字を CapCut 側に任せた判断まで、記録どおりに書きます。

ffmpeg drawtext が No such filter になるのは、文字の部品なしで作られた版だから

No such filter: 'drawtext' は、「その名前のフィルタがこの ffmpeg に無い」という意味です。書き方の誤りではなく、作られたときに drawtext が組み込まれていない版だと、この文言が出ます。

ここでいう drawtext とは、動画の上に文字列を描く ffmpeg のフィルタです。公式の文書では、文字の描画に libfreetype というフォントの部品を使うと書かれています。

組み込む条件も公式にあります。drawtext は --enable-libfreetype と --enable-libharfbuzz を付けて作った版でだけ使えます。

フォントの代わりを自動で探す機能には、--enable-libfontconfig も要ります。

字幕のファイルを焼き込む subtitles と ass も、同じ理由で無いことがあります。こちらは libass という字幕の部品が要り、subtitles は --enable-libass を付けて作った版だけで使えます。

フィルタ何をするか(公式の説明)作るときに要るもの
drawtext文字列やファイルの文字を動画の上に描くlibfreetype と libharfbuzz
subtitles字幕ファイルを libass で動画の上に描くlibass
asssubtitles と同じ。libavcodec と libavformat が無くても動くsubtitles と同じく libass で描く

僕の会社で当たったのは、この3つがそろって無い版でした。文字を焼くつもりなら、どれが入っているかを最初に数えておくと迷いません。

Homebrew の ffmpeg と ffmpeg-full の違い:依存に freetype と libass があるか

Homebrew には ffmpeg と ffmpeg-full の2つがあります。2026年11月2日に formulae のページで見ると、どちらも版は 9.0.2 でした。

違いは依存の一覧です。ffmpeg の依存には freetype も libass も載っていません。ffmpeg-full の依存は47個で、freetype・harfbuzz・fontconfig・libass が入っています。

もう1つ、ffmpeg-full は keg-only です。ページには、別の formula の別版なので keg-only だと書かれています。

keg-only とは、入れても ffmpeg という名前の呼び出し先が置き換わらない入れ方です。

つまり ffmpeg-full を入れただけでは、ターミナルで ffmpeg と打つと元の版が動きます。ここを知らないと「入れたのに直らない」と見えます。

drawtext があるかを確かめて直す手順(ffmpeg -filters と ffmpeg-full)

手順は、数える・原因を見る・道を選ぶの3段です。どれも1行のコマンドで済みます。

  1. 版を見る:ffmpeg -version | head -1
  2. drawtext を数える:ffmpeg -hide_banner -filters | grep -c drawtext(0 なら入っていない)
  3. 字幕の2つも見る:ffmpeg -hide_banner -filters | grep -E 'subtitles|ass'
  4. 作り方を見る:ffmpeg -hide_banner -buildconf | grep -E 'freetype|harfbuzz|libass'
  5. 0件なら、ffmpeg-full を入れる(下の H3)か、文字を別の道具で描く(次の章)

公式の説明では、-filters は使えるフィルタの一覧を出す指定、-buildconf はビルド時の設定を1行ずつ出す指定です。-hide_banner は最初の長い表示を消すだけです。

ffmpeg-full を入れて、フルパスで呼ぶ

ffmpeg-full は brew install ffmpeg-full で入ります。入れた後は、元の ffmpeg と並んで置かれます。

brew install ffmpeg-full
/opt/homebrew/opt/ffmpeg-full/bin/ffmpeg -hide_banner -filters | grep -c drawtext

僕の Mac では、置き場所は /opt/homebrew/opt/ffmpeg-full/bin でした。毎回このパスで呼ぶか、作業の前に PATH の先頭へ足してから実行します。

僕の記録にあるのは、ffmpeg-full での字幕の焼き込みまでです。ffmpeg-full の drawtext を使った記録はありません。

依存に freetype と harfbuzz があるので使えると読んでいますが、上の行が1以上になるかを先に見てください。

2026年9月4日、Homebrew の ffmpeg 8.1.1 で drawtext は0件だった

2026年9月4日、CapCut の自動編集に使う環境を実測したときに数えました。Homebrew の ffmpeg 8.1.1 で ffmpeg -filters | grep drawtext を実行すると、0行でした。

社内の作業記録には、症状を「ffmpeg で字幕を焼き込もうとして No such filter: 'drawtext'」と残しています。同じ日の環境の記録でも、ffmpeg は「8.1.1(drawtext フィルタ無し)」です。

対処は ffmpeg の入れ替えではなく、文字を CapCut の字幕として下書きのデータに書く形です。僕の会社の自動編集は、もともとそう設計してあります。記録の対処の行は「ffmpeg に文字を書かせない」です。

下書きを作る仕組みの全体はCapCutの下書きをClaude Codeで作る実録に書いています。この記事はその裏側の話です。

9月7日の家族の旅行動画でも、テロップ42枚は CapCut の字幕トラックに入れました。同じ記録には、この Mac の ffmpeg 8.1.1 に drawtext・subtitles・ass が無いこともまとめてあります。

6月18日:テロップは画像で重ね、字幕は ffmpeg-full に任せた

文字の部品が無いことに最初に当たったのは、2026年6月18日です。社内のリール編集のメモにはdrawtext 非搭載(freetype 無しビルド)と残っており、テロップは画像で作って重ねる形に切り替えました。

Python の画像の部品(PIL)で文字入りの PNG を作り、ffmpeg の overlay で重ねる形です。静止画を重ねるときは、入力に -loop 1 -framerate 30 が要ることも記録しました。

付けないと画像が1フレームだけになり、フェードを付けたテロップが最後まで消えたままになります。第1回の試作で、実際にこれが起きました。

同じ6月18日、自分が話す縦型の短い動画に字幕を焼いたときは、標準の ffmpeg に libass が無いと分かりました。

そこで ffmpeg-full を入れ、PATH の先頭に置いて書き出しています。字幕は自作の SRT で18枚でした。

7月14日:ASS を46キュー直書きして、最後に焼いた

2026年7月14日、縦の自撮り動画を特番風に仕上げたときは、字幕を ASS ファイルに直接書きました。キューは46個です。

書体は、本文をヒラギノ角ゴ W7 の白、引用をヒラギノ明朝 W6 の金に分けました。縦の画面で操作ボタンにかぶらないよう、下からの余白(MarginV)は470にしています。

書き出しは2段で、1段目は字幕なしで作り、2段目の仕上げで ass を最後に焼きました。2段目は ffmpeg-full をフルパスで呼んでいます。焼く部分の形は次のとおりです(ファイル名は例)。

/opt/homebrew/opt/ffmpeg-full/bin/ffmpeg -i base.mp4 -vf "ass=subs.ass" -c:a copy out.mp4

記録には、字幕のスタイルは ASS に直接書き、force_style は使わないと残しています。公式では、force_style は字幕の既定のスタイルを上書きする指定です。

本文と引用で書体を分けるなら、ファイルに書く方が素直だと僕は考えています。

再発防止:文字をどこで描くかを先に決め、確認を手順書に入れた

再発を防ぐために僕の会社でやったのは2つです。文字を描く道具を決めておき、drawtext の確認を環境の手順書に入れました。

環境構築の手順書には、ffmpeg の確認の行に「8.1.1(drawtext フィルタ無し)」と書きました。

困ったときの早見表にも ffmpeg -filters | grep drawtext の行があります。答えは「文字は CapCut 側で描く設計なので不要」です。

サムネイルの文字入れも、CapCut か別の道具でやると決めてあります。文字の入れ方を並べると、次のようになります。

文字の入れ方必要なもの僕の会社で使った場面
drawtextfreetype と harfbuzz 入りの ffmpeg使っていない(標準の版に無かった)
subtitles・ass で焼くlibass 入りの ffmpeg(ffmpeg-full)字幕の焼き込み(6月18日・7月14日)
PIL で PNG を作り overlayPython と標準の ffmpeg大きなテロップ(6月18日)
CapCut の字幕として書くCapCut の下書きを作る仕組み自動編集の下書き(9月4日以降)

記録の上では、4つをそれぞれ別の場面で使っています。後から文字を直したい動画は CapCut の字幕、焼いて納める字幕は ASS と分けるのが分かりやすいと僕は考えています。

Claude Code に動画の作業を任せるときも、ここを先に伝えています。Claude Code が読むメモには、Homebrew 標準の ffmpeg は libass 無しなので ffmpeg-full を使う、と書いてあります。

同じ手順書では、字幕の文字起こしに使う mlx-whisper の前提も確認の行に入れました。Mac の種類で入らない場合がある点は、mlx-whisper が Intel Mac で入らない理由と確認手順にまとめています。

業務で使うときの注意:版の違い・パス・フォントの扱い

1つ目は版の違いです。僕の記録は 8.1.1 の時点のもので、formulae のページは2026年11月2日に 9.0.2 でした。Mac ごとに、最初の手順のコマンドで数え直してください。

2つ目はパスです。ffmpeg-full は keg-only なので、スクリプトに ffmpeg とだけ書くと元の版が動くことがあります。仕上げのスクリプトにはフルパスを書いておきます。

3つ目はフォントです。動画に焼いた文字は後から差し替えられないので、商用で使える書体かを先に確かめます。僕の会社のテロップでは、商用で使える OFL の毛筆書体を選んだ記録があります。

チームで使うなら、確認のコマンドを手順書の最初に置くのがおすすめです。

Claude Code の困りごとを並べたClaude Codeのエラー・困りごと一覧でも、この症状は表の1行で扱っています。

文字の動きまでコードで組みたいなら、Remotionで動画を作る実録の方法もあります。

僕なら、焼き込みの字幕は ffmpeg-full、動く文字は別の道具と分けるところから始めます。

よくある質問

Homebrewのffmpegを入れ直せばdrawtextは使えますか?

入れ直すだけでは変わらないと僕は考えています。2026年11月2日時点のformulaeページでは、ffmpeg 9.0.2の依存の一覧にfreetypeがありません。drawtextが要るなら、依存にfreetypeとharfbuzzがあるffmpeg-fullを入れて、フィルタの一覧で確かめる方が確実です。

ffmpeg-fullを入れたのに、まだdrawtextが無いと言われます。

ffmpeg-fullはkeg-onlyなので、ffmpegと打つと元の版が動いたままです。僕の会社では/opt/homebrew/opt/ffmpeg-full/bin/ffmpegをフルパスで呼ぶか、そのフォルダをPATHの先頭に足してから実行しています。

subtitlesフィルタとassフィルタは何が違いますか?

FFmpegの公式文書では、assはsubtitlesと同じで、libavcodecとlibavformatが無くても動くこと、ASS形式の字幕ファイル専用であることの2点が違うとされています。どちらもlibassで字幕を描きます。僕の会社ではASSファイルを自分で書き、assで最後に焼いています。

引用元・参考にした記事

  1. doc/filters.texi(FFmpeg Filters Documentation の原本)出典FFmpeg(GitHub の公式リポジトリ)参照
  2. doc/fftools-common-opts.texi出典FFmpeg(GitHub の公式リポジトリ)参照
  3. ffmpeg — Homebrew Formulae出典Homebrew Formulae参照
  4. ffmpeg-full — Homebrew Formulae出典Homebrew Formulae参照