デカいパワポファイルを小さくする技術

## はじめに

本記事は [フューチャー Advent Calendar 2023](https://qiita.com/advent-calendar/2023/future) 23日目の記事です。

Qiitaをご覧の皆様、一足早いですがメリークリスマス！フューチャーアーキテクト株式会社 Technology Innovation Group 所属の、おーじぇい（ @920OJ ）です。

さて、我々フューチャーの社員は「ITコンサルタント」として分類されることから、技術に触れている時間と同じくらいプレゼンのスライドを作ります。私も例に漏れず、私のPCのドキュメントフォルダから今年1年で作成したpptxファイルを検索してみたところ、250ファイルもヒットしました。

そんなパワポジャンキーたちである我々が、一年の中で最もパワポを駆使するイベントが、「Best Project of the Year」通称BPYというイベントです。これは「その年に最もフューチャーらしい活躍をしたプロジェクトを称える」全社員参加のイベントです。詳しくは以下の記事をご覧ください。

https://note.future.co.jp/n/n7b0e5de1b2bc

私は今年のBPYに予選・本戦ともに資料作成要員として参加しました。特に予選資料として提出時に課された制限は、**1ファイル10MB以内に抑えること**。大量のオブジェクトをブチ込まれて唸るPowerPointを宥めながらも、9.9MBのファイルに仕上げたときには、もうすでに優勝した気分でした。

本記事では、サイズが大きくなってしまったパワポファイルをできる限り小さくする手法について紹介します。

## 時間がない人向けの TL;DR

- **pptxファイルは拡張子をzipにすれば解凍できる**。中身を覗いて、どのファイルが容量を食っているのか調べよう。
- 画像を挿入する際、クリップボードにコピーして貼り付けすると、PNGファイルとして貼り付けられてしまうことがある。特に、**Slackから「画像をコピー」して貼り付けるのはやめよう**。
- **日本語フォントを埋め込むのも注意**。極力PCにもとから入っているフォントを使おう。
- 動画はffmpeg等で**ビットレートを落として埋め込もう**。可能であれば、YouTubeを参照するのもよし。

## デカいパワポファイルを作ってみよう

まずは敵を知るところから、ということで、実際にデカいパワポファイルを作ってみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/44afd7ee-6317-4ce3-fb04-73543645fb34.png)

めちゃくちゃダサくてビックリしますが、これもデカいパワポファイルを作るためです。

今年の思い出写真・動画を、整理のために一度Slackへ送り、その**Slackから「画像をコピー」して、パワポに貼り付けて**いきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/41d38ff5-ba1e-0f86-7ec4-3833e7ad2133.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/abc1328b-45e3-fac2-a155-34a27364b2ba.png)

そういえば、スライドを楽しいものにするために、フォントを色々変えました。**フォントはどの環境でも同じように見えてほしいので、埋め込みしなければなりませんね**。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/cbdc109f-1f70-b13b-c46d-162b0ca2d094.png)

ということで完成。たった5枚のページだけで……

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/c6c8a14e-ede2-3078-e15c-3bc30a44b83b.png)

**172MBのパワポファイルが爆誕しました。**

## デカいパワポファイルを小さくしてみよう

### 原因分析

やったこととすれば、画像や動画をペタペタ貼ったのと、フォントを埋め込んだだけです。どうしてこんな事になってしまったのでしょうか。

実は、パワポのファイルは7-zipなどの展開ソフトを使うことで、ファイルの中身を見ることができます。Windows標準機能でも、拡張子をzipに変更すれば、展開することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/95edfca9-73db-7d0e-96d0-4e112c85563a.png)

展開後、「ppt」フォルダの中にスライドで使われているフォントやメディア（画像・動画）がフォルダごとにまとめて格納されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/b36e3ed5-7337-5f59-5475-fbd5952dcdd3.png)

その中の「media」フォルダを見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/6c5fcfdf-509c-5d84-b18c-537871516a05.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/2ae97358-4530-5dad-1c1a-359883f4d2e0.png)

なんと、SlackからコピーしてきたJPGファイルがPNGファイルに変換され、それに伴いファイルサイズが1枚25MBにもなっています！これが6枚もあったので、ファイルサイズが肥大化するのも納得ですね。

他にも、fontsフォルダを見れば埋め込まれたフォントの全体サイズがわかります。今回のケースでは58MBもありますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/230beef7-1993-8353-c7b6-a6f429d5a580.png)

### 画像を小さくしよう

ここからは、実際にファイル肥大化の原因を一つずつ小さくしていきましょう。まずは画像からです。

#### 「図の圧縮」機能を利用する

実はPowerPointには、デフォルトで図を圧縮する機能が備わっています。まずはこれを試してみます。

どれか一つ図を選択して、「図の形式」→「図の圧縮」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/d3f2df6d-f8c6-8df2-a2b5-d4d43984aefc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/f4dfd46a-f2aa-a537-9a3e-b7a8435592bd.png)

「この画像だけに適用する」のチェックを外して、解像度を選んで「OK」を押します。これで一括ですべての画像が圧縮されるので、保存してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/8e282078-c901-7573-b15b-4c5cd64869dd.png)

**82MBになりました！** 中身を見てみても、1枚あたり200KB～1.5MBに収まっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/e2c6694d-4409-a480-3259-4bc10e04f42b.png)

しかし、この方法で圧縮をすると、画質を大幅に犠牲にすることとなります。下記の画像を見ると分かる通り、左の変換前と右の変換後では、明らかに画質が悪いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/36047216-2d7b-1d5c-92e4-926bfa8d4244.png)

#### 画像を差し替える

Powerpointの標準機能を利用する代わりに、別途画像をリサイズ・圧縮してから差し替えする方法を紹介します。画像のリサイズ・圧縮には様々な方法がありますか、ここではGIMPを利用します。

https://www.gimp.org/

また、GIMPで画像をバッチ処理できるプラグイン「BIMP」を導入します。

https://alessandrofrancesconi.it/projects/bimp/

BIMPでの設定は、「拡大縮小（リサイズ）」を選び、幅1500pxに、Aspect ratioを「Preserve」に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/6c4f55c0-6a9e-db0b-865d-8a056609e02c.png)

次に「保存ファイル形式の選択と設定」を選び、「Jpeg」とし、品質は85程度に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/8c9371e6-b921-c176-2667-c12175571e4d.png)

あとは変換前の画像を追加し、「Apply」をクリックします。ちなみに、スクリーンショットを指定すると劣化してしまうため、写真のみ選択すると良いでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/1db5d1fa-4878-d936-e7c1-a6ede91abb04.png)

変換が完了しました。それぞれ、170KB～800KB程度に収まっています！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/577a360a-999b-f907-adc5-e70b65c866e8.png)

あとは、変換後の画像を1枚1枚差し替えていきます。画像の変更は、画像を選択し右クリック→図の変更→このデバイスで、位置を変更せずに差し替えることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/aaf855c1-3d53-fee6-428f-17dc552d3164.png)

**結果、81MB！**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/4ae48a29-fcf9-a8ba-a00f-b2faa448d30e.png)

Powerpointの圧縮機能とファイルサイズはほぼ同じですが、画質が綺麗です。一番左が元画像、真ん中がPowerpointの圧縮機能で圧縮したもの、一番右がBIMPで圧縮したものです。BIMPで圧縮したもののほうが多少画質は落ちるものの綺麗に写っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/9a9f227a-6474-ec3f-3b8d-3c99661df56f.png)

### フォントの埋め込みをやめよう

さて、画像を圧縮できたら次はフォントです。この解決策は単純で、以下の3つです。

- フォントをたくさん使わない（統一する）
- 埋め込みは「使用されている文字だけ」にする
- Windows・Officeに同梱されるフォントのみ利用する（＝フォントを埋め込まない）

フォントをたくさん使わないのはそれはそうで、多く使えば使うほどファイルサイズは嵩みます。また、使うにしてもWindows・Officeに同梱されるフォントのみにすれば、フォントを埋め込まなくても大体の環境では正常に表示できます。（WindowsユーザがMacユーザに送る、などすればまた別ですが……その場合は、PDFで書き出したほうが良いです。）

https://helpx.adobe.com/jp/x-productkb/global/cq08041028.html

https://msoffice.4thsight.xyz/30712

ファイルサイズを比較してみましょう。先程の81MBとなったファイルで、使用されている文字だけを埋め込むとどの程度小さくなるでしょうか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/d56ebe21-c232-9922-c76b-2ad828cf6945.png)

**34MBになりました。** フォントフォルダは11MBとなっています。12個ものフォントを利用しており、文字数は少なくてもファイルは肥大化してしまうようです。（本当に使用されている文字のみ埋め込んでいるかは怪しそうですが……）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/fecd5297-58bb-7fcd-78af-e649bbad8de3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/17ebb5ce-af72-c071-576a-9ae11db544c9.png)

これでもまだ大きいので、フォントを置き換えてしまいましょう。全ての英字フォントをCalibriへ、日本語フォントをMeiryo UIへ置き換えてみます。

フォントの置き換えは、ホームリボン→「置換」→「フォントの置換」で一括変更が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/ea50e3b6-922e-e562-c30c-0ee799391e9f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/954eca92-6638-5ac9-6ece-cf2ea4198499.png)

CalibriもMeiryo UIも、Windows標準のフォントであることから、もう埋め込みは必要ありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/d12ef082-db5d-f9cd-8b07-7a07d1dddf60.png)

ここまできて、やっと**22.5MBまで抑えました**。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/4c9cbfd8-fa58-8182-afd9-1beb45d24b87.png)

### 動画を小さくしよう

さて、残りは最後のページに載せている動画ファイルのみです。

![vid.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/07f5ebb4-07fe-4604-c94b-1cd99a74b610.jpeg)

iPhone 12で撮った、1920x1080の60fpsの動画です。17秒しか無いのに、総ビットレートが8.4Mbpsあるため、単体で17MBもあります。

動画も画像と同様に、解像度と画質（ビットレート）を落とすことでファイルサイズを小さくできますが、Powerpoint標準機能には無いため、ここではffmpegを利用します。

https://www.ffmpeg.org/

例えば「解像度を1280x720に、ビットレートを1Mbpsに、フレームレートを30fpsに変更する」コマンドの場合、以下のようになります。

```bash
ffmpeg -i media1.MP4 -vf scale=1280:720 -b:v 1M -r 30 media1_fix.mp4
```

17MBの動画ファイルが、2MBまで削減できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/623e922a-1727-ae7e-aad3-d0272b3978ee.png)

左が変換前、右が変換後です。確かにノイズは多くなってしまっていますが、見るに堪えないレベルではありません。

![vid2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/311994d1-05e4-fb99-9b07-ee0ca8e92475.jpeg)

あとは動画を差し替えるだけです。差し替えた結果……

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462753/ecab8ea8-556a-0753-ffe2-2e01109fc2f6.png)

**6.5MBです！！！！** 

172MBから6.5MBに削減できたため、およそ96%削減できたことになります。

## おわりに

以上、知っておくと後々助かる（かもしれない）、デカいパワポファイルを小さくする技術でした。

パワポファイルの容量制限に悩む人に届きますように！