動画ファイルバックアップのための圧縮形式を考える

ことのはじまり

「そう言えばグルドン系YoutubeやBackspace.fmで動画のバックアップに関する話題が出ていたな」と思い出し「バックアップと言えば圧縮だよね」と各種圧縮形式でMP4動画を圧縮してみました。

圧縮する動画ソース

圧縮する動画ソースは手元に残っていたWakazo VLOG #016にしてみた(ボクは動画のバックップを取らない派)。

動画の情報というのは、定番のFFmpegの下記コマンドで確認できるので覚えておくと重宝すると思う。

ffmpeg -i INPORTFILE

下記の情報は見易く加工しています。

  • Wakazo VLOG #016
    • コンテナ mp4
    • ファイルサイズ 6.502GB
    • 再生時間 00:17:17.63
    • ビットレート 50132 kb/s
    • オーディオ形式 aac
      • 周波数 48000 Hz
      • チャンネル stereo
      • ビットレート 128 kb/s
    • ビデオ形式 h264
      • 解像度 3840x2160
      • ビットレート 49996 kb/s
      • フレームレート 30 fps

ということで色々実験していきましょう。

ZIP(Info-ZIP ver 3.0)

ハフマン符号化を利用した古典的な圧縮形式。

32bit版と64bit版があり、32bit版にはファイルサイズ4GBまでという制限があるので、動画のバックアップを考えるとZIPでは64bit版の一択。

ファイルサイズ 実行時間
6.424GB(98.79%) 6分54秒479

ファイルサイズの98.79%とは圧縮前の動画ソースの6.502GBを100%として見た場合の大きさ。つまり圧縮前の動画ソースのから1.21%小さくなったということ。

ボクの環境ではZIP圧縮だと1分あたり約1GB処理できるようです。

ファイルサイズがそこまで小さくなっていない理由は、そもそも殆どのメディアコーデックは既にハフマン符号化による圧縮処理が入っており、似たようなアルゴリズムを重ねてもあまり意味ないというのが理由です。

そして個人的に巨大ファイルをZIP圧縮すると書庫が壊れ易いという経験則もあったりするので、動画ファイルのバックアップにはああまり向かないという印象があります。

bzip2(bzip2 ver 1.0.6)

bzip2はWindows界隈ではあまり有名じゃない圧縮形式だと思います。

bzip2はハフマン符号化に加えてブロックソートや先頭移動などの圧縮アルゴリズムを採用した圧縮形式です。

ファイルサイズ 実行時間
6.370GB(97.97%) 26分17秒947

圧縮前の動画ソースのから2.02%の圧縮ですが、実行時間が物凄く伸びてます。

これはbzip2圧縮が遅いのではなく、アルゴリズムが単純なZIP圧縮が速いと考えた方が良い。

書庫機能は無く、複数ファイルを扱う場合はtarなど書庫形式でひとまとまりにしてからbzip2で圧縮する必要がある。

7zip(7-Zip ver 16.02)

LZMAと呼ばれるアルゴリズムを採用した圧縮形式。Windows界でもそこそ有名。

ファイルサイズ 実行時間
6.343GB(97.55%) 101分46秒810

複雑な処理をしているため一気に実行時間が100分超え(※環境による。ドリキンさんなら半分以上速い)。

100分超えで2.45%の削減が効率良いのか?というのは人それぞれの価値観によるところだとは思う。

xz(XZ Utils ver 5.2.4)

こちらもLZMAを活用した圧縮形式。

7zipはWindows界で多用されていますがxzはLinux界で多用されているLZMAな圧縮形式。

bzip2などと同じく書庫機能は持たず、複数ファイルを扱う場合はtarなど書庫形式でひとまとまりにしてからxzで圧縮する必要がある。

ファイルサイズ 実行時間
6.358GB(97.77%) 110分29秒669

xzもやはりLZMAを使っていため100分越えの実行時間となってしまった。

まとめ

ファイルサイズ 実行時間
動画ソース 6.502GB
ZIP 6.424GB(98.79%) 6分54秒479
bzip2 6.370GB(97.97%) 26分17秒947
7zip 6.343GB(97.55%) 101分46秒810
xz 6.358GB(97.77%) 110分29秒669

今回はすべてデフォルト設定のまま圧縮してますので、高速設定や高圧縮設定にすると特に同じLZMAを活用している7zipとxzは逆転する可能性がある。

総評

やはり当然ながらギガバイト単位のメディアファイルを圧縮すると物凄い時間が掛かることがわかった。

実は物凄い時間が掛かることは実験前から既に推測できていたことで、実際の数字がどのようなものになるのか?を見たかったという気持ちが大きい。

グルドンでの言及通り、基本的には「バックアップストレージ容量の節約を考えるのであれば生データ保存やZIP圧縮という選択肢は無い」ですし「圧縮すると解凍にも時間が掛かるので頻繁に古いファイルを引っ張り出す人は生データのままバックアップした方が良い」です。

今回の実験で得られた知見としては「マルチメディア編集のバックアップと実用の間を取るなら、そこそこの速度で2%圧縮を実現しているbzip2は使い易いかも」ということでしょうか。

編集した動画を寝ている間にアップロードしておき、平行して動画クリップをbzip2圧縮するというソリューションが想定できます。

たかが2%圧縮といっても、動画クリップが100個200個になってくると生データと比較してギガバイト単位で変わってきますので、ストレージを節約したい方は検討してみると良いかも知れません(1TBの動画クリップがあったら約20GBも節約できる)。

ちなみにbzip2をWindowsで扱う一番手っ取り早い方法は「7-Zip」をインストールすることです。7-Zipはbzip2の圧縮解凍に対応しています。

LZMAに関しては長期保存向けと考え運用すると良いかも知れません。

以上です。何かのお役に立てれば嬉しく思います。