M1 MaxコンピュータとローカルMLモデルで669GBのGoPro映像をインデックス化
(iliashaddad.com)- 2,207本のGoProサイクリング映像を一つひとつ見直さずに欲しい瞬間を見つけるため、ローカルMLモデルで映像をインデックス化・検索し、bestクリップをDaVinci Resolveのタイムラインへ直接送信
- M1 MaxのようなApple Siliconに最適化されたデスクトップアプリ版を使い、対話型エージェントに欲しいシーンを依頼すると編集タイムラインへ直接転送
- OpenAI Whisperによる文字起こし、フレーム分析(顔認識・物体検出・画面テキスト・シーン説明)、ベクターDB埋め込みで構成されたインデックス化パイプラインを構築
- 628本の映像(668.68GB、15時間13分18秒)をインデックス化するのに合計67時間40分42秒の計算が必要で、再生時間比で約4.4倍遅い速度
- すべての処理をローカルGPU/CPUで実行するため、クラウドなしで大容量映像ライブラリを検索可能で、現在も開発進行中
プロジェクト概要と動機
- サイクリングの旅で撮影した2,207本のGoPro映像を1台のSSDに保存しており、その中の印象的な瞬間を検索したいが、全体を見直す時間が足りない
- GoProでほとんどの瞬間を撮影してきたが、良い瞬間を見つけるには映像全体を最後まで見なければならず、非効率
- サイクリング履歴: 2024年 Casablanca→Imsouane(5日間で470KM超)、2023年 Kenitra→Tangier(1日半で220KM)、その間にマウンテンバイク旅行も実施
- この問題を解決するためにedit-mindプロジェクトを自作
- GitHub Repo : https://github.com/IliasHad/edit-mind
デスクトップアプリを使う理由
- Apple Silicon最適化のデスクトップアプリ版を選択し、対話型エージェントで欲しい瞬間を見つけてDaVinci Resolveの編集タイムラインへ直接送れる
- Docker版はM1 Max GPUにアクセスできないため、GPU性能を活用できない
- デスクトップアプリはsource-available版と似たインデックス化プロセスを使用
インデックス化プロセス
- デスクトップアプリでフォルダを選択すると、スマートフォン映像と区別するため**
GXで始まる映像**だけを探索 - 音声トラックがある場合はOpenAI Whisperモデルで映像全体を文字起こし
- その後、フレーム分析パイプラインを実行し、映像を1秒単位(1fps)の個別シーンに分割
- カスタム顔データを使った顔認識プラグイン、物体検出、画面内テキスト、ショットタイプ、シーン説明を含む
- シーンの顔・文字起こし・説明データを文書テキストとして埋め込みし、ローカルのベクターDBに保存
- シーンフレームは画像検索用の視覚埋め込みベクターDBコレクションに埋め込み、シーン音声も同様に処理
- 最終的に映像情報を格納した3つのベクターDBコレクションを確保
- 位置メタデータ、カメラ名、認識された顔、検出された物体、画面テキスト、文字起こし、各シーン説明などを含む
パフォーマンス指標
- 端末のGPUとCPUで処理したインデックス化映像の測定値であり、プロジェクトは開発中のため最終値ではない
-
全体指標
- インデックス化された映像: 628本
- 総映像容量: 668.68 GB
- 総映像時間: 15時間13分18秒
- 総計算時間: 67時間40分42秒
- 再生比速度: 0.22倍、つまり再生時間比で約4.4倍遅い
- 分析したフレーム数: 57,537枚
-
ステップ別分析(総時間 / 映像あたり平均 / 計算比率)
- 文字起こし(Transcription): 25時間12分54秒 / 2分25秒 / 37.3%
- フレーム分析(Frame analysis): 24時間55分42秒 / 2分23秒 / 36.8%
- シーン生成(Scene creation): 48分0秒 / 5秒 / 1.2%
- テキスト埋め込み(Text embedding): 36分42秒 / 5秒 / 0.9%
- 視覚埋め込み(Visual embedding): 11時間49分17秒 / 1分9秒 / 17.5%
- 音声埋め込み(Audio embedding): 4時間18分7秒 / 27秒 / 6.4%
検索機能
- チャットアシスタントで映像について質問する方式を好み、結果をDaVinci Resolveの編集タイムラインへすぐ送るオプションを提供
- 高度モードのインデックス化でQwen2.5-VL-7B-Instructモデルを使うと、映像をよりよく理解・描写したインデックスデータを得られるが、インデックス化速度はさらに遅くなる
- この方法でGoPro映像をインデックス化し、欲しいシーンを検索・転送して良いクリップとして映像を制作
ハードウェア比較と開発状況
- **RTX 3060(12GB VRAM)**のようなNVIDIA GPUで実行すると、M1 Maxより速かった
- プロジェクトは依然として開発中で、精度と速度最適化のための改善作業が進行中
使用プロンプト例
- 「自転車に乗っている最中に犬が吠えるすべてのクリップを探して」
- 「自転車旅行で最も景色が良くて興味深い瞬間でハイライトリールを作って」
- 「風の音が聞こえる最も速い一人称視点のライディング場面を見せて、DaVinci Resolveへ送信、重複シーンは削除」
1件のコメント
Hacker Newsのコメント
数日前にほぼ同じマシンで似た手法を使って同じことをやっていて、しかもこれもHNの1ページ目に載っていたのが面白い
https://news.ycombinator.com/item?id=48222733
https://blog.simbastack.com/indexed-a-year-of-video-locally/
このプロジェクトは知らなかったけど興味深い
Framedexに写真関連の機能をさらに追加しているところで、ローカルでできることが本当に増えてきていて、今はわくわくする時期だ
記事もプロジェクトもどちらも良かったし、ローカルモデルはどんどん良くなっている
こういう作業はローカルLLMで行うことになりそうだ
速くて小さくて強力なLLMをローカルで動かして、画像・動画・文書のような個人データをインデックス化し、補強し、その補強されたメタデータでタグ付けする感じだ
人ごとにまとめたければタグ付きメタデータを検索してグループ化すればいいし、説明文で画像を探したければタグ付きメタデータを使えばいいし、何かを整理したければタグ付きメタデータを使えばいい
これでファイル整理のカオスが終わることを期待している
「フレーム分析パイプラインを実行すると、動画を別々のシーンに分ける(各1秒または1fps)」と「分析したフレーム57,537枚」を見ると納得がいく
この数字は「669GB」よりずっと現実的に聞こえるし、実際に処理されたフレーム全体のサイズは10〜30GB程度だったのではないかと思う
自宅で自分でやるなら常に実用性の計算が必要だという意味で、作業をけなすつもりはない
「合計計算時間67時間40分42秒」なら、こういう処理を速くできる有料の選択肢があるのかも気になる。単にGPUインスタンスを立てればいいのだろうか?
正確な結果を得るのに元のフル品質は必要ないと考えていて、実験結果もそうだった
これまでのところ、12GB VRAMのRTX 3060のようなNVIDIA GPUはM1 Maxよりかなり速く、今も速度と精度の最適化を続けている
予想以上に楽しかった機能は、Google PhotosとApple Photosがこの10年の自分や子どもたちの人生のさまざまな瞬間を思い出写真やまとめとして送ってくれることだった
将来的にはAIが見栄えの良い短いまとめ動画を作ってくれるのがますます簡単になると思うので、子どもの動画をもっとたくさん撮る方向にかなり楽観的だ
Spotify年末まとめのような動画を生成する小さな実験をしてみたことがあり、プレビュー動画はここにある https://github.com/IliasHad/edit-mind/tree/expirement/year-i...
数年後には「BIKE BRANDの最新の低価格自転車をご覧ください。以前BIKE BRANDの自転車に乗っていたのを覚えていますよね」のようなものを受け取ることになりそうだ
DaVinci 21にはAI IntelliSearchというインデックス機能が内蔵されている
作業をけなすつもりはないが、今では多くのユーザーに提供されている機能だ。名前にAIが入っているので、おそらくStudioユーザー専用の可能性が高い
ただ、動画をクラウドにアップロードするのか、それともローカルで処理するのかが気になる
それから、動画内の顔にラベルを付ける助けになるようにユーザー独自の顔データを提供できるのかも気になる
Adobe Premiere Proにも似た機能があるようだが、クラウド処理だと理解している
よくできている
エージェント経由でリールをどう作るのかはよく分からなかった
画像リンクを受け取って、何らかの動画編集ツールにAIツール呼び出しをしてリールを作るのか? それとも特定のクエリでインデックスから返されたタイムスタンプの前後を切り出してつなぎ合わせる方式なのか?
エージェントに依頼すると、Ollamaモデルが要求を理解し、利用可能な検索ツールを使う。検索は文字起こしテキスト、顔、視覚情報、音声、またはその組み合わせで行える
ClaudeやChatGPTがオンライン情報を探すためにWeb検索ツールを使うのと似たやり方だ
その後、Ollamaで動画シーンを絞り込み、より正確で重複の少ないシーンを見せて、その結果をDaVinci Resolve APIに送って動画クリップのタイムラインを作る
ポルノのまとめにも使えるのか?
あるいは検閲解除モデルが必要だろうが、ビジョン系でも通用するのかは分からない
シーン検出や顔認識のためにYOLOのファインチューニングのようなものも追加したくなるかもしれない
Redditにプロジェクトを投稿したときもまったく同じ質問を受けた
DeepSeekがローカルで動くので、こういう用途に役立つだろうか?
M1 Max CPUがARM/SoCで、11世代Intel i9と比較できるレベルだと知って驚いた
自分は正しく理解しているだろうか? Windows ARMでもこうしたCPUで同程度の性能になるのだろうか?
参考: https://www.cpubenchmark.net/compare/4585vs4245/Apple-M1-Max...
「統合」メモリのおかげでシステムメモリ全体をVRAMのように使えること、そして専用のAI補助アクセラレータがあることだ
この2つによって、Apple SiliconチップはこうしたAIモデルのワークロードで一般的なCPUを圧倒できる
Windows ARM側がどの程度いけるのかは分からないが、Qualcomm Snapdragonチップを使っていることは知っている
M1 Maxのメモリ帯域幅は400GB/sで、最新の最上位Snapdragon X2 Eliteでも228GB/sだ
より広いバスとより低いレイテンシのため、まったく勝負にならない
まだこのプロジェクトをWindowsマシンやそうした構成のマシンで試したことがない
https://archive.is/O6CLQ
記事を読もうとしたが、メインのWebサイトが残念ながらCloudflareエラーを返していた
リンクはこちら https://iliashaddad.com/blog/i-indexed-669-gb-of-my-gopro-vi...