動画からテキストをコピーするのはなぜ難しいのか

Web ページと同じ感覚でトリプルクリックしてコピーしようとして、「あ、動画は文書じゃなかった」と気づく。これはよくある話です。画面に映っている文字は映像の一部、つまり H.264 や HEVC からデコードされたピクセルの集合体です。各フレームはただのビットマップ。ターミナルの出力も、スライドの箇条書きも、テロップの文字も、すべて「描かれた絵」であってテキストではありません。

普通のスクリーンショット OCR より厄介な理由は 3 つあります。

これらはどれも OCR エンジン側で解決できる問題ではありません。OCR より上流、映像が画面に届くまでの過程の話です。逆に言えば、YouTube のプログラミング講座、Udemy 日本のオンライン講義、ウェビナー Q&A の録画、社内 Loom など実用上の大半のケースでは、画面は普通に描画され、普通にキャプチャできます。あとは「正しいフレームで止めたら、そのプレイヤーに合った道具を選ぶ」だけです。

まずは Live Text を試す(どこで動くかを正確に把握する)

動画が Safari 内で再生されているなら、Apple のテキスト認識(Live Text)が一番楽な経路です。

  1. 動画を一時停止します。
  2. 停止したフレームの上で右クリックします。
  3. 「テキスト認識を表示」を選びます(システムが選択可能なテキストを検出したときだけ表示されます)。
  4. 欲しい部分をドラッグで選択してコピーします。

これが成立するのは、Safari が WebKit ベースで、Apple が WebKit と Vision フレームワークを密に統合しているからです。一時停止すると、WebKit が現在のフレームを静止画としてシステムに渡し、Vision が認識し、プレイヤー側に選択レイヤーが重なります。アプリ追加もホットキー暗記も不要です。

ただし、ほとんどの記事が触れていない重要な制約があります。動画フレームに対する Live Text は Safari 限定です。Apple は他のブラウザに同じフックを公開していません。Chrome や Firefox の GPU コンポジティング経路は、Live Text が見ているレイヤーを通りません。macOS Sonoma・Sequoia の時点で、Chrome・Firefox・Brave・Arc・Edge では一時停止しても「テキスト認識を表示」は出ません。Mac の Chrome は普通の画像なら Live Text が効きますが、video 要素の現在フレームには効きません。

Live Text が静かに効かない場面

Safari の外に出た瞬間、動画フレーム上の Live Text は使えなくなります。実際のユースケースのかなりの割合がここに該当します。

これは Live Text を貶しているわけではありません。写真・プレビュー・メモ・Safari 内の画像と動画では、Live Text は実によくできたシステム機能です。ただ「チュートリアルが Chrome、録画が Loom、スライドが Zoom 再生」という現実のシナリオには合わないというだけのことです。

あらゆる場面に通用するワークフロー

私たちが日常的に使っていて、Cheese! OCR を設計するときの軸にもしているのは、OCR を「ブラウザの機能」ではなく「OS レベルの操作」として扱う考え方です。

  1. 動画を一時停止する。スペースキーを押し、プレイヤーを落ち着かせます。
  2. OCR ホットキーを押す。Cheese! OCR の既定は ⇧⌘E。画面が暗くなり、十字カーソルが現れます。
  3. テキストのある領域をドラッグ選択する。チュートリアルのターミナル、スライドの箇条書き、ウェビナーの Q&A パネル、必要な範囲を選びます。
  4. 貼り付ける。認識されたテキストはクリップボードに入っています。Cmd+V でメモ・エディタ・Slack のどこにでも貼れます。

このフローがどのプレイヤーでも成立するのは、Cheese! OCR がブラウザにも video 要素にも会議クライアントにも「何を表示しているか」を尋ねないからです。macOS のスクリーンキャプチャ API でディスプレイのピクセルを取得し、その上で Apple Vision をローカル実行します。OS から見れば ⇧⌘4 と同じ操作 — 画面に描かれていて、かつ DRM で能動的に隠されていないものなら、何でもキャプチャして OCR できます。

2 つの実務上の利点に触れておきます。1 つ目はオンデバイス処理であること。Apple Vision は Mac 上で完結し、キャプチャしたフレームは外に出ません。Cheese! OCR にはネットワーク権限がそもそもありません。社外秘の会議録画や未公開の講座教材を扱うときに、これは普段以上に効いてきます。2 つ目は履歴が残ること。Cheese! OCR は最近の認識結果を検索可能なリストに残します。チュートリアル動画から連続して 4 つコードスニペットを切り出すとき、最新を取ったから前の 3 つが消える、ということはありません。

このワークフローが解決する実例

プログラミングのチュートリアル

YouTube・Udemy 日本・Coursera・Egghead・Frontend Masters。講師が画面でコードを打ち、その通りにエディタに入れたいけれど打ち直したくない。一時停止して OCR、貼り付け。最近の Apple Vision はモダンなプログラミングフォントの画面録画に対してかなり強く、たいていはインデントを直すぐらい、低ビットレートのストリームでまれに l1 を直すぐらいで済みます。

オンライン講義のスライド

録画講義で講師がスライドの定義・公式・引用を読み上げています。そのスライドは 20 秒で消えて次の章に進んでしまう。一時停止 → スライド領域を OCR → 続きを聴く。シーク戻して止めて打ち直すよりずっと速いはずです。

ウェビナー Q&A・チャット欄

録画ウェビナーのチャット欄には、登壇者がライブで答えたけれど発言で繰り返さなかった「もっとも有用な質問」が含まれていることが多いです。チャット欄を OCR すれば質問の正確な文言が手元に残ります。

箇条書きスライドのプレゼン動画

カンファレンス動画、社内全体会の録画、営業キックオフの動画。登壇者が 5 つの箇条書きをサッと流す。それを議事メモに残したい。スライドを OCR して貼り付け、終わり。

同僚の Loom や Zoom レビュー動画

同僚がツールの設定方法を Loom で説明していて、画面にコマンドラインのスニペットが映っています。再生は Chrome か Loom デスクトップアプリ。Live Text は手伝えません。グローバルホットキーの OCR ツールなら手伝えます。

体感で効く小さなコツ

IINA でフレーム送りを使う。IINA は MPV ベースの完成度の高いオープンソース Mac プレイヤーです。矢印キーで 1 フレームずつ進めます。欲しい文字が 1 秒未満しか表示されない場合でも、IINA なら最も鮮明なフレームに正確に止めて OCR できます。

高解像度の瞬間で止める。講師の引きの絵と、コードのズーム録画を行き来する動画なら、ズームしているフレームで OCR します。引きの絵に映る同じコードはコーデックが小さすぎて保てません。

文字が小さければプレイヤーを拡大してから止める。YouTube などウェブプレイヤーの多くは Cmd++ で拡大できます。1 段階拡大するだけで 12px の字幕が 18px になり、認識精度が目に見えて上がります。

履歴で複数フレームを束ねる。長いコードブロックは 1 フレームに収まらないこともあります。フレームごとにキャプチャしておけば、Cheese! OCR が検索可能なリストに残してくれるので、後でエディタで継ぎ合わせれば中間結果を失わずに済みます。

クローズドキャプションがあるなら OCR より字幕。動画に字幕があり、知りたいのが台詞だけなら、字幕の方が焼き込み字幕の OCR より常に正確です。動画フレーム OCR は、字幕に含まれない要素 — コード・スライド箇条書き・チャット欄・画面共有ドキュメント — に向く道具です。台詞起こしの代替ではありません。

使う前に知っておきたい注意点

動画フレーム OCR はよく動きますが、魔法ではありません。正直に書いておきます。

どれも致命的というほどではなく、普通のスクリーンショット OCR と同じトレードオフが、動画は二重圧縮(コーデック+プレイヤースケーリング)のぶんだけ少し増幅されているだけです。意図的に一時停止し、きれいなフレームを取れば、現代の Apple Vision のチュートリアル録画に対する精度は、打ち直しを省けるレベルで安定しています。

一行でまとめるなら、動画は静止画の連なりなので、きれいな静止画さえ取れれば OCR は効く。まず一時停止、次にキャプチャ、最後に OCR。あとは目の前のプレイヤーに合わせて道具を選ぶだけです。