Plaud Note Pro の録音と文字起こしを、毎晩 BigQuery に取り込んでいます。Web 版が使っている内部の API を、保存したログインの Cookie で呼ぶ形です(全体の構成はGarmin・Plaud・iPhone のライフログを BigQuery に自動で集めた:Cloud Run と手元の Mac を使い分けた設計)。この記事では、うまくいったことと、つまずいたところを紹介しようかと思います。
- 文字起こしは、Plaud のものを使い、足りない分だけ Mac で文字起こししています。 クラウドの GPU はいりませんでした
- 止まった期間は、後から埋め直せました。 取れていた音声は GCS から処理し直し、取れなかった日は Plaud の API から取り直しています
- つまずいたのは、ログインのセッションと、Mac での定期実行でした
うまくいったこと
文字起こしは、Plaud のものを使う

最初は、クラウドの GPU(Cloud Run の L4)で全部文字起こしするつもりでした。実物を調べると、録音は7日分で約13.7時間(1日平均約2時間)で、Plaud 側で文字起こし済みのものは API から取れました。
そこで、Plaud の文字起こしがあればそれを使い、ないものだけ Mac(Apple Silicon)の mlx-whisper で文字起こしする形にしました。一番大がかりだったクラウドの GPU の部分が、まるごといらなくなりました。
Mac では1日2回、未処理の録音をまとめて文字起こしします。無音は Silero VAD で落としてから渡すので、whisper が無音から存在しない文章を作る(ハルシネーション)のも抑えられます。
止まった期間を、後から埋め直せる
止まり方によって、埋め直し方が2つあります。
- 音声は取れていたが、文字起こしや BigQuery への書き込みが止まった:GCS に残っている音声から、処理だけをやり直す
- 収集そのものが失敗した(ログインが切れた夜など):ログインし直してから、Plaud の API で過去の日付を指定して取り直す
どの処理も何度動かしても同じ結果になるので、どちらも同じ日を流し直すだけで済みます。8月20日のまとめは、最初は録音が空でしたが、後から文字起こしが追いついて作り直すと「3ファイル・発話193分」になりました(この日は平均より長く録っていました)。
つまずいたところ
| 起きたこと | 原因 | どう直したか |
|---|---|---|
| 自動でログインできない | Google のログインが、自動操作のブラウザを止める | 普段の Chrome の Cookie を読み取って保存する |
| 夜のジョブが 401 で失敗する | セッションが、アクセスのない時間で切れているらしい | 6時間ごとに API を1回呼ぶ(効くかは確かめ中) |
| 文字起こしが毎回失敗する | launchd の PATH に Homebrew がなく、ffmpeg が見つからない | スクリプトで PATH を足す |
| Cookie の読み取りが5日間失敗する | Cookie のデータベースに、書きかけのジャーナルが残っていた | コピーを一度書き込み可能で開いて、ロールバックさせる |
| セッションの延命が空振りする | Chrome が2つ動いていて、別の Chrome を開いていた | ブラウザを開くのをやめ、API を呼ぶ形にした |
Google のログインは、自動操作のブラウザを通さない
最初は Playwright でログインして Cookie を保存するつもりでしたが、Google のログイン画面が、自動操作のブラウザを「安全でないブラウザ」として止めました。
そこで、普段の Chrome の Cookie のデータベースから、ログイン済みのセッションを読み取るようにしました(pycookiecheat で、キーチェーンの鍵を使って復号)。API が通ることを確かめてから Secret Manager に保存し、毎晩のジョブはそれを使います。Plaud は、Garmin と違ってブラウザの外からでも API が通りました。
ただ、セッションは思ったより短命でした。7月の調査では12日以上持つように見えましたが、8月には夜のジョブが9日続けて 401 で失敗し、8月22日にログインし直したあとも約1.7日で切れました。固定の有効期限だけでなく、アクセスのない時間で切れている可能性があります。今は、Mac から6時間ごとに API を1回呼んでいます。これで防げるかは、まだ確かめているところです。

launchd から動かすと、ffmpeg が見つからない
launchd から動かしたプログラムの PATH は /usr/bin:/bin 相当しかなく、Homebrew の ffmpeg(/opt/homebrew/bin)が見つかりません。7月30日に定期実行を始めてから8月11日に気づくまで、文字起こしは毎回失敗していました。ターミナルから動かすと成功するので、気づきにくいところです。
スクリプトの先頭で PATH を足しています。
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
Cookie のデータベースが、読み取り専用では開けない
Cookie は、Chrome の Cookie のデータベース(SQLite)のコピーから読んでいます。書きかけのジャーナルが残っていると、読み取り専用で開いたコピーがエラーになり、Cookie を1つも読めません。この状態が5日間続いていました。
コピーを一度書き込み可能で開けば、SQLite が自動でロールバックします。Chrome を再起動しなくても直りました。
5日間も気づけなかったのは、読めなかった理由をログに出していなかったからです。「Cookie がない」と「読めなかった」が同じに見えていたので、理由をログに残すようにしました。
延命のページが、別の Chrome に開かれていた
切れたセッションは、Chrome で web.plaud.ai を開くと戻ります。最初は、AppleScript で Chrome にページを開かせていました。
ところが、この Mac では、別の自動化のために専用のプロファイルの Chrome も動いています。tell application "Google Chrome" は2つを区別できず、ページはログインしていないほうに開かれていました。延命は空振りで、もう一方の自動化のタブも乱していました。
ブラウザを開くのはやめ、保存した Cookie で API を1回呼ぶ形に変えています。
これから考えていること
Plaud Note Pro には、使い続けるうちに不満も出てきました。
- 録音を始めるのを忘れる
- いつも持ち歩いているわけではないので、録れていない日がある
- 音声ファイルを取り出せるのが、公式のサイト(Web 版)からだけ
- そのために、ログインのセッションを保ち続けるのが割と面倒
そこで、録音してクラウドに送るところまでを、スマホのアプリとして自分で作れないか考えています。スマホならいつも持ち歩いていますし、音声ファイルを自分の送り先に直接送れれば、ログインのセッションを保つ手間もなくなります。まだ検討している段階です。
使っているレコーダー
カードサイズのボイスレコーダーです。レビューはこちら。
気をつけていること
- 公式の API ではありません。 Web 版が使っている内部の API を、自分のアカウントの自分のデータに限って、1日数回呼んでいます。仕様が変われば、予告なく動かなくなります
- 録音には、相手の発言や仕事の情報が入ります。 録るときは相手の了承と、勤務先のルールを確かめる必要があります
- 保存した Cookie は Secret Manager に置き、コードには書いていません
あわせて読みたい
