最新ffmpeg / 高度なオプション


最新FFmpegのページへ戻る

最新ffmpegの高度なオプション

最新版の ffmpeg に関する高度なオプションの抜粋です。 詳細不明なものや、掲示板やページコメントから吸い上げた情報も含まれています。

(注意点)

  • オプションの中には同じ (もしくは似た) 機能・名前で対象としているコーデックが違うものがある
    • 例. -trellis と -flags trell
      • -trellis は、x264 と adpcm でしか機能せず、かつ、この2つでも値の意味が違います
      • -flags trell は MPEG1/2, H.263(+), xvid, msmpeg4 くらいでしか機能しません
  • 特定のオプションを指定しないときのデフォルト値は内部で一応決められているが、 使うコーデックによって値の意味が違うことがあります。
  • オプションの中にはでたらめな値をいれてもエラーや警告がでなかったりするものがあります
    • 例. -sc_threshold
      • このオプションは ffmpeg のパラメータチェックでは -2147483648 (INT_MIN) 〜 2147483648(INT_MAX) を外れた場合のみエラーになります。 従って、例えば x264 で -sc_threshold 10000 等の指定もできてしまいエラーにはなりませんが、これを受け取る x264 側では このパラメータは -1〜100 の範囲が想定されていますので、この食い違いにより予期せぬ結果を招く場合があります。
  • オプションのデフォルト値や挙動は今後のリビジョンアップで変わる可能性があります
  • もちろん、以下に書いた内容が間違っている可能性もあります

また、間違いやおかしな記述を発見した場合は、適宜修正をお願いします。

Advanced options:

-map <file:stream[:syncfile:syncstream]>
出力ファイルへのストリームマッピングを指定する。
  • 例. Input #0 -> #0.0: 映像、#0.1: 音声 (jpn)、#0.2; 音声 (eng) とかの場合   -map 0.0:0.0 -map 0.2:0.1 とつけると、映像と英語音声のみのファイルにできる
-re
入力ファイルのフレームレートをそのまま読み込む。
-threads <count>
エンコードのスレッド数。数字で指定。
-vsync
映像の同期方法。
フレームをドロップ・コピーしてタイムスタンプをあわせることで映像を同期する。
  • 同期時に参照するタイムスタンプは -map の syncfile:syncstream で指定されたストリームから取る。
-async <1-1000>
音声の同期方法。
音声サンプルを Stretch/Squeeze (つまりサンプルの持続時間を変更) して同期する。
  • 値は、音がズレたときに1秒間で何サンプルまで変更していいかを指定する
  • -async 1 は特別で、音声の最初だけ同期して後続のサンプルはそのまま
  • サンプルの持続時間変更を伴うので、あまり大きな音ズレを無理に補正しようとすると音がゆがむ (その場合は値を小さくして調整)
    また、インターリーブがおかしいファイルに使っても音がゆがむことがある模様
  • パケット毎のサンプル数が異なる可能性のある音声 (vorbis) や、VBR な mp3 を AVI に格納したものがソースの場合の音ずれは、
    -async で無理に同期するのではなく一度 WAV にデコードしたものを再度エンコードしなおして結合するほうがよい
-copyts
ソースサンプルのタイムスタンプを維持する。
おそらくは mp4, mkv, wmv のような形式を念頭に置いた実装。
  • 例. 23.976fps/29.970fps 混合ソースを、全編 29.970fps に修正しつつ携帯機器用に再エンコード   -r 30000/1001 -itsoffset 1001 -copyts とかすると、全編 29.970fps、TimeScale 30000 とかで出力される模様
-shortest
入力ファイル間で長さが違う場合、一番短いものの長さ分だけエンコードする。
-dts_delta_threshold
timestamp discontinuity delta threshold (詳細不明)
-muxdelay <seconds>
set the maximum demux-decode delay (デコード遅延の最大値)
-muxpreload <seconds>
set the initial demux-decode delay (デコード遅延の初期値)

AVCodecContext AVOptions

<一般的なオプション>

-coder <int>
符号化方式の種類を指定。
x264 では -coder vlc (-coder 0) で CABAC なし、-coder ac (-coder 1) で CABAC あり。
-level <int>
映像エンコードのレベル指定。指定可能な Codec は H.263、H.264、MPEG-1/2。具体的な値と意味についてはコーデックの仕様を参照のこと。 例えばH.264では16段階定義されている(参考:コーデック) 過去のffmpegにはvlevelというオプションがあったが最新のffmpegにはない。指定してもエラーはでないみたいだが使用しない方が無難。
-threads <int>
エンコードスレッド数。デュアルコア以上の CPU の場合には2など (CPUのコア数+α)を指定するとエンコードを高速化できる。 x264 を使う場合に限り -threads 0 を指定すると x264 エンコーダ側で自動で (論理CPU数×1.5) スレッドで並列処理される。
-profile <int>
以下の指定可能な値からわかるようにほぼAACのプロファイル指定専用。 各プロファイルの詳細は この辺 を参照のこと。 ただし、ポータブル機器向けでは実質 AAC-LC 以外は利用しないと思われるのでこのオプションを指定する機会はまずないはず。 また、ffmpeg にリンクされている faac では AAC-HE や AAC-HEv2 は作成できない
  unknown       このオプションを指定しない場合のデフォルト値。aac_low と同じに扱われる。
  aac_main      AAC の Main プロファイル
  aac_low       AAC の Low-Complexity プロファイル。いわゆる AAC-LC
  aac_ssr       AAC の Scalable Sampling Rate プロファイル。
  aac_ltp       AAC の Long-Term Prediction プロファイル。

<ノイズ対処>

-nr <int>
ノイズリダクションの強さ。デフォルト=0。範囲 0〜100000。
簡易的なノイズ低減フィルタとして使える。エンコード/デコードの負荷にはほとんど影響しない。
  • 通常の実用範囲は 100〜1000 (ソース) とか 0〜600 (ソース: ここ の -nr の説明) とかの模様
-deblockalpha <int>
x264 の in-loop デブロックフィルタの強度パラメータ [-6〜6] の範囲で指定。
  • -flags loop でデブロックフィルタを ON にした場合のみ意味がある。-6:デブロック弱 <-> +6:デブロック強。 細部がつぶれすぎていると思ったら値を下げ、低ビットレート時のブロックノイズが気になるなら値を上げる。 十分にビットレートを割り当ててる場合は、そもそも -flags loop を指定せずでブロックフィルタを切ってしまうのも手。
-deblockbeta <int>
x264 の in-loop デブロックフィルタの閾値パラメータ [-6〜6] の範囲で指定。
  • -flags loop でデブロックフィルタを ON にした場合のみ意味がある。-6:デブロック弱 <-> +6:デブロック強。 細部がつぶれすぎていると思ったら値を下げ、低ビットレート時のブロックノイズが気になるなら値を上げる。 十分にビットレートを割り当ててる場合は、そもそも -flags loop を指定せずでブロックフィルタを切ってしまうのも手。
-qns <int>
量子化ノイズの発生を抑えるような量子化を行う。 デフォルト=0 (無効)、1〜3 を指定可能。数字を大きくするほどエンコードは遅くなる。 有効にする場合は -flags trell を一緒に指定する必要がある。 また、これからわかるように -flags trell の対象 Codec (xvid とか msmpeg4 など) 以外では指定しても意味がない。 ※ x264 の qns パッチはこれとは別物なので x264 で指定しても意味ありません。

<レートコントロール>

-b <int>
映像ビットレート (in bits/s)。デフォルト=200kbits/s
-ab <int>
音声ビットレート (in bits/s)。デフォルト=64kbits/s
-bt <int>
映像ビットレートの変動許容幅 (in bits/s)。デフォルト=4000kbits/s
  • x264 の場合は、btの値/bの値 が -ratetol オプションの値として渡される。デフォルトだと ratetol=4000k/200k=20.0
-crf <float>
固定 "品質" でのエンコードモード (x264 のみ)。
-cqp <int>
固定 "量子化係数" でのエンコードモード。xvid 等の -qscale と同じ。
-qmin <int>
q値の最小値 (デフォルト=2)
  • x264 ではデフォルトの qmin=2 は小さ過ぎる。少なくとも 10 以上にした方がよい。 qminが小さすぎるとソースによっては黒いバックなどの動きが少ないシーンでグレーの 靄がかかったようなフレーム ("Gray Fogged Frame") が出来てしまうことがある。
  • x264 と xvid の q 値の大体の対応 (↓に挙げたくらいの範囲が実用範囲)
    • x264 q=12 <-> xvid q=1 程度
    • x264 q=18 <-> xvid q=2 程度
    • x264 q=21 <-> xvid q=3 程度
    • x264 q=24 <-> xvid q=4 程度
    • x264 q=30 <-> xvid q=8 程度
-qmax <int>
q値の最大値 (デフォルト=31)
  • こちらのデフォルト qmax=31 は、x264 の場合でも割と妥当な値。対応は qmax のところに書いたものと同じ
-qdiff <int>
隣接フレーム間でのq値の最大変動幅 (デフォルト=3)
-qcomp <float>
q値をどのくらい変動させてよいかの尺度 (デフォルト=0.5)
  • 1.0 だと q 値固定 (-cqp, -qscale) とほぼ同等
  • 0.0 だと bitrate 固定とほぼ同等 (ただし 0.0 は指定不可)
-i_qfactor <float>
I-P フレーム間の q 値の比 (I フレームの q 値/P フレームの q 値)。デフォルト=0.8。
-i_qoffset <float>
I-P フレーム間の q 値のオフセット。デフォルト=0。
-b_qfactor <float>
B-P フレーム間の q 値の比 (B フレームの q 値/P フレームの q 値)。デフォルト=1.25。
-b_qoffset <float>
B-P フレーム間の q 値のオフセット。デフォルト=0。
-mpeg_quant <int>
H.263 量子化ではなく MPEG の量子化を使う。
-maxrate <int>
最大ビットレート (in bits/s)。デフォルト=0 (指定なし)。
-minrate <int>
最小ビットレート (in bits/s)。デフォルト=0 (指定なし)。
  • -qscale や -cqp を指定しているときは max/minrate 制限は無視される
-bufsize <int>
レートコントロールのバッファサイズ (in bits)。デフォルト=0 (指定なし)。
  • -bufsize を指定しないと max/minrate 制限は無視される
  • -bufsize を小さくしすぎるとアンダーフローしやすくなり再生に影響がでるので、端末の許す限り大きな値を指定
-rc_init_occupancy <int>
デコードバッファの初期占有量 (bit 単位)。デフォルト=0 (指定なし?)
-chromaoffset <int>
chroma (UV) と luma (Y) の q 値に一定の差をつけてエンコードする。デフォルト=0 (指定なし)
-qsquish <float>
レートコントロールが qmin を下回る (または qmax を越える) q 値を弾き出したときの取り扱いを指定する
  • 0: 単純にクリップ ( 要求された q 値 < qmin の場合は無条件で q = qmin で符号化。qmax を超える場合も同じ)
  • 1: differentiable function を使う (品質の急激な変化を避けるため、q が qmin や qmax 付近では滑らかに変化するように調整する)
-rc_eq <string>
レートコントロールの式を指定する。デフォルト="tex^qComp"。
-rc_init_cplx <float>
1-pass レートコントロールで、フレームの消費ビットを大まかに見積もる際に使う係数 (詳細不明)

<GOP 関連設定>

-g <int>
GOP サイズを指定。デフォルト=12。
(素材の fps × 5 or 10 程度をきちんと指定した方が吉)
-keyint_min <int>
IDR フレームの最小間隔 (x264 のみ)。デフォルト=25。
-sc_threshold <int>
シーンチェンジ検出の閾値
  • xvid 等の場合: デフォルト=0。ここの同パラメータを参照のこと。 基本的にマイナスで大きい値にすると積極的にIフレームを挿入し、プラスで大きい値にするとその逆になる。
  • x264 の場合: デフォルト=0 は同じ。指定範囲は [-1 〜 100] で、-1 でシーンチェンジ検出無効。あとは値を大きくするほどIフレームの挿入が増える。

<その他 (動き予測、B フレーム)>

-mbd <int>
マクロブロック決定のアルゴリズム。
デフォルトの 0 で不満なら数字を上げる (ただし、上げると遅くなる)。
simple (0)             use mbcmp (デフォルト)
bits   (1)             use fewest bits
rd     (2)             use best rate distortion
-me_method <int>
フルピクセルの動き補償アルゴリズムを指定。
  • 以下は x264 を使う場合。libxvid 等でも指定できる値は同じだが意味は若干違う模様。
    epzs                    E.V.. ダイヤモンドサーチ、半径 1 (デフォルト)
    hex                     E.V.. 六角形サーチ、半径 2
    umh                     E.V.. 不等複数六角形サーチ
    full                    E.V.. 徹底サーチ (超低速、umhより全く良くなるところが無い)
-me_range <int>
動き予測の検索範囲を指定する
-subq <int>
サブピクセルの動き予測アルゴリズムを指定 (デフォルト=5)。
1 が最も高速・低精度、7 が最も低速・高精度。
-refs <int>
動き補償の際に参照できるフレームの上限数 (デフォルト=1)。
-trellis <int>
x264 で I/P フレームの trellis 量子化を有効にする。デフォルト=0、指定可能値 0〜2。
  • 指定値の意味
    • 0 = 無効 (デフォルト)
    • 1 = MB の最終的なエンコード時のみに利用
    • 2 = MB のモード決定の全処理で使用 (subq = 6 or 7 の指定が必要)
  • x264 で trellis 有効にするには CABAC が必須のため、Baseline では使えない
  • 大きい値を指定するほどエンコード負荷が増える (デコード負荷への影響はない)
-bf <frames>
最大 "frames" 枚の連続する B フレームを使う。デフォルト=0 (B フレーム不使用)。最大値=16。
-b_strategy <int>
B フレームの挿入位置を適応的に判断するかどうか。デフォルト=0 (-bf で指定した枚数を常に使う)
  • x264 の場合は 1 を指定すると adaptive B frame decision が有効になる
-b_sensitivity <int>
-b_strategy=1 のときに B フレームの使用の判断基準にする閾値。デフォルト=40。
-bframebias <int>
B フレームをどのくらい使うかの指標 (x264のみ)。
デフォルト=0。-100〜100 の範囲で設定。大きいほど B フレームをたくさん使う。
-directpred <int>
B フレームの直接予測のモード - 0 (none), 1 (spatial), 2 (temporal) (x264のみ)。デフォルト=2 (temporal)。 x264 CLI と違い文字列指定は出来ません。文字列はすべて 0 (none) と同じ扱いになります。数字で指定してください。 また、ヘルプにはでてきませんが、3 を指定すると x264 CLI の --direct auto と同等になります。
-bidir_refine <int>
B フレームの双方向予測を有効化する。x264 の --bime 相当のオプション。0 以外を指定すると有効になる。 xvid の HighQuality モードとかでも参照されるみたいだが、こちらは詳細不明。
-partitions <flags>
マクロブロックをサブブロックに分割する際に利用可能なモードを指定する。
  • 複数指定する場合は + でつなぐ (例. -partitions parti4x4+partp8x8+partb8x8 等)
  • 基本的には数多く指定するほどエンコード負荷が上がり時間がかかる
  • 携帯機器向けの場合、CPU に余裕があるなら -partitions parti4x4+partp8x8 を指定するとよい
    parti4x4                基本的に指定した方が画質は安定すると思う
    parti8x8                High Profile のみ、かつ -flags2 dct8x8 を指定しないと使われない。
                            よって携帯機器向けでは出番なし。
    partp4x4                以前は非推奨オプションだったが最近のrevでは指定しても問題ないらしい
                            最新ffmpegでx264のリビジョンが新しいものであれば常に指定しても問題ないかも
                            (以上、2ch の某スレで見かけた発言)
    partp8x8                基本的に指定した方が画質は安定すると思う
    partb8x8                B-Frame を使う場合には指定するとよい
-cmp <int>
E.V.. フルピクセルの動き予測で用いられる比較関数
sad                     sum of absolute differences, fast (default)
sse                     sum of squared errors
satd                    sum of absolute Hadamard transformed differences
dct                     sum of absolute DCT transformed differences
bit                     number of bits needed for the block
rd                      rate distortion optimal, slow
                        ※ x264 の場合 -subq 6 以上を指定で RDO 有効化なので、このオプションは多分効かない
chroma                  色情報を含めた動き予測をする
                        ※ x264 の場合 -cmp chroma 指定 (かつ、subq が 5 以上) の場合 chroma me が ON になる

<各種フラグ>

-flags <flags>
主にエンコードに関係するフラグ類
複数指定するときは + でつなぐ。
基本的に x264 系のオプションは別途 -flags2 に固めてあるようなので指定しても意味が無いものが多い。
mv4                     use four motion vector by macroblock (mpeg4 のみ)
                              16x16 のマクロブロックを4x4のサブブロック4つにわけてそれぞれに動きベクトルを持たせる
obmc                    use overlapped block motion compensation (h263+ のみ)
                              ブロック境界での予測誤差を減らすために、マクロブロックの境界を overlap させて動き補償解析をする。
qpel                    use 1/4 pel motion compensation (mpeg4, xvid 系)
                              動き補償を 1/4 ピクセル精度にする。x264 の場合は、別に -subq オプションがあるので使わない。
loop                    use loop filter
                              デブロックフィルタを有効にする (デフォルトは無効)。x264 のブロックフィルタの ON/OFF もこれで切り替える。
gmc                     use gmc (mpeg4, xvid 系)
                              global motion compensation を使う (全画面のパンなどで有効らしい)。x264 では意味なし。
mv0                     always try a mb with mv=<0,0>
part                    use data partitioning
gray                    only decode/encode grayscale
                              グレイスケール (白黒) のエンコード
naq                     normalize adaptive quantization
ildct                   use interlaced dct
                              インターレース対応の DCT を使う (インターレース保持用)
low_delay               force low delay
alt                     enable alternate scantable (mpeg2/mpeg4)
trell                   use trellis quantization
                              trellis 量子化を使う。x264 の trellis は別オプション。
bitexact                use only bitexact stuff (except (i)dct)
                              リファレンスエンコーダとの比較用オプションなので、通常は使わない。
                              つけないと携帯機器で再生できないファイルになってしまう場合のみつければよい。
aic                     h263 advanced intra coding / mpeg4 ac prediction
umv                     use unlimited motion vectors
cbp                     use rate distortion optimization for cbp
qprd                    use rate distortion optimization for qp selection
aiv                     h263 alternative inter vlc
slice                   
cgop                    closed gop
                              closed gop にする (シーンチェンジ検出を無効にしないと機能しない)。
ilme                    interlaced motion estimation
                              インターレース対応の動き予測を使う (インターレース保持用)
-flags2 <flags>
主にエンコードに関係するフラグ類(その2)
複数指定するときは + でつなぐ。
bpyramid                allows B-frames to be used as references for predicting (x264)
                              B フレームを参照フレームとして使えるようにする
wpred                   weighted biprediction for b-frames (H.264)
                              B フレームに対して重み付け予測を使う
mixed_refs              one reference per partition, as opposed to one reference per macroblock
                              16x16 のマクロブロック内の、サブマクロブロック (4x4とか8x16とか) がそれぞれ異なるフレームを参照できるようにする
dct8x8                  high profile 8x8 transform (H.264)
                              8x8 DCT を使用可能にする。指定すると自動的に High Profile になってしまうので注意。
                              また、-partitions parti8x8 はこれを指定しないと機能しない。
fastpskip               fast pskip (H.264)
                              P フレームでの早い段階でのスキップ MB 検出を有効にする。
brdo                    b-frame rate-distortion optimization (H.264)
                              B フレームにレート歪み最適化を使う。subq が 6 以上でないといけない。

AVFormatContext AVOptions:

-muxrate <int>
set mux rate
-packetsize <int>
set packet size
-track <int>
set the track number
-year <int>
set the year