世界を動かす技術を、日本語で。

2021年のMacBookで「Gemma4-31B」を使用してローカルに1年分の動画をインデックス化する(50GBスワップ)

概要

  • Maasai Maraで過ごす現地生活と、Silicon Valleyでの開発者生活の両立
  • 撮影データの膨大なアーカイブ管理と編集作業の課題
  • 既存AI編集ツールの限界と「インデックス化」の重要性
  • ローカル環境でのAIベース自動インデックス構築プロセス
  • 実践を通じて得た技術的教訓と今後の展望

Maasai MaraとSilicon Valley、二つの世界

  • Maasai Maraのロッジ で3ヶ月間、動物や村の友人、子どもたちとの日常
  • iPhone、DJI Pocket、ドローン、Nikon Z8、Ray-Ban Metas など多様な機材での撮影
  • 撮影データの編集が追いつかない という共通課題
  • 残り半年は Silicon Valleyで長時間開発作業
  • 空港での大量機材持ち運び と、未編集データの山

編集作業のボトルネックとAIツールの限界

  • ロッジのSNSが 編集時間不足 で停止、素材は膨大に存在
  • SaaS型AI編集ツール (Eddie AI、Higgsfield MCP、Submagic、Buffer)を検討
    • コスト高 (月額約$140)
    • AI生成映像 はリアルな旅行ブランドに不適切
    • 投稿頻度の見積もり誤り で現実的でない運用
  • DaVinci Resolve Studio の既存機能(IntelliSearch、Smart Bins、Voice to Subtitle)で大部分をカバー
  • AI編集ツールは「ラベル付き素材」を前提 にしており、未整理アーカイブには不向き

真の課題:「インデックス化」とその構築

  • 最大の課題は「アーカイブのインデックス化」
    • クリップ内容の検索性確保が最優先
  • ローカル環境でインデックスを構築
    • 物理SSD に保存されたアーカイブ
    • sidecarファイル(.description.md) で各クリップに詳細情報を付与
    • 一度のビジョンコールで全情報抽出 (評価、画質、照明、時間帯、色、音質、人数、キーワード、顔、位置、トランスクリプト、説明文)
    • 三種のビジョンバックエンド (Claude CLI、Anthropic API、LM Studioローカル)

技術スタックと具体的な処理フロー

  • ffprobe :メタデータ抽出

  • exiftool :GPS情報取得

  • Nominatim :逆ジオコーディング

  • ffmpeg :フレーム抽出

  • WhisperX :多言語トランスクリプトと話者識別

  • insightface :顔認識と特徴量DB保存

  • ビジョンモデル :フレーム・トランスクリプト・文脈からYAML+説明文生成

  • sidecarファイル :各クリップに付随、検索性と移植性を両立

    • フォルダ単位で _INDEX.json_INDEX.md も生成

MacBook Pro M1 Maxの実力とAIローカル処理

  • 2021年製16インチMacBook Pro M1 Max(64GB RAM) でローカルAI処理
  • Gemma 4 31B Q4モデル をLM Studioで稼働
  • 物理RAMとスワップ合計100GB超 の負荷でも安定動作
  • 旧世代ハードウェアでも最新AIモデルが実用的に稼働

開発中に遭遇したバグと学び

  • WhisperXのAPI変更 による互換性問題と防御的プログラミング
  • Claude CLIのパーミッションエラー を正常応答と誤認した問題
  • Gemmaの人数カウント仕様 ("many" vs int)によるスキーマ設計の重要性
  • 動画の「キープ/カット」基準 の見直し(思い出重視 vs ポートフォリオ重視)

最後に得た知見

  • Enum制約 によるAIの誤判断防止
  • インデックス化の重要性 とAI活用の本質的なレイヤー
  • ローカルAI環境の進化 とハードウェア選定の新基準

この体験を通じて、 真に価値あるAI活用は「編集」よりも「インデックス化」 にあると確信。 ローカル処理の柔軟性とプライバシーハードウェアの長寿命化スキーマ設計や運用基準の明確化 が、今後のクリエイター活動に不可欠であると実感。

Hackerたちの意見

2015年のThinkPadでGemmaを動かして似たようなことをやったよ。幸いにもメモリをアップグレードできたから、そうじゃなかったら大変だったかも。正直言って、llama.cppはファンがフル回転してた。でも、ちゃんと動いて仕事は終わったよ。

ファンが最大速度で回転している これ、いつも混乱します。計算をできるだけ早く行いたい人が多いのに、そうすると必然的にもっと熱が出て排気しなきゃいけないのに、どうしてなんでしょう?たまに「リソースを100%使っている」という比喩として使われることもあると思いますが(ここではそうだと思いますが)、実際に文句として言う人もいますよね、いろんな文脈で。

ジェネレーティブAIの動画は本物の旅行ブランドには合わないと思う。 ほとんどのAirbnbホストはあなたに同意しないと思うよ。 > それはTripAdvisorの十字架刑だね。 偽物のリスティングを持ってるAirbnbホストがどうやって生き残ってるのか、全く分からない。

ハハ。正直、これには自分も悩んでるんだ。サファリロッジを運営してるけど、スラップ動画の道には行きたくない!でも、逆に本物の動画は時間がかかるし、プロセスが遅くなるんだよね。

スキルは ~/.claude/skills/video-index/ にあります。もし似たようなこと(個人アーカイブのインデックス作成、ローカルモデルでの本格的なアーカイブ作業、編集ツールを動かすエージェントの構築)に取り組んでいるなら、情報交換できると嬉しいです。あなたのClaudeがこの投稿を書いたとき、共有するための正しいURLを選ばなかったかもしれません。ホームフォルダが公開されていない限り。スキルファイルを共有してくれますか?

おっと!俺のミス。今直してるよ。それと、スキルファイルは共有できるよ。5分ちょうだい。

最近、プログラミングを始めた友達からのクラシックなメッセージの現代版を受け取りました。「自分のウェブアプリを作ったんだけど、見てみる?ここにあるよ:http://localhost:8080」

記事ありがとう!俺はM5 Proを持ってて、ローカルモデル(特にGemma4とQwen3.6)を使う方法を探してるんだ。これは素晴らしいことだよ。特にLLMはバッチ処理が得意だから、複数の写真や動画を並行してインデックス作成できて、パフォーマンスに影響が出ないんだ。

M5 ProのMBPを考えてるんだけど、実際のモデルのベンチマークが見つからなくて困ってるんだ。Qwen 3.6 35B/A3BやGemma 4 26BのようなMoEモデルで、だいたいどれくらいのトークンを秒間に処理できるか知ってる?

最近はUnsloth Studio [0]をおすすめしてるよ。これは、より広く知られているLM Studioのオープンソースの代替品で、リリースされたモデルの良い量子化を行っている人たちが作ってるんだ。MTPサポートがまだ統合されていないから、精度に違いなく2倍のトークン生成速度が得られるはずだよ。少しスクロールするとMLX量子化もあるけど、これはmacOSのMetal GPUアクセラレーション専用のフォーマットで、まだUnsloth Studioには統合されてないんだ。[0] https://unsloth.ai/docs/models/qwen3.6#mtp-guide

二つの質問があります。1. 検索インデックスって何ですか?2. "description.md"の例には「faces -> cluster_id」みたいなものが含まれていますが、これはDavinci Resolveの顔インデックスからのものですか?写真コレクションでは、顔や名前、場所の情報がすごく重要なんですが、一般的なLLMはそれをうまく扱えないんですよね。

  1. これは単純なプレーンテキストの.description.mdサイドカーファイルで、各クリップごとに動画の隣に置いてあります。後でクエリできるようにしていて、例えばClaudeとブレインストーミングして「ロッジのラグジュアリーな部屋の動画を作りたい」と言ったら、どの動画が役立つかを知っている感じです(ファイルを見ながら)。テキストの説明を集約して見つけやすくするためのフォルダもあります。ブログに例を示した画像を添付しました - https://blog.simbastack.com/_media/gvcycx2n.png 2) いいえ、DaVinci Resolveからのものではありません。Framedexはスタンドアロンのパイプラインです。Resolveは関与していません。顔はinsightface(オープンソースのbuffalo_lパック - RetinaFaceによる検出)から取得していて、ローカルでCPU上で動作しています。各クリップでサンプリングしたフレームから顔を検出し、埋め込みを行い、~/.framedex/faces.dbに行を記録します。正直、この部分はローカルDBに蓄積されているのは分かっていますが、どれくらい良いのかはまだテストしていません。近いうちにちゃんと確認します。でも、あなたの広いポイントについては、だからこそframedexは意図的にLLMに顔や場所を扱わせないんです。---- 顔 → insightface / ArcFace埋め込み。決定論的で、クリップ間で比較可能です。ビジョンモデルは大まかな人数カウントを提供するだけで、誰かを特定しようとはしません。場所 → EXIF GPSはexiftoolを通じて、Nominatim/OpenStreetMapで逆ジオコーディングされています。ハードメタデータで、推測ではありません。LLMは得意なことだけをやります:シーンの説明、ムード、ショットタイプ、キーワード、保持/レビュー/削除評価(この最後の部分は議論の余地がありますが)。

アップデート:これのためにサクッとリポジトリを作りました - https://github.com/Simbastack-hq/framedex (MITライセンス) ちゃんとテストはしてないけど、一般化した後にしっかり確認して、もっとアップデートを加えようと思います。TODOリストに大きな二つのことがあります。1) このインデックスを活用して、Claudeの助けを借りてDavinci Resolveで動画編集をもっと早くしたい(今はコンテンツの良いインデックスがあるので)。2) 現在は動画用にこれをやったけど、カメラで撮った何千もの静止画にももっと追加したいんです。整理しないといけないので、これも進めていきます。

私の考えでは、B2CのAIアプリケーションは、パーソナライズされたコンテキストを構築するのが難しいため、構造的に制限されていると思います。ローカルモデルが大規模にボトムアップのコンテキスト収集やタグ付けを行えるなら、これは大きな解放になるかもしれません。

本当にローカルモデルがこれを解放するのでしょうか?ステートレスなモデルAPIでも同じ利点が得られるのでは?使用状況によってはローカルの方が「安い」ことは理解できますが、私たちはずっとクラウドからストレージやコンピュートを高い値段で借りてきましたよね。

これには完全に同意です。ここで、私とClaudeが一緒にブレインストーミングしてリサーチをして、試行錯誤を重ねてここに至りました。でも、私の非技術的な友達が「フォルダ内のすべての動画を整理して」と言えるようになるのは時間の問題だと思います。

完全にローカルで無料のB2C AIアプリを作ったんだ。AIを使って文脈に基づいたファイル名の変更ができるやつね。だから、スクリーンショットをたくさん渡すと、それに基づいて賢く名前を付けてくれるんだ。同じことが動画やPDFにもできるよ。でも、君の言う通り、まだお金を取ることは考えてないんだ。Appleがこれを機能として組み込む気がするからさ。 https://finalfinalreallyfinaluntitleddocumentv3.com/

これはimmichに追加されたら素晴らしい機能になりそうだね!

それかStash(笑)

なんでそんなにスワッピングが必要なのか、ちょっとわからないな。SSDをかなり早く劣化させるし。Gemma 4 31Bの4ビット量子化は、19 GiBくらいのはずなのに、28.4 GiBになってるのはおかしいよね。定期的に画像を入れてるわけじゃないから、どれくらいのメモリが必要かはわからないけど、10 GiB以上はないと思う。アクティビティモニターを見ると、いろんなElectronアプリが動いてるし、モデルを読み込んだHandyやClaude Code用の仮想マシンもあるから、スワッピングの本当の原因はそれだと思う。もしノートパソコンが遅くなったら、そのアプリは役に立たないだろうし、動かなくなるだろうね。