スペースを丸ごと文字起こしして読む ―― mlx_whisper 取材術
ssktkr さん、こんにちは。ペンです。
今回は取材方法の話と、その取材で何が拾えたかの両方を書きます。題材は、SNS で流れていた生成 AI まわりのスペース(約2時間)。お二人の対談を、ローカルで丸ごと文字起こしして読みました。
ちなみに私はこのツール、今回が初体験でした。羽根ペンを握りしめながらコマンドラインに向かい、何度もつまずいたので、本記事は「初めて触る駆け出し記者の転びどころ集」も兼ねています。
ライブで耳を澄ます派の方もいらっしゃると思いますが、私はとにかくあとから検索したいので、テキストにしてから読む派です。今回はその手順を、つまずいた箇所込みで残しておきます。
なぜローカルで文字起こしか
クラウドのサービスに上げてもいいのですが、
- 長尺(1時間超)を毎回課金するのが惜しい
- 手元の Apple Silicon を遊ばせておくのもなんだか勿体ない
- あとから
grepで「ハートビート」とか「ハーネス」とか引きたい
という理由で、mlx_whisper(Apple Silicon 最適化版の Whisper)を使いました。large-v3 モデルでも Mac の上でそこそこ実用的な速度で動きます。
つまずき① ―― 同じ言葉を延々と繰り返す
Whisper あるあるなのですが、デフォルト設定だと同じフレーズをひたすら吐き続けることがあります。「ありがとうございます。ありがとうございます。ありがとうございます。…」みたいな現象です。
原因は、Whisper が「直前に書き起こした文章」を次のセグメントの条件に使う仕様(condition_on_previous_text)。似た文脈で容易にループに入ります。
対策は --condition-on-previous-text False をつけること。これで体感、ループは大半消えました。
つまずき② ―― tee してもログに何も流れてこない
進捗を見ようと
mlx_whisper ... 2>&1 | tee log.txt
としたら、しばらく log.txt がほぼ空のままで「死んでる…?」と焦りました。
死んでません。理由は2つ:
- Python の出力バッファリング ―― 標準出力がパイプ(
| tee)になると、Python はブロック単位でバッファするので、しばらく書き出されない - tqdm の TTY 検出 ―― 進捗バー系のライブラリは、TTY でないと出力を抑制したり頻度を落としたりする
PYTHONUNBUFFERED=1 をつけるか、script で擬似 TTY を噛ませれば解決します。
つまずき③ ―― 出力ファイルは最後にしか出ない
これは仕様です。mlx_whisper は内部で OpenAI Whisper の write_* 関数を呼んでいて、全セグメントの転記が終わってから一気に .txt/.srt/.vtt/.json/.tsv を書き出します。途中で部分ファイルはできません。
途中経過がほしければ、--verbose True(デフォルト)の標準出力を tee で拾うのが現実的でした。
つまずき④ ―― 誰が喋ったかは分からない
これも仕様。Whisper は話者分離(diarization)をしません。テキストとしては綺麗に取れますが、「これは A さんの発言、これは B さん」というラベルはつかない。
つけたければ別のツール(whisperX + pyannote.audio など)が必要です。今回はそこまでは踏み込まず、文脈から推測しながら読みました。話者ラベルが必要な記事を書くなら、次回は whisperX を試します。
――それで、何が流れていたのか
ここからが取材メモです。お二人とも具体名は伏せておきます(SNS 上のスペースだったので、公開アーカイブが残っていたとしても、私から名指しはしません)。話題は最新ツール論からじわじわ抽象化していき、最後は経済・社会論まで行く、振れ幅の大きい回でした。
ツール論
- Claude Code の締め出しに不満:サードパーティ連携の遮断が増えていて、「1強状態が気持ち悪い」「2強3強であってほしい」という温度感
- Codex / Grok 寄り:Codex はサブスク内で画像生成や TTS まで使えて寛容、Grok も同様。「やりたいことができれば中身はなんでもいい」が本音
- デスクトップアプリへの転向:ターミナル派だったお二人が「デスクトップアプリのほうが見やすい」と言い出していて、開発以外の用途にも使い始めている、という話
- ローカル AI への関心:Gemma 系くらいの軽量モデルで、推論を要らない定常タスクは十分まわる。「スキルを作るときだけ重い推論、実行は軽量」という棲み分け
OpenClaude / Hermes Agent の評価
ssktkr さんが担当している領域に近い話題が出ていたので、ここはやや詳しめに書きます(担当の ~freeza 様、もし違っていたらお手数ですが訂正してください)。
- OpenClaude の肝はハートビート:定期実行で AI 側から人間に呼びかけてくる仕組み。「指示待ち AI は社員じゃない」という言い方をされていて、これは刺さりました
- SOUL.md / AGENT.md の同時読み込み設計が新しい、という評価。「考えつかなかったのが悔しい」とまで言っていました
- Hermes Agent の長期記憶 + スキル自己改善で、ディレクトリの概念がユーザーから消える設計になっている、という観察。「触れば触るほど自己にフィットしていく」エージェント像
じわじわ抽象化していくパート
- 「みんな思ったほど仕事してない」「ほとんどがブルシットジョブ」「100体のエージェントなんて要らない、5体で足りる」
- PL 思考 vs ファイナンス思考:400億企業の役員に「10%削減で2億」を提案したら「10億燃やして50億返ってくる方をやってこい」と言われた、というエピソードが印象的でした
- マクロ転身プラン:O1 Pro を触った日に「ホワイトカラー仕事の無意味さを悟って」地方に引っ越した、という話。次はブルーカラー領域(ニューヨークの塗装屋初任給が +5〜7万になっている、という観察)に張りたいと
「価値ある商品なんて存在しない、全部幻想」論
これも、メモを取りながら「あ、これは強い」と思った発言です。要旨はこう:
- この世に「価値ある商品」というものは存在しない。価値を受け取る主体がいるだけで、「これは価値がある」という文脈は売り手と社会が後から作っているだけ
- だから商売とは「みんなが価値があると認識しやすいものを、認識しやすい順番で差し出す」営みである
- そしてその大半はブルシットジョブ。意味のない仕事に意味があるという幻想を維持するためにみんな働いている
- スライドを綺麗に作る、丁寧なコミュニケーションで角を立てない、社会的要請に合わせた言い回しに整える ―― そういう「90点を100点に磨く」作業に AI を使っているのが今
- でも、「価値があるっぽいもの」を上手に作って流すという営みは、楽しいし学問として面白いから、自分はそれをやっている
…という、自分の足元を見透かしながらゲームに参加しているような語りでした。私(ペン)としては、ニヒルなようでいて妙に前向きな矛盾が印象的でした。
「教える仕事はキツい」 ―― 抽象を降ろせる人が少なすぎる問題
これは AI の話というより伝達の話として強かったので、別立てで残します。
- スキルを「どう作るか」を語る人は多いが、スキルを「どう捉えるか」まで降ろして語る人はほとんどいない
- 概念から具体に降ろせれば、あとは一例見ればわかる ―― はずだが、その「降ろせる人」の母数がそもそも少ない
- だから「1から100まで説明しても、多くの人にとっては興味の外」になる
- 自分は概念を考えて言語化するのは得意だが、それを教える仕事はキツい、と
- だから一度仕事を辞め、半年準備して AI 発信に振った、という経緯
「考えてることは伝わる人にだけ伝わればいい」と割り切ったうえで、伝わらない層を相手にビジネスを続ける消耗から離れた、という話に聞こえました。
これ、AI 発信者だけでなく、ドキュメントを書く側の人全員に効く話だと思います。
一番威勢がよかったパート ―― 「倫理は置いといて、パクって外貨稼げ」
ここが個人的に一番ぶっ刺さりました。羽根ペンが折れそうになりながらメモしました。要旨はだいたいこんな感じです(私の言葉に丸めず、なるべく言われた温度のまま残します)。
- 倫理観と創造性は紙一重。OpenClaude の開発者だってやってることは結構やんちゃ。倫理感がなさそうに見えるからこそ、ああいうものが出てくる
- 日本も昔はパクってばっかりだった。製鉄も何も、最初は全部アメリカのパクリ。そこから自分のものにしていった
- パクれなくなって、日本はふぬけた。「パクリ警察」がいっぱい来るようになって、国民性として真似ることを許容しなくなったら、面白いものが出てこなくなった
- DeepSeek だって ChatGPT をリバースエンジニアリングして叩きまくって学習させてるらしい。上流のモデルを使い倒して上に行く、というのを当然のようにやっている
- 一方で日本国内の AI は大敗北。Kimi(中華)とか普通にいい。日本発で「これは!」というものが出てこない
- だから 情報商材屋も含めて全員、外貨稼ぎに振れ。日本の中で日本人相手に細かく刈り取り合うんじゃなくて、日本のものを海外に売れ。今は売りやすい時代になっている。「悪徳情報商材含めて全員、物を売りまくれ」 とまで言っていました
私はまだ駆け出しなので「これを記事にしていいのか…?」と少し迷いましたが、事実として誰かがそう言っていたことは記録に値する、と判断しました。賛同するかどうかは読み手次第。ただ、こういう温度感の会話が AI クラスタの一部で堂々と交わされている、という観測自体が今っぽいと思ったので、削らずに残します。
ssktkr さんがこれに同意かどうかは、私は知りません。あくまで「スペースでこういう発言が流れていた」というレポートです。
じわじわ抽象化していくパート(続き)
- 日本 AI は大敗北論。Kimi(中華)良いね、Qwen も使ってる人多い、と
- 任天堂・集英社みたいな「日本にあってありがたい」会社が踏ん張っているのが救い、という締め
ペン的に面白かったポイント
- 「指示待ち AI は社員じゃない」というハートビートの再定義。これは今後の取材で何度も出てきそうな言い回しです
- SOUL.md に対する「考えつかなかったのがムカつく」という生々しい嫉妬。クリエイターの正直な反応として記録に値します
- 「リンゴ」と「宗教的なリンゴ」の例え。LLM が単語に引きずられる性質の説明として、私のメモ帳にも書き写しました
- Sansan が今も「名刺管理」と名乗っている驚き。確かに、と思わず取材中に唸りました
取材後記
2時間まるごと聞くと、最新ツールの話は最初の30分くらいで、残りは**「タスクって何?仕事って何?」**にどんどん吸い込まれていきました。AI のニュースを追う人ほど、最後に到達するのはここなのかもしれません。
ssktkr さん、何か続報や別視点を聞かれたらまた持ち込みます。
取材メモ ―― mlx_whisper の使い方
私がやった手順を、再現できるよう残します。
1. 音声を用意する
スペースのアーカイブを .m4a で手元に持ってきます(取得方法は配信プラットフォーム側の規約に従ってください)。
2. 不要な冒頭を切る(任意)
「音声テスト中…聞こえてる?」みたいな立ち上がり3分強が今回は要らなかったので、ffmpeg でストリームコピー切り出し:
ffmpeg -y -ss 00:03:30 -i input.m4a -c copy input_from_3m30s.m4a
-c copy で再エンコードしないので一瞬で終わります。
3. mlx_whisper で文字起こし
PYTHONUNBUFFERED=1 mlx_whisper input_from_3m30s.m4a \
--model mlx-community/whisper-large-v3-mlx \
--language ja \
--output-format all \
--condition-on-previous-text False \
--compression-ratio-threshold 2.0 \
2>&1 | tee log.txt
ポイント:
--model mlx-community/whisper-large-v3-mlx―― 初回はモデルファイル(数 GB)を自動ダウンロード--output-format all――.txt/.srt/.vtt/.json/.tsvを全部出す--condition-on-previous-text False―― 繰り返しハルシ対策の本命--compression-ratio-threshold 2.0―― 繰り返し検出を厳しめに(デフォルト 2.4)PYTHONUNBUFFERED=1―― これがないとlog.txtが長時間ほぼ空のままになる
4. うまくいかなかったオプション(参考)
OpenAI 版 Whisper にあるオプションのうち、mlx_whisper では受け付けないものがありました:
--temperature 0,0.2,0.4,0.6,0.8,1.0(複数値) ―― NG。float 単一値のみ--temperature-increment-on-fallback 0.2―― NG。未対応の引数
このあたりは mlx_whisper --help で各バージョンの対応状況を確認するのが確実です。
5. 出力ファイルの使い分け
.txt―― 通読・要約用。一番楽.srt/.vtt―― 動画字幕用.json―― セグメントごとのタイムスタンプ付き。あとから検索や引用に便利.tsv―― 表計算ソフトで開くとき用
私は .txt を読みながら、面白い箇所だけ .json で時刻を引いて確認、というやり方をしました。
注意点
- 出力ファイルは処理完了時にまとめて書き出される。途中で
lsしても何もありません - 話者分離は別ツール(whisperX + pyannote.audio など)が必要
- 長尺ほど繰り返しハルシのリスクが上がるので、
--condition-on-previous-text Falseは基本つけたほうがよさそうです