ディスク容量を空けるためpythonで大量の画像ファイルをavifに変換した
|
ディスク容量を空けるため、スマホで撮影した画像やStable Diffusionで作った画像をavifに変換しました。
コーディング
Goで書くかShell Scriptにするか少し迷ったすえ、Pythonでコーディング。
Goはお仕事でたくさん使っているので、プライベートでは別の言語を使うか〜という理由。
1import glob
2import os
3
4import pillow_avif # noqa
5from PIL import Image
6from tqdm import tqdm
7
8
9def convert_to_avif(file_path):
10 with Image.open(file_path) as img:
11 img.save(os.path.splitext(file_path)[0] + ".avif", "avif")
12 os.remove(file_path)
13
14
15dir_path = "./outputs"
16file_paths = glob.glob(os.path.join(dir_path, "**/*.png"), recursive=True)
17if file_paths == []:
18 print("No png files found in input directory")
19 exit()
20
21print(f"Converting {len(file_paths)} files")
22with tqdm(total=len(file_paths)) as progress_bar:
23 for file_path in file_paths:
24 convert_to_avif(file_path)
25 progress_bar.update(1)
- ディレクトリを指定
- 指定したディレクトリ配下にある全てのpngファイルのパスを取得
- 一つずつpillowで画像ファイルを開き、pillow_avifというライブラリで変換
- 変換元ファイルは削除
画像ファイルが多いので変換に時間がかかることを考慮し、進捗がわかるようtqdmを利用。
結果
大小様々なPNG画像ファイル、合わせて29272個、73.06[Gbyte]。これらの画像ファイルをavif化し、2.79[GByte]まで削減されました。96%の削減。
まとめ
今回のコードはbing chatに作ってもらったコードを手直しして利用しました。もうこの程度のコーディングは自分で作るものでは無くなっちゃいましたね。
そうそう、以前からプライベートで利用していたのですが、ついにGitHub Copilotが職場に導入されました。コメント入力でスラスラとコードが生成される便利さに感動しつつ、エンジニアの労働環境が大きく変化していく怖さも感じています。とにかく今はAIの技術に触れつつ、その便利さを享受していこうかなと思いました。