BMS, Movie, Illustrations, Programming

PNG 出力が遅すぎるので最適な画像出力形式を検証してみた After Effects 編

After Effects での PNG 書き出しが AVI 出力と比べてやたら遅いような気がしたので、本当なのかどうか検証してみました。

検証環境

UTVideo T2 RGB でエンコードした Full HD (1920×1080) の(半)生avi を画像シーケンスにレンダリングした際の実行時間を3回計測し、平均値を以下の表にしています。

After Effects のバージョンは 2022 を使用しました。また読み書きを行うディスクには M.2 SSD を使用し、ボトルネックにならないようにしました。CPU は Core i7-8086K です。

【検証環境】
After Effects 2022

【プロジェクトの設定】
色深度 16bit
Mercury ソフトウェア処理
FullHD、675フレーム
メモリキャッシュ有効、ディスクキャッシュ有効

【出力モジュールの設定】
アルファなし RGB形式
数百万色 (8bit×3)
┣ ※OpenEXR のみ16ビット浮動小数点数
┗ ※TIFFのデフォルトが数百万色になっていないことがあるため注意
合成チャンネル (マットあり)

【入力動画ファイル】
AVIファイル UtVideo T2 RGBコーデック
FullHD、675フレーム
非常に小さく、全てメモリキャッシュに乗る

出力後のファイルサイズは動画の内容によって大きく変わりますので、あくまで参考程度にお願いします。

書き込み速度 検証結果

左下に行くほど好ましいです。

形式 オプション ビット深度 1回目 2回目 3回目 平均 ファイルサイズ
TIFF 非圧縮 8 bit 0:26 0:26 0:25 0:25 3.92 GB
TIFF LZW 圧縮 8 bit 1:06 1:05 1:06 1:05 1.06 GB
PNG 8 bit 7:26 7:29 7:33 7:29 1.03 GB
JPG 画質 10 8 bit 0:53 0:53 0:54 0:53 464MB (非可逆)
PSD 8 bit 0:36 0:36 0:37 0:36 2.64 GB
SGI 8 bit 0:23 0:24 0:23 0:23 3.08 GB
Targa 非圧縮 8 bit 0:15 0:14 0:15 0:14 3.91 GB
Targa RLE 圧縮 8 bit 0:22 0:23 0:22 0:22 2.88 GB
IFF 8 bit 0:31 0:31 0:31 0:31 2.75 GB
OpenEXR Piz 圧縮 16 bit float 0:40 0:40 0:39 0:39 1.15 GB

参考:別の AVI ファイル (ファイル2) でのファイルサイズ検証結果

結論

この結果を見ると、png は圧縮率が可逆圧縮の中では最も高い一方で、書き出し時間も飛び抜けて長いということが分かりました。保存処理がボトルネックにならないのであればどの形式でも良いとは思いますが、1フレームの書き出しだけで 0.7 秒掛かるのは長すぎかなと思いました。

バランスが良いのは圧縮ありの 8bit TIFF や圧縮ありの Targa ですが、書き出し時間を最も短くするのであれば非圧縮 のTarga や非圧縮 の TIFF が良いかもしれません。TIFF は Windows 標準のエクスプローラーでもプレビューできるため、そういう意味では便利だったりもします。

また、完成直線の最終出力であれば JPG という選択肢も十分ありかなと思います。

読み込み速度に関して

読み込み速度に関しては OpenEXR のみが float のためか(または Piz 圧縮のためか)それだけ遅くなりましたが、OpenEXR 以外の形式はあまり大きな差はなく、ディスクキャッシュの都合で正確な検証が面倒なので省略します。

他のソフトについて

CLIP STUDIO PAINT での保存速度も次の記事で検証する予定だったのですが、いつの間にか PNG 保存が高速にできるようになってましたね。圧縮率の変更があったのかもしれません。

また、Blender では PNG の圧縮率を選べるので、遅くなることも速くなることもあります。こちらは機会があったら検証してみたいと思っています。