QSV対応ffmpegでエンコードー最適パラメータ設定
目次
(2020年03月08日追記)
「2020年版 デジタル放送録画の圧縮を最適化するFFmpegの使い方」について紹介。
FFmpegのパラメータを決める際に参考にしてください。
(2019年11月23日追記)「2019年版自宅録画サーバーのQSV最適化」について紹介しました。固定量子化モードを深堀りしてみました。
Intel Media Server Studio 2017 R2を利用して作成したffmpeg(今後「QSV対応ffmpeg」と略す)で、QSVエンコードを行っている。
多くの人が知りたいことは、「鑑賞に耐える画質で、どこまでファイルサイズを小さくできるのか。」ということです。インターネットを検索しても、なかなかその答えは見つかりません。
この記事では、とりあえず私が満足する画質でどこまでファイルサイズを小さくできるのか、明らかにしたいと思います。
今回目標値は、以下のとおりです。
- 対象映像:映画とドラマ
- 画質:4K55型ディスプレイで表示して違和感のないレベル
- 圧縮率:33%以下
- エンコード速度:5倍以上
圧縮率=エンコード後のファイルサイズ/元のファイルサイズ×100(%)
エンコード速度=元のファイルの録画時間/エンコードに要した時間
4K55型ディスプレイの表示を考慮して、地デジ、BSは、それぞれの解像度1440×1080、1920×1080のまま変換することにした。解像度を変えてエンコードすると、エンコード時間が遅くなることがあるので、その危険は避けられる。
エンコードモードについて
今回作成したQSV対応ffmpegの場合、以下のエンコードモードでの動作が確認できました。
- CBRモード 固定ビットレート
- 上限付きVBRモード 上限付き可変ビットレート
- CQPモード 固定量子化量(品質一定)
なお、以下のモードは、今回作成したQSV対応ffmpegでは実行できませんでした。
- AVBR(Adaptive Variable Bit Rate)
- ABR(Average Bit Rate)などと呼ばれている、制限なし可変ビットレートモード(つまり、上限下限の設定がない)モード
- CRF(Constant Rate Factor)品質固定モード
以下のようなエラーメッセージがでます。
「Selected ratecontrol mode is not supported by the QSV runtime. Choose a different mode.」
それぞれのコマンドオプションの設定例は、以下の通り。
モード | コマンド例 |
---|---|
CBR | ffmpeg-qsv -y -i "sample.ts" -vcodec h264_qsv -b:v 4M -maxrate 4M -look_ahead 0 -acodec aac -loglevel error "sample.mp4" |
上限付きVBR | ffmpeg-qsv -y -i "sample.ts" -vcodec h264_qsv -b:v 4M -maxrate 8M -look_ahead 0 -acodec aac -loglevel error "sample.mp4" |
CQP | ffmpeg-qsv -y -i "sample.ts" -vcodec h264_qsv -q 23 -look_ahead 0 -acodec aac -loglevel error "sample.mp4" |
VBR(AVBR,ABR) | ffmpeg-qsv -y -i "sample.ts" -vcodec h264_qsv -b:v 4M -look_ahead 0 -acodec aac -loglevel error "sample.mp4" |
今回は、CBR、上限付きVBR、CQPの3モードについて考えます。
CBRモードとファイルサイズの関係
CBRモードでQSVエンコード(1Mbps~5Mbps)を行うと、圧縮率は次のグラフのような結果になります。
圧縮率は、固定ビットレートに比例して大きくなります。
つまり、固定ビットレートが大きくなると、ファイルサイズは大きくなります。
また、地デジとBSでは、勾配が異なります。これは、元のTSファイルのビットレートが、地デジ16Mbps、BS20Mbpsとすると一致します。(BSは、24Mbpsと文献には書いてありますが、実験結果とは異なります。)
<追記 2018年4月24日 この記事を書いていた2017年9月時点では、NHKBSプレミアムの帯域は21.5Mbpsでした。2018年4月24日現在は、18Mbpsになっている。)
固定ビットレート | 地上ビットレート | 地上圧縮率 | 衛星ビットレート | 衛星圧縮率 | 1時間ファイルサイズ |
---|---|---|---|---|---|
1M | 16M | 6.25% | 20M | 5% | 495.7MB |
2M | 16M | 12.5% | 20M | 10% | 935.1MB |
3M | 16M | 18.75% | 20M | 15% | 1.37GB |
4M | 16M | 25% | 20M | 20% | 1.81GB |
5M | 16M | 31.25% | 20M | 25% | 2.25GB |
一方、エンコード速度は、次のグラフのような結果となりました。
エンコード速度は、固定ビットレートに関係なくほぼ一定、ただしファイルの内容及び地デジ、BSによっても変わります。地デジは7~8、BSは5.5~6.5でした。
上記の結果を踏まえると、
「ファイルサイズを1/3以下に圧縮する(圧縮率<33%)を実現するために、CBRモードの固定ビットレートは5Mbps以下にする必要がある。」
CBRモードで、映画やドラマを観るのに最適なビットレートは?
今までの経験から、同じビットレートのCBRモードでも、エンコーダーやツールによってその画質は大きく異なります。
今回のQSV対応ffmpegによるCBRモード 8Mbpsのmp4の画質は、劣化をまったく感じませんでした。ただし、地上ではファイルサイズが半分にしかなりません。
今回の目標値達成のため選択した、CBR モード 5Mbps(地デジ31.25%、BS25%)、4Mbps(地デジ25%、BS20%)の画質を評価してみた。
4K55型ディスプレイでVLC Media Playerを使って再生した時、私の主観的画質評価は以下の通り。
- 5M 画質の劣化を感じない。
- 4M 時々ブロックノイズが見える。そこそこ問題なし。
- 3M かなりブロックノイズが目立つ。少し気になる。
個人的な結論としては、
「今回のQSV対応ffmpegは、映画やドラマを観るならば、CBRモード 4M~5Mbpsで遜色ない。」
このファイルサイズを維持しながら、さらに画質を向上させるために、上限付きVBRモード、CQPモードを検証した。
上限付きVBRモードとCBRモードを比較する
上限付きVBRモードで、上限ビットレートを変えた時のファイルサイズ、画質を調べてみました。
これは、地デジで放送された「ジュラシックワールド」を上限付きVBRモードでQSVエンコードした結果をグラフにしたものです。基準ビットレートを2M~5Mに設定し、各ビットレートで上限値を0M(固定ビットレートになる)~+5Mまで変化させました。
結果を見ると、圧縮率(ファイルサイズ)も圧縮速度(エンコード時間)もほとんど変わりませんでした。いくつかの映画、ドラマでデータを取った結果、上限ビットレートが上がるとファイルサイズが小さくなる傾向はありましたが、わずか1%程度の違いでした。
そこで、CBRモード4Mと上限付きVBRモード4M(上限値8M)の「ジュラシックワールド」を観て、品質を確認してみました。
個人的な結論としては、
「CBRモード4Mと上限付きVBRモード4M(上限8M)では、その違いがわからなかった。」
続いて、CQPモードを調べた。
CQPモードは、内容によってファイルサイズが変わる
地デジ3ファイル、BS3ファイルで、パラメータqを19~27の間で変化させ、QSVエンコードを行った。
この結果で注目すべきことは、qが同じ値でも圧縮率が異なること、特に一部のファイルでは倍になることである。(ビットレートは、q=23で10Mbps程度)
「ハードデイズナイト」ビートルズの映画で白黒です。
「ジュラシックパーク」恐竜の映画です。
内容を確認すると、やはり動きの激しい場面が、他のファイルと比較して多いことがわかりました。また、以前から白黒の古い映画で、ファイルサイズが異常に大きくなることが経験的にわかっていました。
この2つの映画を、CBRモード4MbpsでQSVエンコードして、観てみましたが、遜色はありませんでした。
そこで、多くのファイルが圧縮率が25~30%程度になる、q=23に設定して、運用してみました。
CQPモードq=23でほぼ満足する結果
地デジ、BSのドラマや映画をchinachuで1週間録画して、CQPモードでQSVエンコードした結果は以下のとおりです。
BSは、主にNHKBSプレミアムのプレミアムシネマを録画しているので、ファイルサイズが大きくなります。
圧縮率が低い(50%以上)のは、地デジ、BSに関係なく、ファイルサイズにも関係ありません。中身によるということです。
圧縮率が20%程度のものが多く、さらに高いファイルもいくつかあります。
今回圧縮したファイルのファイルサイズを合計して、元の録画ファイルのファイルサイズの合計で割った、全体の平均圧縮率を計算してみました。
全体の平均圧縮率:28.59%
全ファイル数:48(地デジ34、BS14)
圧縮率>40%のファイル:5
QSV対応ffmpegの最適なエンコード方法は?
今までの結果を総合した結論、
「ファイルサイズ圧縮を重視する場合、CBRモード4Mbps(地デジ25%、BS20%)」
「品質を重視する場合、CQPモードq=23(平均28%程度)」
CQPモードで圧縮率40%を超えるファイルがあるのは、何故なんでしょう?
[…] )。こちらのサイトによれば、QSV対応ffmpegでは概ね23程度に設定をすると支障がないとのこと。 […]