2020年初秋版 FFmpeg 4.2.4によるTV録画圧縮調査
CentOS 8.2で、FFmpegをインストールするとversion 4.2.4になる。
以前CentOS 7.7でインストールした時は、version 2.8.15だった。
CentOS 8.2でFFmpegインストール
CentOS 8.2で、以下のコマンドでFFmpegをインストールする。
sudo dnf config-manager --set-enabled PowerTools sudo dnf config-manager --set-enabled epel-playground sudo rpm -ivh https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm sudo dnf install ffmpeg
versionを確認する。
[euser]$ ffmpeg -version ffmpeg version 4.2.4 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 8 (GCC) configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' --extra-ldflags='-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld ' --extra-cflags=' ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-fontconfig --enable-frei0r --enable-gcrypt --enable-gnutls --enable-ladspa --enable-libaom --enable-libdav1d --enable-libass --enable-libbluray --enable-libcdio --enable-libdrm --enable-libjack --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmp3lame --enable-nvenc --enable-openal --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librsvg --enable-libsrt --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-version3 --enable-vapoursynth --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --enable-libzvbi --enable-avfilter --enable-avresample --enable-libmodplug --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-libmfx --enable-runtime-cpudetect libavutil 56. 31.100 / 56. 31.100 libavcodec 58. 54.100 / 58. 54.100 libavformat 58. 29.100 / 58. 29.100 libavdevice 58. 8.100 / 58. 8.100 libavfilter 7. 57.100 / 7. 57.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 5.100 / 5. 5.100 libswresample 3. 5.100 / 3. 5.100 libpostproc 55. 5.100 / 55. 5.100
version 4.2.4のインストールが確認できた。
FFmpeg 4.2.4の性能調査
CentOS 7.7でインストールしたFFmpeg version 2.8.15と比較して性能調査を行った。
ハードウェアの環境は、以下のとおりである。
ffmpeg | 2.8.15 | 4.2.4 |
---|---|---|
CPU | i5-9400 | i5-9400 |
メモリ | DDR4-2133 4Gx2 | DDR4-2133 4Gx2 DDR4-2400 4Gx2 DDR4-3200 16Gx2 |
マザーボード | ASUS H370M-PLUS | ASUS H370M-PLUS |
SSD | TOSHIBA THNSNA240GESC | TranscendTS256G SSD370 |
HDD | Seagate ST8000DM004 | Seagate ST8000DM004 |
CPU、メモリ、マザーボード、HDDは同じ。
SSDは、読込み速度が550~570MB/sでほぼ同じ。(書込みはしない。)
メモリは追加で、DDR4-2400 4Gx2、DDR4-3200 16Gx2でもテストを実施した。
FFmpegで圧縮した時間とファイルサイズを比較してみます。
測定に用いた録画ファイルは、NHK総合の1日の番組です。
2.8.15と4.2.4で同じデータを用いれば良かったのですが、今回は違うデータになります。
version | 2.8.15 | 4,2,4 |
---|---|---|
日付 | 2020年1月16日 | 2020年9月10日 |
番組数 | 47番組 | 63番組 |
データ量 | 158GB | 152GB |
録画時間 | 22時間48分 | 22時間30分 |
深夜に放送休止時間があるため、1日のデータは24時間にはなりません。
この録画ファイルを使用して、圧縮を行った結果は以下のとおりです。
crf | 圧縮速度 | 圧縮率 | ||||||
---|---|---|---|---|---|---|---|---|
2.8.15 | 4.2.4 | 4.2.4 | 4.2.4 | 2.8.15 | 4.2.4 | 4.2.4 | 4.2.4 | |
DDR4-2133 | DDR4-2133 | DDR4-2400 | DDR4-3200 | DDR4-2133 | DDR4-2133 | DDR4-2400 | DDR4-3200 | |
21 | 5.59 | 6.07 | 6.10 | 6.23 | 30.6% | 30.71% | 30.71% | 30.71% |
22 | 5.76 | 6.24 | 6.23 | 6.37 | 25,7% | 25.72% | 25.72% | 25.72% |
23 | 5.92 | 6.36 | 6.40 | 6.54 | 21.7% | 21.52% | 21.52% | 21.52% |
24 | 6.04 | 6.50 | 6.56 | 6.73 | 18.3% | 18.02% | 18.02% | 18.02% |
25 | 6.17 | 6.67 | 6.68 | 6.84 | 15.5% | 15.13% | 15.13% | 15.13% |
平均値 | 5.90 | 6.37 | 6.39 | 6.54 | 22.4% | 22.22% | 22.22% | 22.22% |
隣の値との比較 | 108% | 100.4% | 102.3% |
preset=veryfastで、crf値を21~25まで変えた時の圧縮速度と圧縮率を比較してみました。
圧縮率はほとんど同じです。
圧縮速度は10%ほどversion:4.2.4が速くなりました。
メモリに関しても、DDR4-2133に比較して、DDR4-3200ではいくらか速くなっています。
ジャンル別FFmpeg 4.2.4の性能調査
今回は、ジャンル別に圧縮速度、圧縮率を調査してみました。
結果は、以下のとおりです。
調査は、9月12日~15日の「NHK総合、日テレ、TBS、フジテレビ、テレビ朝日、テレビ東京」の6チャンネルからジャンルごとに6~10の番組をピックアップして測定しました。条件は、preset=veryfast、crf=22です。
圧縮速度は、5倍~6倍でそれほど大きく変動していませんが、圧縮率が悪くなるほど遅くなる傾向があります。
圧縮率は、
ドラマ>アニメ>ニュース>音楽>バラエティ>ドキュメンタリー>映画>スポーツ
の順に悪くなります。アウトドアで動きが激しい映像ほど、圧縮率は悪く、圧縮速度も遅くなります。
ジャンルごとに見ると、ドラマ、アニメ、ニュースではそれほどバラツキはありません。
しかし、音楽、バラエティ、ドキュメンタリー、映画、スポーツでは、番組ごとのバラツキが大きくなっています。
ジャンルごとのバラツキの例は、以下のとおりです。
ジャンル | 番組名 | 圧縮率 |
---|---|---|
ドキュメンタリー | 日本の名峰「南アルプス 八ヶ岳」 | 44.4% |
じょんのび日本遺産 | 21.4% | |
映画 | マッドマックス 怒りのデス・ロード | 53.8% |
名探偵コナン エピソードONE 小さくなった名探偵 | 21.9% | |
スポーツ | THEフィッシング「シーズン開幕!名手がみせる カワハギ最前線」 | 49.6% |
ウイニング競馬 ~中山~ | 45.7% | |
S☆1 BASEBALL「DeNA vs 巨人」 | 41.8% | |
大相撲(2020年) 秋場所 七日目 | 30.2% | |
第53回 日本女子プロゴルフ選手権大会 コニカミノルタ杯 第3日 | 29.5% |
映画の場合、このジャンルに含まれる映像が多種多様なので、ひとくくりにできないところがあります。
アクションで、外で激しい動きのある「マッドマックス 怒りのデスロード」は、私が今まで録画したファイルの中で一番高いビットレートを記録しました。
一方、アニメ映画や室内ドラマの映画などでは、当然圧縮率は良くなります。
スポーツの場合、野球やサッカーなどは比較的圧縮率が悪くなります。今回、フィッシングが高かったのは予想外でしたが、常に動いていることが影響していると思います。
一方、大相撲やゴルフなどは、それほど動きがないため、圧縮率は良くなります。
FFmpegでテレビ番組を圧縮する際、preset=veryfast、crf=22という設定は無難で、平均25%程度に圧縮することができる。しかも、ブロックノイズが発生しそうな、動きの激しい番組では圧縮率を40%程度に落として、品質を保つことができる。
上記結果を踏まえて、おすすめのパラメータ設定について、まとめると以下のとおりである。
- おすすめのパラメータは、preset=veryfast、crf=22。
- ドラマ、アニメは、preset=veryfast、crf=21でも良い。
- 映画、スポーツは、圧縮率を平均25%程度に抑えたいならば、preset=veryfast、crf=24にする。
(「マッドマックス 怒りのデス・ロード」crf=24を確認したら、背景のグラデーションにブロックが見える時がありました。) - BSプレミアム、BS11、WOWOWなど、解像度が1920×1080の場合は、crf=25程度まで落とす。
そうしないと、動きの激しいドキュメンタリーなどで圧縮率が50%以上になるファイルができることがある。
コメントを残す