😽

Kindleのスクショ→NotebookLMを自動化してみた

に公開

概要

Kindle のページを自動でスクショして PDF 化し、NotebookLM に取り込んで学習した手順をメモします。

背景・やりたいこと

  • NotebookLM で技術書の要点抽出・検索を行いたい。
  • Kindle コンテンツはそのままでは扱いづらいので、PC 画面を自動キャプチャ → PDF 化 → NotebookLM へ投入する流れを整備。

やったこと

スクリーンショット(自動化)

  • ページ送り位置を決め、クリック → 画面変化待ち → キャプチャを自動化。
  • 実行している処理
for i in range(1, ITERATIONS + 1):
    # 画面キャプチャ(必要に応じてトリミング)
    img = _capture()
    img = _prepare_for_ocr(img)
    if getattr(img, "mode", "RGB") in ("RGBA", "P"):
        img = img.convert("RGB")

    # 前ページとの類似度で早期停止
    if EARLY_STOP_ENABLED and prev_page_img is not None and i > EARLY_STOP_MIN_ITER:
        if _images_almost_equal(prev_page_img, img, EARLY_STOP_DIFF_THRESHOLD):
            img_path = run_dir / f"{i}.png"
            img.save(img_path)
            image_paths.append(img_path)
            break

    # 画像を保存し、次ページへクリック
    img_path = run_dir / f"{i}.png"
    img.save(img_path)
    image_paths.append(img_path)
    prev_page_img = img

    time.sleep(WAIT_BEFORE_CLICK)
    _click_target()  # CLICK_POINT でページ送り

    # 変化が起きるまで待機(タイムアウトつき)
    if i < ITERATIONS:
        changed = _wait_for_change()
        if not changed:
            time.sleep(WAIT_AFTER_CLICK)

PDF 化

  • 自動キャプチャ後、Pillow で画像を結合して PDF 化
output_pdf = run_dir / "combined.pdf"
pil_images = []
for p in image_paths:
    im = Image.open(p)
    if im.mode != "RGB":
        im = im.convert("RGB")
    pil_images.append(im)
first, rest = pil_images[0], pil_images[1:]
first.save(output_pdf, format="PDF", save_all=True, append_images=rest)

NotebookLM 取り込み

  • 生成した combined.pdf を NotebookLM のソースとして追加し、質問や要約に活用。
  • 大きい PDF エラーになりがちなので、分割すると扱いやすい。

今後に…

  • 検索可能 PDF(不可視テキスト重畳)の安定化。
  • 画質と容量の最適化。

Discussion