NASがパンク寸前でピンチ!動画圧縮でスペース節約術

FFmpegで動画容量を節約 HowTo
FFmpegで動画容量を節約

NASの容量不足が慢性化して困っていませんか?

 動画の高画質化に歯止めが効きません。それ即ち、ファイル容量が肥大化しているということ。4K/60p ともなると1分あたりの容量は1GBに達します。動画ファイルを無編集で撮りためている人は、特に状況は深刻かもしれません。

 NASのHDDを大容量のものに換装するなどのハードウェア的な対応は、シンプルでストレートな解決策ですが、そのためのコストが痛いですから、できればお金の掛からない方法でどうにかしたいものです。

 今回は、なるべくお金を使わずに、いまのNASを快適に使い続けたい人のためのデータ圧縮方法について検証してみます。

こんな人に役立つ記事です

  • Windowsを使っている人
  • データに占める動画ファイルの割合が圧倒的に多い人
  • SONY や Panasonic 製のデジタルビデオカメラを使っている(いた)人
  • 古い Android 時代のに撮った動画が溜まっている人
  • 動画編集に時間が割けない多忙な人
  • ともかくH.264フォーマットの動画データがいっぱいある人

 あなたがこれに該当するかどうかは、もう少し記事を読み進めてもらえばわかります。

iPhone7 以降を使用している人は、H.265 フォーマットで動画撮影ができたはずなので、悪しからず、この記事ではお役に立てません。

動画ファイルを H.265 で圧縮して解決

 H.264 は長く広く使われてきた動画圧縮の規格で、説明を端折れば、H.265 はその後継規格ということになります。難しいことはさておき、単純に画質を劣化させずに容量が1/2になると理解してもらえば十分です。

 要はあなたの動画ファイルの容量を半分にする道具があれば、何でもいいのです。

画質は本当に落ちないの?

 H.264 比でビットレートを1/2程度に抑えば、ほぼ劣化しないというのが大方の見解です。
 論より証拠。後ほど比較動画を見ていただきますので、ご自身の目でご確認を!

いまさら H.265 ?

 「今なら流行りの AV1 だろう?」そういう声が聞こえてきそうです。ご尤も。

 しかし、AV1 は圧縮処理に時間が掛かる割に、得られるメリットが H.265 と比較して低いので、”早い!安い!簡単!”を取って、H.265 という訳です。

 H.265は少々古い感じがするかもしれませんが、”枯れた技術”というのは安定性・経済性・使用感など、様々な点でメリットがあります。そして、今回の主旨を全うするに十分な役者なのです。

現行のデジタルビデオカメラでもH.264を使用

 例えば、SONY の [ FDR-AX45A ] というモデルの仕様「映像記憶」には以下のような記載があります。

XAVC S規格 : MPEG-4 AVC/H.264、AVCHD規格 Ver.2.0準拠 : MPEG-4 AVC/H.264、MP4:MPEG-4 AVC/H.264

Microsoft 謹製の Clipchamp も出力は H.264

 Microsoft謹製のビデオ編集ソフト「 Clipchamp 」もエクスポートして出てくる動画ファイルはH.264による圧縮フォーマットです。Windows11に標準で H.265 Codec をサポートしていない以上、やむを得ない選択でしょう。

 このように、あなたの動画ファイルがH.264である可能性は十分にあります。では、どのようにしたらそれを確認できるのか、具体的な方法をご紹介します。

動画ファイルが H.264 であるかどうかの確認方法

 それでは、所蔵する動画ファイルが H.264 かどうかをチェックしてみましょう。いろいろな方法がありますが、簡単なのはネットサービスを使う方法です。

 今回は以下のサービスを使わせてもらいましょう。

MediaInfoOnline - MediaInfo in your browser
MediaInfoOnline is an online file analyzer that allows you to use MediaInfo in your browser without installing any softw...

 ここにあなたの手持ちの動画ファイルをアップロードしてみましょう。アップロードに時間が掛かるので、なるべく短尺なものを選ぶとよいでしょう。しばらくすると、当該ファイルの解析結果を表示してくれます。

 私は、ClipChamp が出力した H.264 フォーマットの動画と、それを FFmpeg を用いて H.265 に変換した2種類のファイルを用意しました。

 何やら難しそうな文字が並んでいますが、注目すべきは1箇所です。

H.264 ファイルの解析結果

General
Complete name                            : H264 - Made with Clipchamp.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 30.9 MiB
Duration                                 : 12 s 134 ms
Overall bit rate                         : 21.4 Mb/s
Frame rate                               : 30.000 FPS
Writing application                      : https://clipchamp.com
Comment                                  : Create videos with https://clipchamp.com/en/video-editor - free online video editor, video compressor, video converter.

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Constrained Baseline@L4.1
Format settings                          : 1 Ref Frames
Format settings, CABAC                   : No
Format settings, Reference frames        : 1 frame
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 12 s 134 ms
Bit rate                                 : 21.4 Mb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.344
Stream size                              : 30.9 MiB (100%)
Codec configuration box                  : avcC

H.265 ファイルの解析結果

General
Unique ID                                : 289415113588970525747700483238993232717 (0xD9BB52C7D8D4B928CAF04DC3903A834D)
Complete name                            : H265 - Made with Clipchamp.mp4
Format                                   : Matroska
Format version                           : Version 4
File size                                : 11.1 MiB
Duration                                 : 12 s 133 ms
Overall bit rate                         : 7 696 kb/s
Frame rate                               : 30.000 FPS
Writing application                      : Lavf60.3.100
Writing library                          : Lavf60.3.100
Comment                                  : Create videos with https://clipchamp.com/en/video-editor - free online video editor, video compressor, video converter.
ErrorDetectionType                       : Per level 1
FileExtension_Invalid                    : mkv mk3d mka mks

Video
ID                                       : 1
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main@L4@Main
Codec ID                                 : V_MPEGH/ISO/HEVC
Duration                                 : 12 s 133 ms
Bit rate                                 : 7 543 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0 (Type 0)
Bit depth                                : 8 bits
Bits/(Pixel*Frame)                       : 0.121
Stream size                              : 10.9 MiB (98%)
Writing library                          : x265 3.5+96-9c9ab68fc:[Windows][GCC 12.2.0][64 bit] 8bit+10bit+12bit
Encoding settings                        : cpuid=1111039 / frame-threads=3 / numa-pools=12 / wpp / no-pmode / no-pme / no-psnr / no-ssim / log-level=2 / input-csp=1 / input-res=1920x1080 / interlace=0 / total-frames=0 / level-idc=0 / high-tier=1 / uhd-bd=0 / ref=3 / no-allow-non-conformance / no-repeat-headers / annexb / no-aud / no-eob / no-eos / no-hrd / info / hash=0 / temporal-layers=0 / open-gop / min-keyint=25 / keyint=250 / gop-lookahead=0 / bframes=4 / b-adapt=2 / b-pyramid / bframe-bias=0 / rc-lookahead=20 / lookahead-slices=6 / scenecut=40 / no-hist-scenecut / radl=0 / no-splice / no-intra-refresh / ctu=64 / min-cu-size=8 / no-rect / no-amp / max-tu-size=32 / tu-inter-depth=1 / tu-intra-depth=1 / limit-tu=0 / rdoq-level=0 / dynamic-rd=0.00 / no-ssim-rd / signhide / no-tskip / nr-intra=0 / nr-inter=0 / no-constrained-intra / strong-intra-smoothing / max-merge=3 / limit-refs=1 / no-limit-modes / me=1 / subme=2 / merange=57 / temporal-mvp / no-frame-dup / no-hme / weightp / no-weightb / no-analyze-src-pics / deblock=0:0 / sao / no-sao-non-deblock / rd=3 / selective-sao=4 / early-skip / rskip / no-fast-intra / no-tskip-fast / no-cu-lossless / b-intra / no-splitrd-skip / rdpenalty=0 / psy-rd=2.00 / psy-rdoq=0.00 / no-rd-refine / no-lossless / cbqpoffs=0 / crqpoffs=0 / rc=crf / crf=23.0 / qcomp=0.60 / qpstep=4 / stats-write=0 / stats-read=0 / ipratio=1.40 / pbratio=1.30 / aq-mode=2 / aq-strength=1.00 / cutree / zone-count=0 / no-strict-cbr / qg-size=32 / no-rc-grain / qpmax=69 / qpmin=0 / no-const-vbv / sar=0 / overscan=0 / videoformat=5 / range=0 / colorprim=2 / transfer=2 / colormatrix=2 / chromaloc=1 / chromaloc-top=0 / chromaloc-bottom=0 / display-window=0 / cll=0,0 / min-luma=0 / max-luma=255 / log2-max-poc-lsb=8 / vui-timing-info / vui-hrd-info / slices=1 / no-opt-qp-pps / no-opt-ref-list-length-pps / no-multi-pass-opt-rps / scenecut-bias=0.05 / no-opt-cu-delta-qp / no-aq-motion / no-hdr10 / no-hdr10-opt / no-dhdr10-opt / no-idr-recovery-sei / analysis-reuse-level=0 / analysis-save-reuse-level=0 / analysis-load-reuse-level=0 / scale-factor=0 / refine-intra=0 / refine-inter=0 / refine-mv=1 / refine-ctu-distortion=0 / no-limit-sao / ctu-info=0 / no-lowpass-dct / refine-analysis-type=0 / copy-pic=1 / max-ausize-factor=1.0 / no-dynamic-refine / no-single-sei / no-hevc-aq / no-svt / no-field / qp-adaptation-range=1.00 / scenecut-aware-qp=0conformance-window-offsets / right=0 / bottom=0 / decoder-max-rate=0 / no-vbv-live-multi-pass / no-mcstf / no-sbrc
Default                                  : Yes
Forced                                   : No
Color range                              : Limited
VENDOR_ID                                : [0][0][0][0]

 ここで、HEVC が出た人は、ここでお別れです。すでにあなたの動画ファイルは H.265 方式で圧縮されており、容量削減の余地はほとんどありません。

 AVC を引いた人だけ次に進んでください。

H.264 から H.265 へ変換する方法

 お手持ちの動画ファイルが AVC ( H.264 )フォーマットだった人は、容量を1/2まで圧縮できる可能性があります。市販のソフトウェアを使うこともできますが、ここではお金の掛からない方法を1つご紹介したいと思います。

FFmpeg について

 まず、避けて通れないのが、FFmpeg という偉大なソフトの存在です。
 OSS( Open Source Software )の世界で動画・音声のコンバートといえば FFmpeg というくらいにメジャーなソフトです。

 コマンドラインアプリケーションであることが一般人を遠ざけてしまい、その高性能に比例するほどの知名度を獲得できていませんが、FFmpeg を エンジンとして活用した様々なアプリケーションが数多く輩出されています。

FFmpeg

今回使用するソフト

 今回ご紹介する FFmpeg batch convert も、そんな中の1つです。Windowsのデスクトップアプリケーションとして、極力コマンドを打つことなく、FFmpeg の能力を使って簡単にファイルコンバートが行なえるようになっています。Batch という名前からして分かる通り、多くのファイルを一括して処理することにフォーカスした設計がなされています。

 こちらもオープンソースで公開されており、無償での利用が可能です。

FFmpeg Batch AV Converter

 主な機能を紹介しておきましょう。

Features

    Video encoding h264 / h265 / NVENC / QuickSync / ProRes/ AV1 / Theora
    Audio encoding MP3 / AAC / AC3 / FLAC / WAV / Opus
    Multi-file encode thousands of files
    Automatic shutdown, run post-encoding script.
    Batch processing
    Set encoding priority
    Drag and drop
    Stream mapping and multiplex
    Batch download m3u8 urls
    FFmpeg A/V encoding wizard
    Filter files
    Trim and concatenate files
    Batch YouTube video download
    Batch image thumbnail extraction

 豊富な機能を持つ FFmpeg の能力を引き出すために、パラメータを直接入力することもできますが、プリセット機能があり、面倒なパラメータ調整をせずとも、簡単に H.264 -> H.265 へのコンバートができます。一度に数千のファイルを指定できますから、これで困る人は少ないでしょう。万単位のファイルをお持ちの方は、数回手間が増えるだけです。

FFmpeg Batch AV Converter をインストールしてみよう

 公式サイトからファイルをダウンロードしてください。

 installer でも zip でも、お好きな方をどうぞ。

FFmpeg Batch AV Converter Sourceforge 公式
FFmpeg Batch AV Converter Sourceforge 公式

実際に使ってみよう

 それでは、さっそく実践といきましょう!

FFmpeg Batch AV Converter の スクリーンキャプチャ
FFmpeg Batch AV Converter の スクリーンキャプチャ

 起動画面はこんな感じです。

 まずはお試しに動画ファイルを1つ用意して、任意のフォルダを作成し、その中にコピーしてください。そのファイルを、FFmpeg Batch AV Converter の上にドラッグ&ドロップします。

FFmpeg Batch AV Converter にファイルを1つドロップした
FFmpeg Batch AV Converter にファイルを1つドロップした

 次に、[ Presets ] のリストから [ Video: Convert to H265 HQ + Source Audio ] を選択します。

FFmpeg Batch AV Converter でエンコード開始
FFmpeg Batch AV Converter でエンコード開始

 最後に、画面真ん中の右▶ [ Sequential encoding ] というボタンをクリックします。エンコード中は下のプログレスバーで進行状況をチェックできるので安心です。

 エンコードが完了すると、以下のようなウィンドウが表示されます。

FFmpeg batch convert のエンコード完了画面
FFmpeg batch convert のエンコード完了画面

 エンコードが完了したら、ソースファイルのフォルダ内に FFBatch というフォルダが自動生成され(変更指定は可能)、その中にH.265 でエンコードされたファイルが見つかるはずです。

 操作はこれだけです。いかがですか?簡単でしょう?お手持ちのファイルを複数選択&ドロップして一括処理も可能です。

容量と画質の確認

 では、エンコードの前後を比較してみましょう。

 私がテストに用意したファイルは、30.9MB の H.264 ファイルです。これを H.265 でエンコードした結果、容量は11.1MBになりました。容量が1/3にまで削減できました。

 それでは、実際のファイルを見比べていただきます。

 左がH.264(30.9MB)で右がH.265(11.1MB)です。

H.264によるサンプル動画

H.265によるサンプル動画

お使いのWebブラウザが再生をサポートしていない場合は、ダウンロードしてからご覧ください。

 いかがでしょう?この両者の画質の違いが判りますか?

 ほとんどの方には見分けがつかないと思います。私の目にも有意差は見出せません。容量が1/3になって、この画質ならば問題なしと考えていただけたのではないでしょうか?

 ファイルの圧縮率は、動画の性質によって異なってきます。今回はたまたま1/3まで圧縮できましたが、毎回これが期待できるわけではないことにご注意ください。期待値は1/2として考えておけば、腹も立ちません。

 ともあれ、このレベルの極小の劣化でファイルサイズが1/2になるのであれば、私は大歓迎です。この意見に賛同される方は、ぜひ、あなたの動画ライブラリをシェイプアップしてください。

果報は寝て待て

 エンコードには時間が掛かります。CPUのパワーにもよりますが、動画の実時間と同レベルの処理時間は覚悟しておいたほうがよいでしょう(core i5 7400 で実時間の5倍、core i7 8700 で実時間と同程度)。対象となるファイルをリストにすべてドロップしておけば、あとはソフトがすべてのファイルを処理してくれるのを待つだけです。

 4k動画の場合、エンコード速度が低速である問題がクローズアップされます。今回は取り扱いませんが、ffmpeg はハードウェアエンコードにも対応しています。CPUはハードウェアじゃないのか?という疑問が湧いてきますが、ここで言うハードウェアエンコードはGPUによるものです。CUDA によるハードウェアエンコードでは、速度が10倍にもなるという話がありますので、大量の4k動画の処理が必要な方は、バッチ処理を開始する前に入念なテストを行うといいでしょう。速度UPのトレードオフで画質がソフトウェアエンコード時より悪化するという話があるからです。

 ご自分の環境にあったパラメータを見つけてください。

記録映像なら、圧縮率を上げてさらなる容量圧縮も

 監視カメラやドライブレコーダーの現行モデルも、H.264(モノによっては、aviやM-JPEG)が主流のようです。H.265は処理が重たいので、組み込み用途の非力なCPUには少々荷が重いからでしょう。このような動画であれば、圧縮率を上げて、ビットレートをもっと下げても大差はないはずです。

 [ Parameters ] の値を変更してみます。crf の値を 23 -> 28 に変更することで、さらに圧縮率を上げることができます。

// Before
-map 0 -c:v libx265 -crf 23 -c:a copy
// After
-map 0 -c:v libx265 -crf 28 -c:a copy

ご自身の目でお確かめください。さすがに画質が落ちているのが判るレベルではありますが、その代わりに、ファイルサイズは 5.44MB と、元ファイルの 1/5.68 にまで減少させることができています。

crf28で高圧縮率にした結果

再生環境に多少の難あり

 H.265 フォーマットの動画再生環境は多少難があります。H.265 はライセンス絡みでサポートをやめるプレイヤーが増えてきており、YoutubeでサポートされたAV1フォーマットへの傾倒を強めてきています。例えば、Windowsのメディアプレイヤーでは、H.265コーデックをストアで購入しないと再生ができないといったことになっています。

 しかし、この世には無敵の動作再生ソフト [ VLC メディアプレイヤー ] がありますので、心配はご無用です。Windowsをはじめ、Mac、Android、iPhone と幅広いOS環境に対応するリリースを配布しています。このソフトも OSS です。

 これがあれば、とりあえず H.265 へとコンバートした動画ファイルを閲覧できないという事態に陥ることはありませんから、ご安心を。

オープンソースのベストなプレイヤー VLCメディアプレイヤーのオフィシャルダウンロードです。 - VideoLAN
オープンソースのベストなプレイヤー VLCメディアプレイヤーのオフィシャルダウンロードです。

 OSにネイティブにサポートされていない Codec は他にもいろいろと問題となる可能性はありますが、なにせ今回の主旨は”容量1/2の達成”にあるので、多少の不便には目を瞑ってください。

 ちなみに、Windows (10 or 11) の Chrome (バージョン: 115.0.5790.110) 上でNextcloudを動作させた時、H.265 は正常に再生ができることを確認しています。親族や知人への動画回覧などには、この環境を使うのが楽チンです。

Google Quietly Added HEVC Support in Chrome - Bitmovin
Google has recently fixed a bug in Chrome with a big implication for the video streaming industry: Support for adaptive ...

 最新の Chrome では、 HEVC (H.265) のハードウェアデコーディングもサポートされていますので、大変快適な動作速度でお勧めできます。

結論

 いかがでしたか?

 圧縮率にもよりますが、動画ファイルの容量を半分程度に抑えることができるならば、あなたはもう少しの間、現在ご使用のNASや外付けHDDと共に戦うことができるでしょう。おめでとうございます!

 機器の買い替えを遅らせることができるならば、その経済効果は数万円です。次の週末にでも、張り切ってエンコードに勤しんでみてはいかがでしょう?