- スライドの点検をAIに頼んだら、PDFを開く段で「pdftoppm がありません」と返ってきました。
- poppler を入れたら、AIの「ファイルを開く」が文字ではなくページの絵を返すようになりました。AIが直接読めない形式でも、読める形式に変換する部品があれば手が届きます。
- 動画は ffmpeg でコマを抜き、音声は whisper.cpp で文字にしました。
- 入れるかどうかを決める材料は、ほとんどAIが揃えてくれるので、ターミナルで実行するだけで道具がそろいます。
1. AIが「pdftoppm がありません」と言ってきた
講座で使うスライドを作っていて、その点検をAIに頼みました。
PDFに書き出してフォルダに置き、こちらを見てもらう形にしました。
ところが、AIがそのPDFをページとして開こうとしたところで止まりました。

pdftoppm is not installed. Install poppler-utils
(e.g. `brew install poppler`) to enable PDF page rendering.Code language: JavaScript (javascript)
pdftoppm は、PDFのページを画像に変換する小さなコマンドです1。
それが入っていないので、ページを絵として開くことはできない。
ただ、このエラーは「できません」で終わっていません。
poppler-utils を入れれば有効になる、と続きが書いてあります2。
足りない部品の名前と、入れるためのコマンドまで含まれている。
1.1. 文字は読めても、どう見えているかは分からない
「popplerを入れる方法を教えて」と聞くと、
brew install popplerCode language: Bash (bash)
この1行に続けて、自分は計画モードなのでインストール自体は実行できないこと、そして、入れなくても点検は進むことが添えてあります3。
コマンドを実行すると、poppler が入りました4。
同じPDFを、今度はページの画像として開いてもらいます。
AIにできることは、AIの側だけでは決まっていないのだと、このとき腑に落ちました。
2. 動画と音声にも、部品ひとつで手が届いた
2.1. 動画は、静止画に変えれば見える
AIは動画を再生できません。
それでも動画の構成分析ができるのは、ffmpeg でコマを抜いているからです。
たとえば、18分の解説動画から3秒刻みで静止画を抜き、88枚を並べて構成を読む。
章の切り替わりと画面の型は十分に追えます。
ffmpeg -ss 123 -i video.mp4 -frames:v 1 out.jpgCode language: Bash (bash)
後ろに置くと先頭から順にデコードするので、1080pの動画では実時間の2倍以上かかります5。
前に置くとキーフレームまで飛んでから読むので、1コマあたり約1秒。
2.2. 音を文字にする時間を、先に測った
文字起こしの道具を入れてもみました。
Mac向けの音声認識でよく名前の挙がる mlx 系は Apple Silicon 専用で、うちの Intel の機械では動きません6。
残った候補を4つ並べたあと、2分のクリップで測ってみました。
| モデル | 2分の音声にかかった時間 |
|---|---|
| base | 104秒 |
| small | 221秒 |
速いほうが得とは限りません。
base は、その動画で何十回も出てくる主題の製品名を毎回別の言葉に書き間違え、8秒ぶんの発話をまるごと落としています。

採用したのは small で、18分の動画の全編に41分かかりました7。
面白かったのは、あらかじめ語彙を渡せる仕組みがあったことです。
速度が23%落ちますが、その動画に出てくる固有名詞を短い文にして渡すと、人名が直り、ついでに句読点が入るようになりました8。
3. 承認の手前まで、AIが用意する
道具の入れ方には、はっきりした線が引かれています。
Python の部品はAIが自分で入れます。
Homebrew で機械そのものに入れるものは、ユーザーに渡してきます9。
文字起こしのモデルを落とすときも、先に容量だけ調べてから聞いてきました。
小さいもので141MB、実際に使ったもので465MB、いちばん大きいものは1.4GB10。
判断そのものではなく、判断に要る材料を揃えて、最後の一歩の手前で止まる。
poppler が中で何をしているか知らなくても、PDFのページを画像にする部品があること、それが無いとAIの目が届かないこと、そこだけ分かっていれば1行打つ判断はできます。
道具の名前を先に覚えるより、詰まっている場所を名指しで言ってもらえるほうが、ずっと早い。
- poppler は xpdf のコードを土台にしたPDF描画ライブラリで、freedesktop.org が開発を支えています。pdftoppm はその付属コマンドの一つで、ページを PPM や PNG、JPEG に書き出します。 – Poppler
- poppler-utils には pdftoppm のほか、文字を抜く pdftotext、ページ情報を出す pdfinfo、画像を取り出す pdfimages などが入っています。 – Debian — Details of package poppler-utils in sid
- 計画モードは、ファイルの編集もコマンドの実行もせず、調査と計画だけを行う読み取り専用の状態です。実行するかどうかは、計画を見てから人が決めます。 – いきなりコードを書かせない。Claude Code「Planモード」のすすめ
- Homebrew で poppler を入れると、cairo や fontconfig といった依存パッケージも一緒に入ります。初回は数分かかります。 – Homebrew Formulae: poppler
- シーク指定を入力より前に置くと、指定時刻の直前のキーフレームまで飛んでから読み始めます。後ろに置くと先頭から全部デコードして、指定時刻まで捨てる動きになります。 – Seeking – FFmpeg
- MLX は Apple の機械学習研究チームが作った、Apple Silicon 向けの配列フレームワークです。M1 以降のGPUを使う前提で作られています。 – GitHub – ml-explore/mlx: MLX: An array framework for Apple silicon
- whisper.cpp は OpenAI の Whisper を C/C++ で書き直した実装で、外部の依存なしに手元の機械だけで文字起こしができます。 – GitHub – ggml-org/whisper.cpp
- Whisper には、あらかじめ文脈や語彙を文章の形で渡せる仕組みがあります。音が曖昧なときに、渡した語のほうへ寄る形で効きます。 – Whisperの認識精度をプロンプト活用で向上させる
- Homebrew は macOS 向けのパッケージ管理ツールで、コマンド一つでソフトとその依存関係をまとめて入れられます。 – Homebrew
- whisper.cpp のモデルは ggml という形式に変換されたもので、量子化した軽い版も配布されています。大きいモデルほど精度は上がりますが、必要なメモリとディスクも増えます。 – whisper.cpp/models/README.md