夏のファイル圧縮大会しませんか？

# 導入

**ファイル、散らばってませんか？**
ドキッとした方、いますよね？

**「ファイル圧縮大会」** しませんか？

が、zipで圧縮するだけでは小さくならないファイルもあります。動画はzipの圧縮でも小さくできません。
そこで、すべてのPCユーザーのために、各種ファイルについて最適な潰し方をまとめようというわけです。

**冬に家の大掃除をするなら夏はパソコンのファイル整理じゃい！**

## TL;DR

無駄に記事がなげえのでここだけ読んだらいいと思います。
圧縮の仕方は記事の下に乗せます。

### それぞれの圧縮方法まとめ

|種類|おすすめの圧縮方法|備考|
|--|--|--|
|画像|jpegかwebpに変換|無視で良いのでは？ && avifのすゝめ|
|音声|opusもしくはflacに変換|コーデックに気をつけろ|
|動画|ffmpegで削る|mp4+h265一強物語|
|オフィス系|諦めが肝心|既に圧縮済みです|
|テキストファイル|無難に圧縮|環境に気をつけよう|
|実行ファイルとか|upxもアリ|upxの挙動に注意|
|osとかのisoファイル|諦めが肝心|既に圧縮済みです|
|safetensors|諦めが肝心|既に圧縮済みです|

中身がバイナリなら圧縮は無意味なことが多いです。平文テキストなら適当に圧縮しましょう。
圧縮は7zかxzがおすすめです。バックアップ用にはbzip2もありです。
圧縮できないデータも多くあります。諦めましょう。消してしまうのも有りです。

## 想定環境

この圧縮大会は一般的な **Cドライブが512GBくらいのWindowsPC** を想定してます。
Linuxなんかも対応可能です。
スマホとかはクラウドストレージ使いましょう。

## 画像

**画像はjpegかwebpに変換してください。**
といっても、画像は比較的小さいので圧縮しなくてもいいでしょう。
どうしてもと言うならjpegかwebpにしましょう。

なぜ7zなどで圧縮しないのかといえば、圧縮してもサイズに変化がないからです。大体、圧縮率は100%に近い値が出ます。

### コーデックたち

有効かつ大きい勢力としては

**AVIF vs WEBP vs PNG vs JPG**

です。他にもあった気がします。りんごのやつとか。~~あれなまえなんだっけ~~

avifは2024年現在だと対応環境が少ないので有効な手段じゃないかもです。他の人に見せないならありかも？

### 方法

画像編集ソフトを使うのが楽ですが、ffmpegのコマンド例を貼ります。

潰されるのは僕のアイコンです。Blenderで出力したpngです。
![s-UBinKittev2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530797/f9f07cfd-5d5d-4b45-5c0c-592c7f060553.png)
ファイル名は「Neko.png」です。サイズは17951バイトでした。

#### コマンド例(ffmpeg)

```convert.bat
rem pngからjpegに
ffmpeg -i ./Neko.png ./Neko.jpg

rem 非可逆圧縮でpngからwebpに
ffmpeg -i ./Neko.png ./Neko.webp

rem 可逆圧縮でpngからwebpに
ffmpeg -i ./Neko.png -lossless 1 ./Neko.webp

rem pngからavifに、非可逆だとおもう
ffmpeg -i ./Neko.png ./Neko.avif
```

#### 結果

|圧縮方式|サイズ|圧縮率|
|--|--|--|
|png(変換前)|17951バイト|100%|
|jpg|10862バイト|60%|
|webp(非可逆)|6628バイト|36%|
|webp(可逆)|7938バイト|44%|
|avif(非可逆?)|3668バイト|20%|

あれ？なんかjpegデカいぞ？と思ったら、pngが透過画像だからですね。
jpegは透過非対応なので余計にデカくなりました。

とんでもなくavifが小さくて驚きです。webpも十分小さいですが。
これ以外にも圧縮率とかも変えられるのでそこは要チェックです。

## 音声

**wavはとにかくなんでもいいので潰しましょう。**
gzipでもなんでもいいので潰してください。デカすぎる。
また、 **音声はopusかflacにしよう。**

なぜ7zなどで圧縮しないのかといえば、7zで圧縮するよりも他のコーデックのほうが有効だからです。ただ、まとまったファイルを扱うなら素早さで7zの方に軍配が上がります。

### コーデックたち

大きい勢力としては

**MP3 vs AAC vs OPUS vs FLAC vs VORBIS(OGG)**

です。好きなのにしよう。

### 方法

GUIなら、audacityで編集するといいかもしれません。またffmpegの例を乗せます。

wavからの変換例だけ乗せます。ほかは各々で調べてください。

圧縮するのは雨の音を録音したステレオのwavファイルです。多分無圧縮です。
ファイル名は「rain.wav」。サイズは560241808バイト(534MB)です。

#### コマンド例(ffmpeg)

```convert.bat
rem wavからmp3に
ffmpeg -i ./rain.wav -c:a libmp3lame ./rain.mp3

rem wavからopusに
ffmpeg -i ./rain.wav -c:a libopus ./rain.opus

rem wavからaacに
ffmpeg -i ./rain.wav -c:a aac ./rain.aac

rem wavからflacに
ffmpeg -i ./rain.wav -c:a flac ./rain.flac

rem wavからvorbis(ogg)に
ffmpeg -i ./rain.wav -c:a libvorbis ./rain.ogg
```

`-c:a libXXXX`みたいなのはなくても拡張子で判断してくれるから実はいらない。

#### 結果

|圧縮方式|サイズ|圧縮率|
|--|--|--|
|wav(圧縮前)|560241808バイト(534MB)|100%|
|mp3|50816276バイト(48.4MB)|9%|
|opus|35395206バイト(33.7MB)|6%|
|aac|52182638バイト(49.7MB)|9%|
|flac|204726851バイト(195MB)|36%|
|vorbis|41782417バイト(39.8MB)|7%|

flacはもうちょっと潰れる気がしましたが、予想外。
以外にもvorbisが健闘してますね。
でも噂通りに強いのはopus。今後広まる予感です。

## 動画

**ffmpegを使って、h265に変換しましょう。**
コーデックとフレームレート、画質とビットレートを下げましょう。

なぜ7zなどで圧縮しないのかといえば、圧縮してもサイズに変化がないからです。圧縮率は100%に近い値が出ます。画像と同様。

### コーデックたち？

#### コンテナフォーマット

大きい勢力...?

**MP4** vs MOV vs WEBM vs MATROSKA (vs avi)

いや、**mp4一強**ですね。ほかはあんまり見ないです。

#### 動画コーデック

大きい勢力...

**H264 vs H265** vs AV1 vs VP9

はっきり言って**H264とH265の独占状態**ですね。
エンコードでもH264やH265が速い速度を見せつけています。
加えてAV1のハードエンコはグラボだとGTX4000番台からの対応と、渋い状況です。

ちなみにHEVCとか巷で言われてるやつはH265のことです。

#### 補足

そもそも動画って、**(動画コーデック * 画像) + 音声**みたいな構造してます。
画像のコーデックがあって、それをまとめる動画用のコーデックがあります。そこに音声が乗っかる形です。
なので、音声のコーデックやビットレートも確認しましょう。

### 方法

動画編集ソフトを使えばいいと思いますが、ffmpegの例をここでも乗せておきます。

圧縮する動画は、某FPSタイトルの1080p45分のプレイ動画です。
サイズは5862089908バイト(5.45GB)。ファイル名は「Game.mp4」です。

#### コマンド例(ffmpeg)

```winbatch
ffmpeg -i ./Game.mp4 -c:v libx265 -preset medium -crf 18 -b:a 128k -vf scale=1280:720 -r 24 ./output.mp4
```

`-c:v libx265`でH265にします。
`-preset medium`は~~すべてを解決します~~ミディアムプリセットを使用。
`-crf 18`でcrf値を変えます。0から51で選べます。0に近いほど圧縮率が小さくなります。51に近いほど映像が粗くなります。
`-b:a 128k`で音声のビットレートを変えてます。
`-vf scale=1280:720`で、画質を1280x720にします。

1411062282バイト(1.31GB)になりました。**圧縮率は24%**。
かなりのデータを捨てているので圧縮と呼びたくはないですが...。

細かいことは自分で調べたり、ChatGPTに聞きましょう。オプションが多くて倒れそうになります。

## オフィス系

大体Excelのデータで困ってるんじゃないですか？皆さん。あるいはPowerPointとか。
**それ、圧縮できません。**

試しに、あなたのそのxlsxファイルの拡張子を.zipにしてみましょう。
なぜか展開できます。中にはxmlファイルがいくつか。

xlsxファイルってzipの名前変えただけなんです。だからあんまり圧縮できません。

### それでも圧縮したい

大きいオフィス系のファイルが無かったので、今回は
https://github.com/ianand/spreadsheets-are-all-you-need/releases/tag/v0.6.0 をお借りします。
サイズは1340046178バイト(1.24GB)です。
7zに圧縮すると、1.21GBです。圧縮率97%。やらないほうがマシです。

が、 **工夫するともうちょっと圧縮できます**。
一度、xlsbをzipとして展開してから7zで圧縮してみましょう。

648738865バイト(618MB)まで小さくなりました。**圧縮率48%**。まあまあです。

## テキストファイル

好きなように潰しましょう。僕はxzが好きです。win環境なら7zもいいでしょう。
テキストファイルの場合は圧縮率なんかはピンキリなので乗せません。

が、圧縮率の目安は
**7z ≒ xz > bzip2 > zip ≒ gzip**
ぐらいらしいです。ちゃんと調べてないので知りません。

win環境なら7zやzip、unix環境ならxzやgzipでいいのではないでしょうか。
zipファイルを使うときはmacとwindowsでの互換性に気をつけましょう。

## 実行ファイルとか

ふつーに圧縮するのもありですが、upxを使うと良いかもしれません。
upxは各種実行ファイルを圧縮してくれるものですが、デメリットもあるため、声を大にしておすすめはできません。
「使うならどうぞ」くらいのものです。

使い方は簡単です。exe以外もdllとかも潰せます。で、ちゃんと動きます。

```convert.bat
upx ./foobar.exe
```

試しにいくつか潰してみました。

|潰されたもの|潰す前|潰したあと|
|--|--|--|
|"Hello, world!\n"のexe|247KB (253904バイト)|127KB (130512バイト)|
|libstdc++-6.dll|2.29 MB (2409896バイト)|1.02 MB (1077672バイト)|
|libgcc_s_seh-1.dll|147KB (150707バイト)|65.1KB (66739バイト)|
|Inno Setup製のインストーラー|40.8MB (42865596バイト)|40.3MB (42317756バイト)|

大体半分くらいになります。動かなくなったりもするらしいので要注意。
ただ、すでに圧縮されてるインストーラーなどには無効です。これまた要注意。

https://upx.github.io/

詳しくは自分で調べましょう。いや、自分でちゃんと調べて理解したうえで使いましょう。

## osとかのisoファイル && safetensors

isoファイルは、osのファイルです。usbに焼いてブート用のusbを作ったりしますね。

ところで、当方趣味でいろいろなosのisoを集めています。
windowsからminixまで、約80個、合計160GBくらいあるのですが、大体圧縮ができません。

なぜなら **isoも既に圧縮されている** からです。linuxカーネルの場合はlzmaで圧縮されています。windowsも潰れませんでした。

ですが、一部は潰せます。例えばplan9は **圧縮率10%** になりました。freebsdも **圧縮率70%** ほど。

isoファイルはとにかくデカいですが、大半は諦めてください。
~~僕のように集めずに使ったら消すのが一番です☆~~

また、stable diffusionの登場で有名になったsafetensorも圧縮ができません。
あれも圧縮済みです。zipで圧縮されているわけでもないので、本格的に潰す手段がありません。
諦めましょう。

## オマケ -ffmpegと7zipのインストール-

Axiomなんかのgui版もありますし、wingetでもインストールできますが、公式サイトのリンクを張っておきます。

https://ffmpeg.org/download.html#build-windows

展開したらパスを通すのをお忘れなく。忘れてるとコマンドプロンプトから使えません。

---

ffmpegはともかく、7zipが入ってねえとは言わせません。入れましょう。
zipの展開はwindows標準機能よりも速いです。

https://www.7-zip.org/download.html

## シメ

ここのデータは好きなように使って構いません。CC0です。とんでもねえデュアルライセンスですが...。

とにかく、ファイルは整理しましょう！そしてその旨をあなたの隣人にも伝えてあげましょう！
後にファイル探しで困らないよう祈ります！