最新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>
- フルピクセルの動き補償アルゴリズムを指定。
- -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>
- マクロブロックをサブブロックに分割する際に利用可能なモードを指定する。
- -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