cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

TVからのTSファイルをffmpegでmp4エンコードする現在の設定

ことわっておくが私もこのffmpegのオプションの詳細についてよく把握できていないものが多い。それほど複雑ってことだ。
理屈がわからないまま値を変更していって試行錯誤で決まったものも多く、

readonly SVGA="800:600"

ffmpeg -y -dual_mono_mode main -i "src.ts" -movflags +faststart \
  -flags +loop -partitions parti4x4+partp8x8 -me_method umh -subq 8 -me_range 16 -g 250 -sc_threshold 40 -i_qfactor 0.71 -b_strategy 1 -qmin 10 -rc_eq "blurCplx^(1-qComp)" -bf 16 -bidir_refine 1 -refs 16 -deblock 0:0 \
  -c:v h264_qsv -b:v 4M -crf 25 -pix_fmt yuv420p -profile:v main -look_ahead 0 -vf yadif,scale=$SVGA -preset slow \
  -c:a libfdk_aac -vbr 4 "out.mp4"
  • -dual_mono_mode main
  • -c:v h264_qsv -b:v 4M -crf 25
  • -c:a libfdk_aac -vbr 4
    • FDK-AACライブラリを使って、可変長(VBR)の5段階中4の品質でエンコードする。(だいたいビットレートが105~110kbpsくらいになる。)
    • -c:a copy の無劣化でやるのが一番楽なのだが、-c:a copyだとエラーが出てエンコードできないケースがあるので、多少の劣化に目をつぶって汎用性を持たせた結果。
    • VBRなハズなのにMediaInfoではCBRと表示されるから混乱した。音声だけ抜き出すとVBRと表示されるのでますます混乱する。深く考えないことにした(このことについてくどくど後述している)。
  • -flags +loop -partitions parti4x4+partp8x8 -me_method umh -subq 8 -me_range 16 -g 250 -sc_threshold 40 -i_qfactor 0.71 -b_strategy 1 -qmin 10 -rc_eq "blurCplx^(1-qComp)" -bf 16 -bidir_refine 1 -refs 16 -deblock 0:0

AACについてのさらなる探求

音質比較記事
ch.nicovideo.jp
kamedo2.hatenablog.jp
AACエンコーダの音質比較

VBRにするか、HE-AAC

AACとは (エーエーシーとは) [単語記事] - ニコニコ大百科
ニコニコ大百科を見る限りAACビットレートをすごく小さくしない限りは、HE-AACにする意味はあまりなさそうだ。

-vbrフラグを付けてるのに、MediaInfoでmp4のデータを見るとオーディオがCBRと表示されるため、「もしかしてQSVだと強制的にCBRにされる?」と疑ったが、そのデータからAACだけを抜き出すとVBRと表示されるため、よくわからんがMediaInfoの解析ミスということにしておく。
PotPlayerのようなCtrl+F1で再生中のリアルタイムビットレート確認できるプレイヤーでも刻刻ビットレートが変動しているのが見えるし、実質VBRなのだろう。

ここで LC-AAC、HC-AACの違いは

LC-AACAAC-LC (AAC Low Complexity)と呼ばれる基本機能だけのもの
HE-AAC :High-Efficiency AAC、aacPlus、AAC+SBR、aacPlus Version 2、Enhanced aacPlus、AAC+SBR+PS と呼ばれる低ビットレートで高音質となるもの

となっています。

HE-AAC を使う場合は

  • profile:a aac_he

または

  • profile:a aac_he_v2

を指定します。
v2のほうが新しい規格で、48kbps 以下の低ビットレートでの音質が改善します。

  • vbr オプションの [品質] の部分には 1〜5 を指定します。

HE-AAC を使う場合は 3 が最高品質、
そうでない場合は 5が最高品質です。

FFmpeg で高音質 AAC 変換できるようにする
  • profile:a で指定できるのが

aac_low :AAC-LC 何も指定しないとこれになる
aac_he :HE-AAC 44.1kHzでは28kから使える 推奨32k-48k
aac_he_v2 :HE-AACv2 44.1kHzでは28k-64kまで使える 推奨16-24k

【ffmpeg】 fdk-aac を ffmpeg に組み込む - ニコニコ動画研究所

なるべく小さい音声ファイルを作る - Qiita

サンプルレート-arについて

映像の場合は48kHzが標準(音楽業界では44,1kHz)参考。特に指定しない限りはエンコード時にエンコード元のサンプルレートが引き継がれる。