見出し画像

PDF圧縮できない原因|縮まないPDFを診断して分かったこと

NotebookLMへ200MB以上あるPDFを入れるために、Claudeに圧縮ソフトを作らせてみた。ところが試してみると、同じ設定でも縮むPDFと縮まないPDFがある。フリーソフトで実験しても自作ツールでも結果はほぼ同じだった。

原因はツールではなくPDFの中身だった。そしてさらに調査を進めると、NotebookLMで弾かれる理由も単純な容量超過だけでは説明できなかった。

この記事はPDF圧縮の手順ではなく、「なぜ縮むのか」「なぜ縮まないのか」を観察した記録である。



まとめ

  • 圧縮するだけならフリーソフトで十分であるが、細かい機能をつけるなら自作してもよい

  • PDFが縮む・縮まない理由はフォーマットによって全部違う

  • 圧縮の前に「何が入っているか」を診断することが先決

  • 文字数カウントは正確な判定基準ではなく、操作のトリガーとして使う


注意点

この記事は技術的な観察記録だ。ツールの配布はしないし意味もない。手順の再現性も保証しない。PDFの仕様や挙動はファイルによって大きく異なる。


PDF圧縮できない問題を調べ始めた

最初に疑ったのはコードだった。

圧縮処理は動いているのにファイルサイズが変わらない。エラーも出ないし、ログも正常に見える。原因を調べるために、まずPDFの中身を診断することにした。PDFは「コンテナ」なので、中に何が入っているかによって圧縮の余地が全然違う。画像の圧縮フォーマットを調べると、CCITTFaxDecodeというものが大量に出てきた。


PDF圧縮できない原因はコードではなかった

PDFの中身を診断すると、画像の圧縮フォーマットが複数混在していることがわかった。フォーマットによって「縮まない理由」が全部違う。詳細は付録Fにまとめた。

縮まないPDFには、縮まない理由がある。


PDFが縮まない理由はフォーマットごとに違う

今回、同じDPI・画質設定でフリーソフトと自作ツールを比較した。

$$\begin{array}{|l|r|r|r|}
\hline
\text{ファイル} & \text{元サイズ} & \text{フリーソフト} & \text{自作ツール} \cr
\hline
\text{CCITT主体} & \text{328MB} & \text{22MB} & \text{24.6MB} \cr
\hline
\text{JPX主体} & \text{281MB} & \text{80MB} & \text{73.4MB} \cr
\hline
\text{JPX主体} & \text{414MB} & \text{136MB} & \text{128.8MB} \cr
\hline
\end{array}$$

結果はほぼ同等だった。フリーソフトでも縮む。

ただし、フリーソフトは「なぜ縮むか」を教えてくれない。CCITTFaxDecodeが多いから縮まない、JPXDecodeだからDPIを下げないと縮まない、非画像部分が重いからGhostscriptが必要、という診断ができない。縮まなかったときに次の手が打てないのが問題だ。


PDF圧縮より先にPDF診断が必要だった

まず診断してから圧縮するという順番が重要だとわかった。圧縮ツールを作ろうとして、最終的に「診断が先に必要だった」という結論に至ったのは少し皮肉だが、それがこの作業の一番の収穫だった。


NotebookLM PDF制限は容量だけでは説明できない

NotebookLMでは文字数が500,000語という制限もあるため、結合ソフト・圧縮ソフト共に文字数カウント機能をつけた。

文字数を確認しながら分割・再結合する操作をしたら、入れられるようになった。文字数カウントは正確な判定基準ではなく、操作のトリガーだったのかもしれない。その操作の過程でPDFの構造が整理されて、入れられるようになった可能性が高い。

また、大量のPDFをNotebookLMで扱う場合、複数ファイルを結合してソース数を減らすことで、コンテキストの断片化を防ぎ回答精度が上がるという利点もある。圧縮・結合という操作は、NotebookLMをうまく使うための前処理として機能する。


FAQ

Q. PDFの画像フォーマットはどうやって調べればいい?
A. PDF診断ツールやライブラリを使うと、CCITTFaxDecodeやJPXDecodeなどのフィルター情報を確認できる。圧縮前の切り分けとして有効だ。

Q. NotebookLMで通ったPDFと通らなかったPDFの違いは何だった?
A. 観測上はファイルサイズだけでは説明できなかった。OCR層やフォント構造の違いも影響している可能性がある。

Q. PDFを分割して再結合すると通ることがあるのはなぜ?
A. PDF内部構造が整理されるためと考えられるが、現時点では推測の域を出ない。再現条件は明確ではない。

Q. 圧縮で画質を落とすべきか、構造を直すべきか迷ったら?
A. まず診断する。原因が画像なのかフォントなのかで有効な対処は変わる。


付録A:PDFの画像フォーマット一覧

$$\begin{array}{|l|l|l|l|}
\hline
\text{フィルター} & \text{方式} & \text{対象} & \text{圧縮の余地} \cr
\hline
\text{DCTDecode} & \text{JPEG} & \text{グレー・カラー} & \text{△ DPI次第} \cr
\hline
\text{CCITTFaxDecode} & \text{FAX圧縮} & \text{白黒2値のみ} & \text{❌ 既に最適} \cr
\hline
\text{JPXDecode} & \text{JPEG 2000} & \text{グレー・カラー} & \text{❌ 既に高効率} \cr
\hline
\text{JBIG2Decode} & \text{白黒高圧縮} & \text{白黒2値のみ} & \text{❌ 外部ツール必要} \cr
\hline
\text{FlateDecode} & \text{zlib} & \text{何でも} & \text{○ JPEG化で縮む} \cr
\hline
\text{LZWDecode} & \text{古いzlib} & \text{何でも} & \text{△ 自動デコードされる} \cr
\hline
\text{RunLengthDecode} & \text{連長圧縮} & \text{何でも} & \text{△ ほぼ存在しない} \cr
\hline
\end{array}$$

補足:DPI推定はA4固定ではなく、PDFのMediaBoxから実際のページサイズを取得する必要がある。A3・B4・変形サイズのPDFではDPIがずれて正確なダウンサンプルができない。


付録B:縮まない理由の類型と対処

$$
\begin{array}{|l|l|l|}
\hline
\text{パターン} & \text{原因} & \text{対処} \cr
\hline
\text{CCITTFaxDecodeが多い} & \text{白黒2値で元が最適圧縮済み} & \text{高DPIのみJPEG化} \cr
\hline
\text{JPXDecodeが多い} & \text{JPEG 2000は既に高効率} & \text{DPIダウンサンプル} \cr
\hline
\text{非画像部分が重い} & \text{フォント・テキスト構造} & \text{Ghostscriptが必要} \cr
\hline
\text{JBIG2Decodeが多い} & \text{外部バイナリ必要} & \text{対応不可} \cr
\hline
\text{元が高圧縮済み} & \text{圧縮の余地がない} & \text{DPIを下げる} \cr
\hline
\end{array}
$$


付録C:PDFのフォント種類とNotebookLMの挙動

$$
\begin{array}{|l|l|l|}
\hline
\text{フォント種類} & \text{特徴} & \text{挙動} \cr
\hline
\text{MS-Gothic・MS-Mincho} & \text{本物のテキストPDF} & \text{文字数が多くなりやすく弾かれやすい} \cr
\hline
\text{HiddenHorzOCR・HiddenVertOCR} & \text{スキャン画像に隠しテキスト層} & \text{語数が少なくなりやすく通りやすい} \cr
\hline
\end{array}
$$

※NotebookLMの判定基準は文字数だけではない可能性がある。観測ベースの知見。


付録D:圧縮で「壊れる」パターン

縮まないとは別に、圧縮後に画像が壊れるケースがある。

代表的なのがCMYK画像だ。CMYKは印刷用のカラーモードで、古い発掘報告書の図版に使われていることがある。これをRGBに変換してJPEGで書き出すと、色が反転して黒つぶれが起きる。PDFビューワーはCMYKを正しく解釈して表示するが、圧縮ツールが内部でRGB変換を挟むと元の見え方と全く違う結果になる。CMYKはRGB変換せずそのままJPEGで書き出し、ColorSpaceを保持することで解決できる。


付録E:NotebookLMにソースを追加できない理由一覧

制限超過

ファイルサイズが200MBを超えている
PDFを圧縮するか、複数に分割してアップロードする。
(Google公式ドキュメント・確認済み)

文字数が500,000語を超えている
日本語は1文字≒1語換算。ファイルを分割して複数ソースに分ける。ただし実際の挙動はこの基準と一致しないケースがある。
(Google公式ドキュメント・確認済み/実挙動は観測ベース)

ソース数が上限に達している
無料版50個・Pro版300個。新しいノートブックを作るか不要なソースを削除する。
(Google公式ドキュメント・確認済み)


PDFの構造・中身の問題

テキストレイヤーがない(画像PDF)
スキャンのみのPDFはNotebookLMが文字を読み取れない。GoogleドライブにアップしてGoogleドキュメントとして開くとOCRがかかる。ただし古い日本語印刷物はOCR精度が低い場合がある。
(一次資料確認済み・記述なし/対処法は観測ベース)

隠しテキスト層(HiddenHorzOCR・HiddenVertOCR)
スキャン画像の上にOCRテキストを透明な層として重ねた構造。語数が少なくカウントされるため、逆に通りやすいこともある。山王廃寺(MS-Gothic主体)は弾かれたが、鳥羽遺跡(HiddenHorzOCR主体)は通った。
(一次観測ベース)

フォント・エンコーディング問題
古い日本語PDFに含まれるDFPLeiSho・DFPHSGothic(Identity-H)や90ms-RKSJ-H(Shift-JIS系)はテキストを正しく抽出できないことがある。GhostscriptやAcrobatで再書き出しすると改善する場合がある。
(一次観測ベース)

フォント未埋め込み
フォント情報がPDFに埋め込まれていない場合、テキスト抽出が失敗することがある。Acrobatで「名前を付けて保存」して再書き出しする。
(観測ベース)

パスワード保護・コピー制限
パスワードがかかっているか、テキストのコピーが制限されているPDFは読み取れない。
(一次資料確認済み・記述なし)

DRM保護
DRMがかかった文書はテキストを取り出せない。権限がある場合は保護を解除する。
(観測ベース)

XFAフォームベースのPDF
XFAはPDF 2.0で非推奨となった古い仕様で、多くのパーサーが非対応。Acrobatで通常のPDFに変換する。
(観測ベース)

ファイル名の問題
特殊文字・絵文字・長すぎるファイル名がアップロードを妨げることがある。シンプルな英数字のファイル名に変更して再試行する。
(観測ベース)

ファイルの破損
別の名前で保存し直してから再アップロードする。
(観測ベース)


環境・接続の問題

ブラウザ拡張機能のブロック
広告ブロッカーなどがアップロードスクリプトをブロックすることがある。シークレットモードで試すか、拡張機能を一時的に無効にする。
(観測ベース・複数報告あり)

連続アップロードによるスロットリング
短時間に何度もアップロードを繰り返すとサーバー側で制限がかかることがある。60分待ってからブラウザを再起動して再試行する。
(観測ベース)

ブラウザキャッシュの破損
キャッシュとCookieをクリアしてから再試行する。
(観測ベース・複数報告あり)

ネットワーク不安定・サーバー障害
時間をおいて再試行する。
(観測ベース)


アカウント・権限の問題

組織アカウントの管理者制限
学校・職場のアカウントでは管理者がNotebookLMへのアクセスを制限していることがある。管理者に有効化を依頼するか、個人アカウントで試す。
(一次資料確認済み・記述なし)

18歳未満のアカウント
NotebookLMは18歳以上のユーザーのみ利用可能。
(Google公式ドキュメント・確認済み)

Googleドライブの共有設定不一致
Googleドライブ経由でソースを追加する場合、NotebookLMで使っているアカウントと共有設定が一致している必要がある。
(Google Support・確認済み)


付録F:フォーマット別に縮まない理由

CCITTFaxDecode
FAX圧縮の規格で、白黒2値の画像に使われる。発掘報告書のような古いスキャンPDFに大量に含まれている。白黒2値の画像をJPEGに変換すると逆に膨らむ。JPEGはグレースケールやカラーを得意とする形式で白か黒しかない画像には向いていない。CCITTFaxDecodeはその用途においてすでに最適な圧縮をしているので、別フォーマットに変換しても縮まないし、むしろ大きくなる。「縮まない」のは圧縮ツールの失敗ではなく、元の画像フォーマットが正しく機能している証拠だ。

JPXDecode
JPEG 2000という高効率な圧縮形式。同じDPIで変換しても縮まない。DPIをダウンサンプルすることで縮む。

JBIG2Decode
白黒高圧縮。外部ツール(jbig2dec)が必要なため一般的なライブラリでは処理できない。

非画像部分が重いケース
フォントやテキスト構造は一般的なPDF圧縮ライブラリでは触れない領域。Ghostscriptのような別のツールが必要になる。


出典

  • PDF 1.7仕様書(Adobe)

  • Google NotebookLM公式ドキュメント



「最初に200MBと言われて信じた、というところから始まったのが全部の出発点だったんだよね。情報を疑うより先に動いた。」
「でもそれがあったから解剖できたんですよね。信じて動いて、詰まって、調べた。順番としては正しかったと思います。」

いいなと思ったら応援しよう!