Deep Sky Memories

横浜の空で撮影した星たちの思い出

動画の圧縮どうしてます?

CMOSカメラで月や惑星を撮っていると、非圧縮の動画が保存されるので一本撮るたびにギガ単位でHDD容量が減っていくのですが、これらの動画は一度スタックしたら基本的には触らないもの。思い切って捨ててしまうのも手なんですが、そんな勇気はないので可逆圧縮して保存できないかと思って四苦八苦しています。

可逆圧縮 codec というと Lagarith Lossless が有名だそうで、これを試してみました。が、ふと zip で圧縮してみたところ動画によっては zip の方が小さくなることに気付いて、zip と 7zip も試してみました。

測定環境

CPU Core i5-6600 3.3GHz
MEM 8GB
OS Windows 10 Pro (1709) 64bit
HDD Seagate IronWolf 8TB (ST8000VN0022)

CPUは4コア4スレッドの Core i5。定格で使っています。HDDは動画の格納先のデータドライブです。

各圧縮ソフトウェアのバージョン等は以下の通り。

Lagarith 1.3.27 64bit
zip Windows Explorer の標準機能
7zip 18.05 64bit

Lagarith でのエンコードには TMPGEnc Video Mastering Works 5 (TVMW5) 5.5.3.108 を使用しました。

zip はCPU使用率のピークが約25%で1コアしか使ってない感じです。7zipはデフォルトで全コアつかうようで、CPU使用率のピークは約70%でした。Lagarith もデフォルトでは1コアしか使わないのですが、設定で Use Multithreading にチェックを入れるとマルチスレッドで動くようです。が、試してみても1割強しか速くならなかったのでデフォルトのままで測定しました。

Lagarith でエンコードした際には保存先は別のドライブ(Western Digital WD40EFRX)にしました。一方 zip と 7zip は右クリックメニュー一発で実行したので同じドライブに保存しています。7zipは保存先を選ぶメニューもあるのでややアンフェアだったかも。

圧縮対象の元動画

土星を撮影した動画と月面を撮影した動画を対象にしました。

https://rna.sakura.ne.jp/share/vlcsnap-22_42_45-compressed.avi-00_00_02-00001.png
月面

撮影対象 解像度 フレーム数 動画サイズ
土星 640 x 480 5003 1.43 GB
月面 1936 x 1096 3005 5.93 GB

どちらも SharpCap で保存した 8bit depth の動画で、vlc の情報表示によると「Palletized RGB with pallet element R:G:B (RGBP)」という codec で保存されています。土星はカラーですがデベイヤーせずに保存されているため、実質モノクロです。

結果

圧縮方式毎に処理時間と圧縮後のサイズ測定しました。処理時間は3回実行した平均値です。

土星

圧縮方式 処理時間(速度) 圧縮後のサイズ(圧縮率)
Lagarith 13s (385fps) 265 MB (18%)
zip 36s (139fps) 182 MB (12%)
7zip 4m25s (19fps) 142 MB (9.6%)

月面

圧縮方式 処理時間(速度) 圧縮後のサイズ(圧縮率)
Lagarith 59s (51fps) 2.86 GB (48%)
zip 9m54s (5.1fps) 4.08 GB (69%)
7zip 36m59s (1.4fps) 3.45 GB (58%)

検討

Lagarith は処理速度も速く圧縮率も通常は最高です。黒い部分の多い動画では zip や 7zip に負けることがありますが、処理速度は倍以上(7zipとの比較なら20倍以上)速いので第一選択肢としたいところですが、問題が2つあります。

ひとつ目は圧縮した動画を戻す時に同じ RGBP codec に戻せないことです。というか RGBP codec があればインストールすれば使えるはずなのですが、ネットで探してもそれらしき codec を見つけることができませんでした。仕方なく無圧縮RGBのAVIにエンコードするとファイルサイズが元の3倍になってしまいました。これでも AutoStakkert! 3 (AS!3) で読み込めるのですが、AS!3 の処理も遅くなるようです。

もうひとつは無圧縮RGBにエンコードしたものを AS!3 でスタックしても同じ結果にならなかったことです。同じ Alignment Point でスタックしても出力結果のバイナリは一致しませんでした。Photoshop 上で差の絶対値を見ても確かに差がありました。

TVMW5 のデフォルトの前処理にインターレース解除があり、最初はそのせいだと思っていたのですが、これを無効化してもダメでした。正直肉眼では区別がつかない程度の差なのですが、今回の目的では Lossless でないと意味がないので、これでは困ります。このあたりは TVMW5 の問題かもしれず、他の動画編集ソフトも試してみようと思います。

2018/5/30 追記: ファイルサイズの件も含めて VirtualDub を使うことで解決しました。詳しくは「動画圧縮のトラブル、解決しました」に書きました。

zip は余計なソフトをインストールせずに使えるため気軽に使えます。低倍率で惑星を撮影した動画のように黒い部分が多い動画では Lagarith より高い圧縮率が得られる場合もあります。処理速度は圧縮率が高いケースでは数倍、そうでない場合は10倍 Lagarith に比べて遅いのですが、数が少なければ我慢できる範囲だと思います。

7zip は zip より2割ほど圧縮率が高いのですが、処理速度は3〜10倍かかります。正直割に合わない感はありますし、実時間的にも我慢できない域に達していると思います。

というわけで意外と zip がいいのかもという気がしてきました。Lagarith に負ける月面のケースでも4割程度の差なので、扱いやすさを考えると全然アリな気がします。が、10分かけて3割程度しか減らないなら圧縮しない、というのもアリかも?

ということでこの件、結局結論は出ず…