[{"data":1,"prerenderedAt":238},["ShallowReactive",2],{"content-/x-download-auto-transcribe":3,"all-pages-for-dir":218,"related-/x-download-auto-transcribe":219,"og-image-/x-download-auto-transcribe":237},{"id":4,"title":5,"body":6,"category":200,"concepts":200,"description":201,"extension":202,"meta":203,"navigation":204,"ogImage":200,"path":205,"project_name":200,"published":206,"publishedAt":207,"seo":208,"source":200,"stem":209,"tags":210,"todo":200,"unpublished":206,"updatedAt":200,"__hash__":217},"pages/2026-09/2026-09-10/x-download-auto-transcribe.md","Xのダウンロードボタンを押すだけで、動画と文字起こしテキストが揃うようにした。保存フォルダを見張ってwhisperを回す常駐スクリプト",{"type":7,"value":8,"toc":192},"minimark",[9,13,17,26,29,45,49,52,64,67,70,81,84,90,93,96,99,113,116,119,122,145,148,151,162,165,168],[10,11,5],"h1",{"id":12},"xのダウンロードボタンを押すだけで動画と文字起こしテキストが揃うようにした保存フォルダを見張ってwhisperを回す常駐スクリプト",[14,15,16],"p",{},"Xで気になった動画をChrome拡張機能のボタンで落とすと、十数秒後に「文字起こしを開始」のトーストが出る。\n1分もしないうちに「文字起こし完了（20 秒）」のトーストが出て、保存フォルダの下の「文字起こし」フォルダに、動画と同名の.srtと.txtが置かれている。\n2026年9月10日に作った常駐スクリプトtranscribe-watchの動きで、同じ日の午後から実際に使っている。",[14,18,19,20,25],{},"朝に",[21,22,24],"a",{"href":23},"/easytranscribe-whisper-local-transcription","EasyTranscribeの中身を読んで","、文字起こしの材料はopenai-whisperとffmpegだけだと分かった。\nそれなら画面を開いてボタンを押す操作も要らないはずで、動画が置かれるフォルダを見張る形にした。",[14,27,28],{},"結論を先に置く。",[30,31,32,36,39,42],"ul",{},[33,34,35],"li",{},"人の操作はダウンロードボタンを押すことだけになった。ファイルを探す、コマンドを打つ、アプリを開く、のどれも無い",[33,37,38],{},"手に入るのは動画のmp4と、同名の.srt（時刻つきの字幕形式）と.txt（本文だけ）。1分28秒の英語動画は20秒でテキストになった",[33,40,41],{},"テキストになった瞬間に、生成AIでの要約、記事への引用、英語動画の翻訳が同じ手順で済む",[33,43,44],{},"中身はopenai-whisperとwatchdogとトースト用のPowerShellをPythonで束ねた小さなもの。手元のGPUで動き、音声を外部に送らない",[46,47,48],"h2",{"id":48},"何が落ちてくるか",[14,50,51],{},"流れは図1のとおりで、人が関わるのは①だけである。",[53,54,55,60],"figure",{},[56,57],"img",{"src":58,"alt":59},"/images/x-download-auto-transcribe/figure-01.svg","ユーザーがダウンロードボタンを押すと保存フォルダに動画が置かれ、常駐スクリプトが変更通知で気づいて開始トーストを出し、whisperをGPUで実行してsrtとtxtをフォルダに置き、完了トーストを出すシーケンス図",[61,62,63],"figcaption",{},"図1: 人の操作は①だけ。②以降は常駐スクリプトが勝手に進め、開始と完了をトーストで知らせる",[14,65,66],{},"拡張機能が動画を保存すると、常駐スクリプトがフォルダの変更通知で気づく。\n書き込みが終わるのを待ってから「文字起こしを開始」のトーストを出し、whisperをGPUで回す。\n終わったら同じフォルダの下の「文字起こし」に.srtと.txtを置き、「文字起こし完了」のトーストを出す。",[14,68,69],{},"保存フォルダはこうなる。",[71,72,77],"pre",{"className":73,"code":75,"language":76},[74],"language-text","G:\\マイドライブ\\twitter_download\\\n├── 20260910_Ray Dalio_2097714517027282944.mp4\n└── 文字起こし\\\n    ├── 20260910_Ray Dalio_2097714517027282944.srt\n    └── 20260910_Ray Dalio_2097714517027282944.txt\n","text",[78,79,75],"code",{"__ignoreMap":80},"",[14,82,83],{},".srtは時刻つきなので、動画のどこで何を言ったかがそのまま分かる。",[71,85,88],{"className":86,"code":87,"language":76},[74],"1\n00:00:00,000 --> 00:00:05,540\nAlmost every technology boom has created a bubble that creates a bust.\n\n2\n00:00:05,920 --> 00:00:07,680\nAnd the productivity comes along.\n",[78,89,87],{"__ignoreMap":80},[14,91,92],{},".txtは本文だけを1キュー1行で並べたもので、そのまま生成AIに渡せる。",[46,94,95],{"id":95},"テキストになると何ができるか",[14,97,98],{},"動画のままでは、見直すのに動画と同じ時間がかかる。\nテキストになった瞬間に、次の使い方が全部同じ手順になる。",[30,100,101,104,107,110],{},[33,102,103],{},"要約する。.txtをClaudeやChatGPTに渡して「3行で」と頼む。動画を見直す時間がゼロになる",[33,105,106],{},"記事に引用する。.srtに時刻があるので「0分5秒でこう言った」と書ける。この記事の引用もそこから取った",[33,108,109],{},"翻訳する。whisperは言語を自動判定するので、英語の動画は英語のテキストになる。上の動画がそれで、テキストになっていれば翻訳は一瞬で済む",[33,111,112],{},"検索する。テキストなのでgrepやGoogle Driveの検索で中身から探せる。Drive経由でMacからも同じファイルが見える",[14,114,115],{},"以前は、ダウンロードしたあとにファイルを探し、コマンドを打つか文字起こしアプリを開いて動画を選び、出力を開く、という手順を毎回やっていた。\nその全部が消えて、残ったのはダウンロードボタンだけになった。",[46,117,118],{"id":118},"仕組みの要点",[14,120,121],{},"詳細は書かないが、動きを決めている点だけ挙げる。",[30,123,124,127,130,133,136,139,142],{},[33,125,126],{},"監視はフォルダの変更通知だけで、定期巡回はしない。待機中のCPUはゼロで、動画が置かれた瞬間に気づく",[33,128,129],{},"監視するフォルダは4つ。X用とYouTube用の保存先に、Google Driveが使えないときに拡張機能が退避する2つを加えた",[33,131,132],{},"whisperはファイルごとに子プロセスで回す。GPUのメモリ不足で落ちても監視本体は生き残り、メモリも仕事のたびに解放される",[33,134,135],{},"出力は仮名に書き切ってから正式名へ改名する。正式名の.srtと.txtがあれば中身も揃っているので、状態ファイルを持たない",[33,137,138],{},"失敗は1分、5分、30分、2時間と間隔を延ばして再試行し、5回失敗したら諦めてトーストで知らせる",[33,140,141],{},"速度は、5分10秒の動画が64秒（RTX 3070、モデルはlarge-v3-turbo）。実時間の約5倍",[33,143,144],{},"Windowsのタスクスケジューラでログオン時に起動し、通知を逃したときは動画をショートカットに落として手で回せる",[14,146,147],{},"材料はPython 3.11、openai-whisper、watchdog、PowerShellのトースト通知で、外部サービスは使っていない。\n判定はすべて純粋関数に閉じ込め、33件の単体テストで固めた。\n設計はCodexに4回レビューさせ、再起動時の取りこぼし、退避先の監視漏れ、失敗の手動復旧、出力の途中欠けなど7点を実装前に直した。",[46,149,150],{"id":150},"割り切り",[30,152,153,156,159],{},[33,154,155],{},"監視が止まっていた間に届いた動画は処理しない。開始トーストが出ないことで気づけるので、ショートカットに落として回す",[33,157,158],{},"再試行の予定はメモリ上に持ち、監視を再起動すると消える",[33,160,161],{},"Windows専用。Macで動かすならmlx-whisperに差し替えることになる",[14,163,164],{},"自分の動画を人に見せるためのツールではなく、自分が見た動画をテキストとして手元に残すためのツールである。\nダウンロードボタンを押した動画は、押した時点でもう検索も要約も翻訳もできる状態になっている。",[46,166,167],{"id":167},"参考リンク",[30,169,170,175,185],{},[33,171,172],{},[21,173,174],{"href":23},"EasyTranscribe（おまかせ文字起こし）は何でできているか",[33,176,177],{},[21,178,184],{"href":179,"target":180,"rel":181},"https://github.com/openai/whisper","_blank",[182,183],"noopener","noreferrer","openai/whisper（GitHub）",[33,186,187],{},[21,188,191],{"href":189,"target":180,"rel":190},"https://github.com/gorakhargosh/watchdog",[182,183],"gorakhargosh/watchdog（GitHub）",{"title":80,"searchDepth":193,"depth":193,"links":194},2,[195,196,197,198,199],{"id":48,"depth":193,"text":48},{"id":95,"depth":193,"text":95},{"id":118,"depth":193,"text":118},{"id":150,"depth":193,"text":150},{"id":167,"depth":193,"text":167},null,"XやYouTubeからChrome拡張機能で落とした動画を、保存フォルダの変更通知で検知して手元のGPUのwhisperで文字起こしし、同名の.srtと.txtを置く常駐スクリプトtranscribe-watchを作った。操作はダウンロードボタンだけで、開始と完了はWindowsのトーストで知らせる。1分28秒の英語動画は20秒でテキストになり、そのまま生成AIでの要約、記事への引用、翻訳に使える。流れをシーケンス図で示し、仕組みの要点と割り切りも書いた。","md",{},true,"/x-download-auto-transcribe",false,"2026-09-10T00:00:00.000Z",{"title":5,"description":201},"2026-09/2026-09-10/x-download-auto-transcribe",[211,212,213,214,215,216],"文字起こし","Whisper","自動化","Python","Chrome拡張","ローカルAI","qEzOCqYx-pIW1qu6Vkw_raCqMQqzTYJ19mO7MfXr84A",[],[220,222,226,230,234],{"title":221,"path":23,"publishedAt":207},"EasyTranscribe（おまかせ文字起こし）は何でできているか。Windows版の動作環境と、同じものを自分で組むときの材料",{"title":223,"path":224,"publishedAt":225},"確定申告資料92件の一括リネームとGoogleスプレッドシート連携 - Claude Codeによる自動化","/tax-2025-file-rename-spreadsheet-2026-02-12","2026-02-12T00:00:00.000Z",{"title":227,"path":228,"publishedAt":229},"達人Cube自動化の仮説 - Windows UI Automation APIを使ったアプローチ","/tatsujin-cube-automation","2026-01-08T00:00:00.000Z",{"title":231,"path":232,"publishedAt":233},"2026年9月5日の開発日記 - ひと月遅れで届く開示を追う仕組みと、記事1本ごとに走っていた10万字の連鎖","/2026-09-05-diary","2026-09-05T00:00:00.000Z",{"title":235,"path":236,"publishedAt":233},"クラウド会計の帳簿を点検するChrome拡張を自作し、総勘定元帳まで広げた","/accounting-ledger-extension-phase23","https://log.eurekapu.com/og/blog/x-download-auto-transcribe.png?v=2026-09-10T00%3A00%3A00.000Z&title=X%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%99%E3%81%A0%E3%81%91%E3%81%A7%E3%80%81%E5%8B%95%E7%94%BB%E3%81%A8%E6%96%87%E5%AD%97%E8%B5%B7%E3%81%93%E3%81%97%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8C%E6%8F%83%E3%81%86%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%9F%E3%80%82%E4%BF%9D%E5%AD%98%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E8%A6%8B%E5%BC%B5%E3%81%A3%E3%81%A6whisper%E3%82%92%E5%9B%9E%E3%81%99%E5%B8%B8%E9%A7%90%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88&author=Kei%20Komatsu&sig=49531c4266f08f27",1789020839470]