⚠️ これは 非公式の翻訳サイトです。FFmpeg プロジェクトとは無関係です。正確な情報は 原文(https://ffmpeg.org/ffmpeg.html) を参照してください。

ffmpeg ドキュメント

1 書式

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

2 概要

ffmpeg は汎用のメディアコンバータです。ライブのキャプチャ/録画デバイスを含むさまざまな入力を読み込み、フィルタをかけ、多種多様な出力フォーマットへトランスコードできます。

ffmpeg は任意の数の入力(通常のファイル、パイプ、ネットワークストリーム、キャプチャデバイスなど)を -i オプションで指定して読み込み、任意の数の出力へ書き出します。出力は単に出力 URL として指定します。コマンドラインでオプションとして解釈できないものはすべて出力 URL とみなされます。

入力・出力はいずれも、原理的には異なる種類(映像/音声/字幕/添付ファイル/データ)のエレメンタリーストリームを任意の数だけ含むことができますが、扱えるストリームの数や種類はコンテナフォーマットによって制限される場合があります。どの入力のどのストリームをどの出力に入れるかは、自動で選択されるか -map オプションで指定します(「ストリーム選択」の章を参照)。

オプション内で入力・出力を参照するときは、そのインデックス(0 始まり)を使います。たとえば最初の入力は 0、2 番目は 1 というように指定します。入力・出力内のストリームも同様にインデックスで参照します。たとえば 2:3 は 3 番目の入力または出力の 4 番目のストリームを指します。「ストリーム指定子」の章も参照してください。

原則として、オプションは次に指定したファイルへ適用されます。したがって順序が重要で、同じオプションをコマンドライン上に何度も書けます。各出現は、それぞれ次の入力ファイルまたは出力ファイルへ適用されます。この原則の例外がグローバルオプション(たとえばログ出力の詳細レベル)で、これらは先頭で指定すべきです。

入力ファイルと出力ファイルを混在させないでください。まずすべての入力ファイルを指定し、それからすべての出力ファイルを指定します。また、異なるファイルに属するオプションを混在させないでください。すべてのオプションは次の入力ファイルまたは出力ファイルにのみ適用され、ファイルの切れ目でリセットされます。

以下に簡単な例をいくつか示します。

  • 入力メディアファイルを別のフォーマットに変換する(メディアストリームを再エンコードして):

    ffmpeg -i input.avi output.mp4
    
  • 出力ファイルの映像ビットレートを 64 kbit/s に設定する:

    ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4
    
  • 出力ファイルのフレームレートを 24 fps に強制する:

    ffmpeg -i input.avi -r 24 output.mp4
    
  • 入力ファイルのフレームレート(raw フォーマットでのみ有効)を 1 fps に、出力ファイルのフレームレートを 24 fps に強制する:

    ffmpeg -r 1 -i input.m2v -r 24 output.mp4
    

raw 入力ファイルには format オプションが必要になる場合があります。

3 詳しい説明

ffmpeg は以下に挙げる構成要素からトランスコードのパイプラインを組み立てます。プログラムの動作は、入力データの塊がソースからパイプを流れてシンクへ向かい、その途中で出会った構成要素によって変換されていく、という形になります。

利用できる構成要素には次の種類があります。

  • Demuxer("demultiplexer" の略)は入力ソースを読み込み、次のものを取り出します。
    • メタデータやチャプターなどのグローバルなプロパティ
    • 入力エレメンタリーストリームの一覧とそのプロパティ

demuxer のインスタンスは -i オプションごとに 1 つ生成され、エンコード済みの パケット を decoder または muxer へ送ります。

他の文献では demuxer は splitter と呼ばれることもあります。主な機能がファイルをエレメンタリーストリームへ分割することだからです(とはいえ、エレメンタリーストリームを 1 つしか含まないファイルもあります)。

demuxer を図にすると次のようになります。

┌──────────┬───────────────────────┐
│ demuxer  │                       │ packets for stream 0
╞══════════╡ elementary stream 0   ├──────────────────────►
│          │                       │
│  global  ├───────────────────────┤
│properties│                       │ packets for stream 1
│   and    │ elementary stream 1   ├──────────────────────►
│ metadata │                       │
│          ├───────────────────────┤
│          │                       │
│          │     ...........       │
│          │                       │
│          ├───────────────────────┤
│          │                       │ packets for stream N
│          │ elementary stream N   ├──────────────────────►
│          │                       │
└──────────┴───────────────────────┘
     ▲
     │
     │ read from file, network stream,
     │     grabbing device, etc.
     │
  • Decoder は音声・映像・字幕エレメンタリーストリームのエンコード済み(圧縮された)パケット を受け取り、raw な フレーム(映像なら画素の配列、音声なら PCM)へデコードします。decoder は通常、demuxer 内のエレメンタリーストリームと結び付き、そこから入力を受け取りますが、単独で存在することもあります(「ループバックデコーダ」を参照)。

decoder を図にすると次のようになります。

    ┌─────────┐
     packets  │         │ raw frames
    ─────────►│ decoder ├────────────►
              │         │
              └─────────┘
  • Filtergraph は raw な音声・映像 フレーム を処理・変換します。filtergraph は 1 つ以上の個別の フィルタ をグラフ状につないだものです。filtergraph には simplecomplex の 2 種類があり、それぞれ -filter オプションと -filter_complex オプションで設定します。

simple filtergraph は 出力エレメンタリーストリーム と結び付きます。フィルタをかける入力を decoder から受け取り、フィルタ済みの出力をその出力ストリームの encoder へ送ります。

yadif デインターレーサによるデインターレースの後に scale フィルタによるリサイズを行う simple な映像 filtergraph は、次のような形になります。

    ┌────────────────────────┐
                 │  simple filtergraph    │
     frames from ╞════════════════════════╡ frames for
     a decoder   │  ┌───────┐  ┌───────┐  │ an encoder
    ────────────►├─►│ yadif ├─►│ scale ├─►│────────────►
                 │  └───────┘  └───────┘  │
                 └────────────────────────┘

complex filtergraph は独立しており、特定のストリームとは結び付きません。複数の(あるいはゼロ個の)入力を持つことができ、それぞれ異なる種類(音声または映像)でかまいません。各入力は decoder または別の complex filtergraph の出力からデータを受け取ります。出力も 1 つ以上持ち、encoder または別の complex filtergraph の入力へ供給します。

次の図は、3 入力 2 出力(すべて映像)の complex filtergraph の例を表しています。

    ┌─────────────────────────────────────────────────┐
              │               complex filtergraph               │
              ╞═════════════════════════════════════════════════╡
     frames   ├───────┐  ┌─────────┐      ┌─────────┐  ┌────────┤ frames
    ─────────►│input 0├─►│ overlay ├─────►│ overlay ├─►│output 0├────────►
              ├───────┘  │         │      │         │  └────────┤
     frames   ├───────┐╭►│         │    ╭►│         │           │
    ─────────►│input 1├╯ └─────────┘    │ └─────────┘           │
              ├───────┘                 │                       │
     frames   ├───────┐ ┌─────┐ ┌─────┬─╯              ┌────────┤ frames
    ─────────►│input 2├►│scale├►│split├───────────────►│output 1├────────►
              ├───────┘ └─────┘ └─────┘                └────────┤
              └─────────────────────────────────────────────────┘

2 番目の入力のフレームが 1 番目の入力のフレームの上に重ねられます。3 番目の入力のフレームはリスケールされたあと、同一の 2 ストリームに複製されます。一方は最初の 2 入力を合成したものの上に重ねられ、その結果が filtergraph の 1 番目の出力として外に出されます。もう一方の複製が filtergraph の 2 番目の出力になります。

  • Encoder は raw な音声・映像・字幕 フレーム を受け取り、エンコード済みの パケット へ符号化します。エンコード(圧縮)処理は通常 非可逆(ロッシー) で、ストリーム品質を落とす代わりに出力を小さくします。可逆(ロスレス) な encoder もありますが、その分出力サイズはかなり大きくなります。映像・音声 encoder は何らかの filtergraph の出力から入力を受け取り、字幕 encoder は decoder から入力を受け取ります(字幕のフィルタはまだ未対応のため)。すべての encoder は何らかの muxer の 出力エレメンタリーストリーム と結び付き、その muxer へ出力を送ります。

encoder を図にすると次のようになります。

    ┌─────────┐
     raw frames  │         │ packets
    ────────────►│ encoder ├─────────►
                 │         │
                 └─────────┘
  • Muxer("multiplexer" の略)は、encoder から(トランスコード 経路)または demuxer から直接(ストリームコピー 経路)、各エレメンタリーストリームのエンコード済み パケット を受け取り、(エレメンタリーストリームが複数あるときは)それらをインターリーブして、結果のバイト列を出力ファイル(あるいはパイプ、ネットワークストリームなど)へ書き込みます。

muxer を図にすると次のようになります。

    ┌──────────────────────┬───────────┐
     packets for stream 0  │                      │   muxer   │
    ──────────────────────►│  elementary stream 0 ╞═══════════╡
                           │                      │           │
                           ├──────────────────────┤  global   │
     packets for stream 1  │                      │properties │
    ──────────────────────►│  elementary stream 1 │   and     │
                           │                      │ metadata  │
                           ├──────────────────────┤           │
                           │                      │           │
                           │     ...........      │           │
                           │                      │           │
                           ├──────────────────────┤           │
     packets for stream N  │                      │           │
    ──────────────────────►│  elementary stream N │           │
                           │                      │           │
                           └──────────────────────┴─────┬─────┘
                                                        │
                         write to file, network stream, │
                             grabbing device, etc.      │
                                                        │
                                                        ▼

3.1 ストリームコピー

ffmpeg における最も単純なパイプラインが、単一ストリームの ストリームコピー です。これは 1 つの 入力エレメンタリーストリーム のパケットを、デコード・フィルタ・エンコードせずにコピーするものです。例として、3 つのエレメンタリーストリームを持つ INPUT.mkv という入力ファイルから 2 番目を取り出し、OUTPUT.mp4 というファイルに書き出す場合を考えます。このパイプラインを図にすると次のようになります。

┌──────────┬─────────────────────┐
│ demuxer  │                     │ unused
╞══════════╡ elementary stream 0 ├────────╳
│          │                     │
│INPUT.mkv ├─────────────────────┤          ┌──────────────────────┬───────────┐
│          │                     │ packets  │                      │   muxer   │
│          │ elementary stream 1 ├─────────►│  elementary stream 0 ╞═══════════╡
│          │                     │          │                      │OUTPUT.mp4 │
│          ├─────────────────────┤          └──────────────────────┴───────────┘
│          │                     │ unused
│          │ elementary stream 2 ├────────╳
│          │                     │
└──────────┴─────────────────────┘

上のパイプラインは次のコマンドラインで構築できます。

ffmpeg -i INPUT.mkv -map 0:1 -c copy OUTPUT.mp4

このコマンドラインでは

  • 入力が 1 つ(INPUT.mkv)あります。
  • この入力に対する入力オプションはありません。
  • 出力が 1 つ(OUTPUT.mp4)あります。
  • この出力に対する出力オプションが 2 つあります。
    • -map 0:1 は使用する入力ストリームを選択します。インデックス 0 の入力(つまり最初のもの)から、インデックス 1 のストリーム(つまり 2 番目のもの)を選びます。
    • -c copycopy encoder、すなわちデコードもエンコードもしないストリームコピーを選択します。

ストリームコピーは、エレメンタリーストリームの数やコンテナフォーマットを変えたり、コンテナレベルのメタデータを変更したりするのに便利です。デコードもエンコードもしないため非常に高速で、品質劣化もありません。ただし、さまざまな要因(たとえば、出力先コンテナが必要とする情報がソースにない等)でうまくいかない場合もあります。フィルタはデコード済みのフレームに対して働くため、当然ながらストリームコピーには適用できません。

もっと複雑なストリームコピーも構築できます。たとえば、2 つの入力ファイルのストリームを 1 つの出力に統合する場合です。

┌──────────┬────────────────────┐         ┌────────────────────┬───────────┐
│ demuxer 0│                    │ packets │                    │   muxer   │
╞══════════╡elementary stream 0 ├────────►│elementary stream 0 ╞═══════════╡
│INPUT0.mkv│                    │         │                    │OUTPUT.mp4 │
└──────────┴────────────────────┘         ├────────────────────┤           │
┌──────────┬────────────────────┐         │                    │           │
│ demuxer 1│                    │ packets │elementary stream 1 │           │
╞══════════╡elementary stream 0 ├────────►│                    │           │
│INPUT1.aac│                    │         └────────────────────┴───────────┘
└──────────┴────────────────────┘

これは次のコマンドラインで作れます。

ffmpeg -i INPUT0.mkv -i INPUT1.aac -map 0:0 -map 1:0 -c copy OUTPUT.mp4

ここでは出力の -map オプションを 2 回使い、出力ファイルに 2 つのストリームを作っています。一方は 1 番目の入力から、もう一方は 2 番目の入力から供給されます。-c オプションは 1 回だけで、両方のストリームにストリームコピーを選択しています。以降の節で示すように、このオプションを複数回使い、ストリーム指定子と組み合わせてストリームごとに異なる値を適用することもできます。

逆に、1 つの入力の複数ストリームを複数の出力へ分割するシナリオもあります。

┌──────────┬─────────────────────┐          ┌───────────────────┬───────────┐
│ demuxer  │                     │ packets  │                   │ muxer 0   │
╞══════════╡ elementary stream 0 ├─────────►│elementary stream 0╞═══════════╡
│          │                     │          │                   │OUTPUT0.mp4│
│INPUT.mkv ├─────────────────────┤          └───────────────────┴───────────┘
│          │                     │ packets  ┌───────────────────┬───────────┐
│          │ elementary stream 1 ├─────────►│                   │ muxer 1   │
│          │                     │          │elementary stream 0╞═══════════╡
└──────────┴─────────────────────┘          │                   │OUTPUT1.mp4│
                                            └───────────────────┴───────────┘

これは次のように作ります。

ffmpeg -i INPUT.mkv -map 0:0 -c copy OUTPUT0.mp4 -map 0:1 -c copy OUTPUT1.mp4

値が同じでも、出力ファイルごとに -c オプションの個別のインスタンスが必要な点に注目してください。これは、(ほとんどがそうである)非グローバルなオプションは、その手前に置かれたファイルの文脈でのみ適用されるためです。

これらの例はもちろん、任意の数の入力から任意の数の出力への任意のリマッピングへとさらに一般化できます。

3.2 トランスコード

トランスコード とは、ストリームをデコードしてから再びエンコードする処理です。エンコードは計算負荷が高く、たいていの場合ストリーム品質を落とす(つまり 非可逆 である)ため、必要なときだけトランスコードし、それ以外はストリームコピーすべきです。トランスコードする典型的な理由は次のとおりです。

  • フィルタをかける。たとえば映像のリサイズ・デインターレース・オーバーレイ、音声のリサンプリングやミキシングなど。
  • 元のコーデックをデコードできない何かにストリームを渡したい場合。

ffmpeg は、-c copy を指定しない限り、すべての音声・映像・字幕ストリームをトランスコードする点に注意してください。

1 つの音声ストリームと 1 つの映像ストリームを持つ入力ファイルを読み込み、映像をトランスコードし、音声をコピーして 1 つの出力ファイルにまとめるパイプラインの例を考えます。これは次のように図示できます。

┌──────────┬─────────────────────┐
│ demuxer  │                     │       audio packets
╞══════════╡ stream 0 (audio)    ├─────────────────────────────────────╮
│          │                     │                                     │
│INPUT.mkv ├─────────────────────┤ video    ┌─────────┐     raw        │
│          │                     │ packets  │  video  │ video frames   │
│          │ stream 1 (video)    ├─────────►│ decoder ├──────────────╮ │
│          │                     │          │         │              │ │
└──────────┴─────────────────────┘          └─────────┘              │ │
                                                                     ▼ ▼
                                                                     │ │
┌──────────┬─────────────────────┐ video    ┌─────────┐              │ │
│ muxer    │                     │ packets  │  video  │              │ │
╞══════════╡ stream 0 (video)    │◄─────────┤ encoder ├──────────────╯ │
│          │                     │          │(libx264)│                │
│OUTPUT.mp4├─────────────────────┤          └─────────┘                │
│          │                     │                                     │
│          │ stream 1 (audio)    │◄────────────────────────────────────╯
│          │                     │
└──────────┴─────────────────────┘

実装は次のコマンドラインになります。

ffmpeg -i INPUT.mkv -map 0:v -map 0:a -c:v libx264 -c:a copy OUTPUT.mp4

ストリーム指定子 :v:a を使って入力ストリームを選択し、-c オプションに異なる値を適用している点に注目してください。詳しくは「ストリーム指定子」の節を参照してください。

3.3 フィルタリング

トランスコードの際には、音声・映像ストリームをエンコード前に simple または complex の filtergraph でフィルタできます。

3.3.1 simple filtergraph

simple filtergraph は、入力と出力をちょうど 1 つずつ持ち、両者が同じ種類(音声または映像)であるものです。ストリームごとの -filter オプション(-filter:v(映像)と -filter:a(音声)にはそれぞれ -vf、-af のエイリアスがあります)で設定します。simple filtergraph は出力ストリームに結び付くので、たとえば複数の音声ストリームがあると、-af はそれぞれに対して別々の filtergraph を作る点に注意してください。

先ほどのトランスコードの例にフィルタリングを加える(説明をわかりやすくするため音声は省略する)と、次のようになります。

┌──────────┬───────────────┐
│ demuxer  │               │          ┌─────────┐
╞══════════╡ video stream  │ packets  │  video  │ frames
│INPUT.mkv │               ├─────────►│ decoder ├─────►───╮
│          │               │          └─────────┘         │
└──────────┴───────────────┘                              │
                                  ╭───────────◄───────────╯
                                  │   ┌────────────────────────┐
                                  │   │  simple filtergraph    │
                                  │   ╞════════════════════════╡
                                  │   │  ┌───────┐  ┌───────┐  │
                                  ╰──►├─►│ yadif ├─►│ scale ├─►├╮
                                      │  └───────┘  └───────┘  ││
                                      └────────────────────────┘│
                                                                │
                                                                │
┌──────────┬───────────────┐ video    ┌─────────┐               │
│ muxer    │               │ packets  │  video  │               │
╞══════════╡ video stream  │◄─────────┤ encoder ├───────◄───────╯
│OUTPUT.mp4│               │          │         │
│          │               │          └─────────┘
└──────────┴───────────────┘

3.3.2 complex filtergraph

complex filtergraph は、1 つのストリームに適用される単純な直線的処理チェインとしては記述できないものです。たとえば、グラフの入力や出力が複数ある場合、あるいは出力ストリームの種類が入力と異なる場合がこれにあたります。complex filtergraph は -filter_complex オプションで設定します。complex filtergraph はその性質上、単一のストリームやファイルに一意に結び付けることができないため、このオプションはグローバルです。-filter_complex の各インスタンスが新しい complex filtergraph を作り、いくつでも持てます。

complex filtergraph のごく単純な例が overlay フィルタです。これは 2 つの映像入力と 1 つの映像出力を持ち、一方の映像をもう一方の上に重ねた出力を返します。その音声版が amix フィルタです。

3.4 ループバックデコーダ

decoder は通常 demuxer のストリームと結び付きますが、「ループバック」デコーダを作ることもできます。これはある encoder の出力をデコードし、それを complex filtergraph へ送り返せるようにするものです。これは -dec ディレクティブで行い、デコードすべき出力ストリームのインデックスをパラメータに取ります。このディレクティブごとに新しいループバックデコーダが作られ、0 から始まる連番のインデックスが付きます。これらのインデックスは、-filter_complex のドキュメントで説明するとおり、complex filtergraph のリンクラベルでループバックデコーダを参照するのに使います。

デコードの AVOptions は、入力/出力オプションと同様に -dec の前に置くことでループバックデコーダへ渡せます。

たとえば次の例

ffmpeg -i INPUT                                        \
  -map 0:v:0 -c:v libx264 -crf 45 -f null -            \
  -threads 3 -dec 0:0                                  \
  -filter_complex '[0:v][dec:0]hstack[stack]'          \
  -map '[stack]' -c:v ffv1 OUTPUT

は入力映像を読み込み、

  • (2 行目)libx264 で低品質にエンコードし、
  • (3 行目)このエンコード済みストリームを 3 スレッドでデコードし、
  • (4 行目)デコードした映像を元の入力映像と横並びに配置し、
  • (5 行目)合成した映像を可逆エンコードして OUTPUT に書き出します。

このようなトランスコードのパイプラインは次の図で表せます。

┌──────────┬───────────────┐
│ demuxer  │               │   ┌─────────┐            ┌─────────┐    ┌────────────────────┐
╞══════════╡ video stream  │   │  video  │            │  video  │    │ null muxer         │
│   INPUT  │               ├──►│ decoder ├──┬────────►│ encoder ├─┬─►│(discards its input)│
│          │               │   └─────────┘  │         │(libx264)│ │  └────────────────────┘
└──────────┴───────────────┘                │         └─────────┘ │
                                 ╭───────◄──╯   ┌─────────┐       │
                                 │              │loopback │       │
                                 │ ╭─────◄──────┤ decoder ├────◄──╯
                                 │ │            └─────────┘
                                 │ │
                                 │ │
                                 │ │  ┌───────────────────┐
                                 │ │  │complex filtergraph│
                                 │ │  ╞═══════════════════╡
                                 │ │  │  ┌─────────────┐  │
                                 ╰─╫─►├─►│   hstack    ├─►├╮
                                   ╰─►├─►│             │  ││
                                      │  └─────────────┘  ││
                                      └───────────────────┘│
                                                           │
┌──────────┬───────────────┐  ┌─────────┐                  │
│ muxer    │               │  │  video  │                  │
╞══════════╡ video stream  │◄─┤ encoder ├───────◄──────────╯
│  OUTPUT  │               │  │ (ffv1)  │
│          │               │  └─────────┘
└──────────┴───────────────┘

4 ストリーム選択

ffmpeg は、各出力ファイルでストリーム選択を手動で制御するための -map オプションを提供します。-map を省いて、後述の自動ストリーム選択に任せることもできます。-vn / -an / -sn / -dn オプションを使うと、手動でマップしたか自動で選択されたかにかかわらず、それぞれ映像・音声・字幕・データストリームを取り込まないようにできます。ただし complex filtergraph の出力であるストリームは例外です。

4.1 説明

以下の小節では、ストリーム選択にかかわるさまざまな規則を説明します。続いてその次の例で、これらの規則が実際にどう適用されるかを示します。

プログラムの動作を正確に反映するよう努めていますが、FFmpeg は継続的に開発されており、本稿執筆時からコードが変わっている可能性があります。

4.1.1 自動ストリーム選択

ある出力ファイルに map オプションが一切ない場合、ffmpeg は出力フォーマットを調べ、そこに含められるストリームの種類(映像・音声・字幕のいずれか)を確認します。許容される各ストリーム種類について、ffmpeg はすべての入力の中から(利用可能なら)1 つのストリームを選びます。

選択は次の基準に従います。

  • 映像では、最も解像度の高いストリーム。
  • 音声では、最もチャンネル数の多いストリーム。
  • 字幕では、最初に見つかった字幕ストリーム。ただし注意点があります。出力フォーマットの既定の字幕 encoder はテキストベースか画像ベースのいずれかで、同じ種類の字幕ストリームしか選ばれません。

同じ種類のストリームが複数あり、評価が同じになる場合は、インデックスが最も小さいストリームが選ばれます。

データストリームや添付ストリームは自動選択されず、-map を使ってのみ取り込めます。

4.1.2 手動ストリーム選択

-map を使うと、その出力ファイルにはユーザーがマップしたストリームだけが取り込まれます。ただし後述する filtergraph 出力に関する 1 つの例外があります。

4.1.3 complex filtergraph

ラベルのないパッドを持つ complex filtergraph 出力ストリームがあると、それらは 1 番目の出力ファイルに追加されます。そのストリーム種類を出力フォーマットがサポートしていない場合は致命的エラーになります。map オプションがないとき、これらのストリームが取り込まれることで、その種類の自動ストリーム選択はスキップされます。map オプションがある場合、これらの filtergraph ストリームはマップされたストリームに加えて取り込まれます。

ラベル付きのパッドを持つ complex filtergraph 出力ストリームは、ちょうど 1 回マップしなければなりません。

4.1.4 ストリームの取り扱い

ストリームの取り扱いはストリーム選択とは独立しています(後述する字幕の例外を除く)。ストリームの取り扱いは、特定の 出力 ファイル内のストリームに向けた -codec オプションで設定します。とくに、コーデックオプションはストリーム選択処理の後に ffmpeg が適用するため、選択には影響しません。あるストリーム種類に -codec オプションが指定されていなければ、ffmpeg は出力ファイルの muxer が登録している既定の encoder を選びます。

字幕には例外があります。出力ファイルに字幕 encoder が指定されている場合、テキスト・画像のどちらであれ、最初に見つかった字幕ストリームが取り込まれます。ffmpeg は、指定された encoder が選択されたストリームを変換できるか、変換後のストリームが出力フォーマットに収まるかを検証しません。これは一般にも当てはまります。ユーザーが encoder を手動で指定した場合、ストリーム選択処理は、エンコードされたストリームが出力ファイルに mux できるかを確認できません。もし mux できなければ、ffmpeg は中断し、すべての 出力ファイルの処理が失敗します。

4.2 例

以下の例は、ffmpeg のストリーム選択手法の挙動・癖・限界を示します。

例では次の 3 つの入力ファイルを想定します。

input file 'A.avi'
      stream 0: video 640x360
      stream 1: audio 2 channels

input file 'B.mp4'
      stream 0: video 1920x1080
      stream 1: audio 2 channels
      stream 2: subtitles (text)
      stream 3: audio 5.1 channels
      stream 4: subtitles (text)

input file 'C.mkv'
      stream 0: video 1280x720
      stream 1: audio 2 channels
      stream 2: subtitles (image)

例: 自動ストリーム選択

ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov

出力ファイルが 3 つ指定されており、最初の 2 つには -map オプションが設定されていないため、ffmpeg はこれら 2 ファイルのストリームを自動選択します。

out1.mkv は Matroska コンテナファイルで、映像・音声・字幕ストリームを受け入れるため、ffmpeg は各種類を 1 つずつ選ぼうとします。
映像については、すべての入力映像ストリームの中で最も解像度の高い B.mp4 の stream 0 を選びます。
音声については、最もチャンネル数の多い B.mp4 の stream 3 を選びます。
字幕については、A.avi と B.mp4 の中で最初の字幕ストリームである B.mp4 の stream 2 を選びます。

out2.wav は音声ストリームしか受け入れないため、B.mp4 の stream 3 だけが選ばれます。

out3.mov には -map オプションが設定されているので、自動ストリーム選択は行われません。-map 1:a オプションは 2 番目の入力 B.mp4 のすべての音声ストリームを選びます。この出力ファイルにはほかのストリームは取り込まれません。

最初の 2 つの出力では、取り込まれたすべてのストリームがトランスコードされます。選ばれる encoder は各出力フォーマットが登録している既定のもので、選択された入力ストリームのコーデックとは一致しないことがあります。

3 番目の出力では、音声ストリームのコーデックオプションが copy に設定されているため、デコード・フィルタ・エンコードの処理は一切起こりませんし、起こり えません。選択されたストリームのパケットは、入力ファイルから運ばれて出力ファイルに mux されます。

例: 字幕の自動選択

ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv

out1.mkv は字幕ストリームを受け入れる Matroska コンテナファイルですが、選ばれるのは映像と音声ストリームだけです。C.mkv の字幕ストリームは画像ベースで、Matroska muxer の既定の字幕 encoder はテキストベースのため、字幕のトランスコードは失敗すると見込まれ、したがってこのストリームは選ばれません。一方 out2.mkv では、コマンドで字幕 encoder が指定されているため、映像ストリームに加えて字幕ストリームも選ばれます。-an があるため、out2.mkv では音声ストリームの選択が無効になります。

例: ラベルのない filtergraph 出力

ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt

ここでは -filter_complex オプションで filtergraph を設定しており、1 つの映像フィルタからなります。overlay フィルタはちょうど 2 つの映像入力を必要としますが、何も指定されていないため、最初に利用可能な 2 つの映像ストリーム、つまり A.avi と C.mkv のものが使われます。フィルタの出力パッドにはラベルがないため、1 番目の出力ファイル out1.mp4 へ送られます。これにより映像ストリームの自動選択がスキップされ、本来選ばれたであろう B.mp4 のストリームは選ばれません。音声については、最もチャンネル数の多いストリーム、すなわち B.mp4 の stream 3 が自動的に選ばれます。字幕は選ばれません。MP4 フォーマットには既定の字幕 encoder が登録されておらず、ユーザーも字幕 encoder を指定していないためです。

2 番目の出力ファイル out2.srt はテキストベースの字幕ストリームしか受け入れません。そのため、最初に利用可能な字幕ストリームは C.mkv のものですが、これは画像ベースなのでスキップされます。選ばれるのは最初のテキストベース字幕ストリームである B.mp4 の stream 2 です。

例: ラベル付きの filtergraph 出力

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
       -map '[outv]' -an        out1.mp4 \
                                out2.mkv \
       -map '[outv]' -map 1:a:0 out3.mkv

上のコマンドは失敗します。[outv] というラベルの付いた出力パッドが 2 回マップされているためです。どの出力ファイルも処理されません。

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
       -an        out1.mp4 \
                  out2.mkv \
       -map 1:a:0 out3.mkv

上のこのコマンドも失敗します。hue フィルタの出力に [outv] というラベルが付いているのに、どこにもマップされていないためです。

コマンドは次のように修正すべきです。

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \
        -map '[outv1]' -an        out1.mp4 \
                                  out2.mkv \
        -map '[outv2]' -map 1:a:0 out3.mkv

B.mp4 の映像ストリームが hue フィルタへ送られ、その出力が split フィルタで 1 回複製されて両方にラベルが付きます。そして各コピーが 1 番目と 3 番目の出力ファイルにマップされます。

overlay フィルタは映像入力を 2 つ必要とし、まだ使われていない最初の 2 つの映像ストリームを使います。それは A.avi と C.mkv のストリームです。overlay の出力にはラベルがないため、-map オプションの有無にかかわらず 1 番目の出力ファイル out1.mp4 へ送られます。

aresample フィルタには、まだ使われていない最初の音声ストリーム、すなわち A.avi のものが送られます。このフィルタの出力もラベルなしのため、これも 1 番目の出力ファイルにマップされます。-an は音声ストリームの自動または手動選択を抑制するだけで、filtergraph から送られる出力は抑制しません。これらマップされた 2 つのストリームは、out1.mp4 内でマップされたストリームより前に並べられます。

out2.mkv にマップされる映像・音声・字幕ストリームは、すべて自動ストリーム選択によって決まります。

out3.mkv は、hue フィルタからの複製された映像出力と、B.mp4 の最初の音声ストリームで構成されます。

5 オプション

数値を取るオプションはすべて、特に断りがなければ、数を表す文字列を入力として受け付けます。これには SI 接頭辞(たとえば「K」「M」「G」)を続けられます。

SI 接頭辞に「i」を付けると、その接頭辞全体が 1000 の累乗ではなく 1024 の累乗に基づく 2 進倍数の単位接頭辞として解釈されます。SI 接頭辞に「B」を付けると値が 8 倍されます。これにより、たとえば「KB」「MiB」「G」「B」のような数値の接尾辞が使えます。

引数を取らないオプションはブール値オプションで、対応する値を true に設定します。オプション名に "no" を前置すると false に設定できます。たとえば "-nofoo" は "foo" という名前のブールオプションを false に設定します。

引数を取るオプションは特別な構文をサポートしており、コマンドラインで与えた引数を、実際の引数値を読み込むファイルのパスとして解釈させられます。この機能を使うには、オプション名の直前(先頭のダッシュの後)にスラッシュ「/」を付けます。たとえば

ffmpeg -i INPUT -/filter:v filter.script OUTPUT

は filter.script というファイルから filtergraph の記述を読み込みます。

5.1 ストリーム指定子

一部のオプション(ビットレートやコーデックなど)はストリームごとに適用されます。ストリーム指定子は、あるオプションがどのストリームに属するかを正確に指定するために使います。

ストリーム指定子は一般にオプション名の後にコロンで区切って付ける文字列です。たとえば -codec:a:1 ac3 には a:1 というストリーム指定子が含まれ、これは 2 番目の音声ストリームにマッチします。したがって、2 番目の音声ストリームに ac3 コーデックを選択することになります。

ストリーム指定子は複数のストリームにマッチでき、その場合オプションはそのすべてに適用されます。たとえば -b:a 128k のストリーム指定子はすべての音声ストリームにマッチします。

空のストリーム指定子はすべてのストリームにマッチします。たとえば -codec copy-codec: copy は、すべてのストリームを再エンコードせずにコピーします。

ストリーム指定子の取りうる形式は次のとおりです。

stream_index

このインデックスのストリームにマッチします。たとえば -threads:1 4 は 2 番目のストリームのスレッド数を 4 に設定します。stream_index を追加のストリーム指定子(後述)として使う場合は、マッチしたストリームの中から番号 stream_index のストリームを選びます。ストリームの番号付けは libavformat が検出した順序に基づきます。ただしストリームグループ指定子やプログラム ID も指定した場合は例外で、その場合はグループまたはプログラム内のストリームの順序に基づきます。

stream_type[:additional_stream_specifier]

stream_type は次のいずれかです。映像は「v」または「V」、音声は「a」、字幕は「s」、データは「d」、添付ファイルは「t」です。「v」はすべての映像ストリームにマッチし、「V」は添付画像・映像サムネイル・カバーアートではない映像ストリームにのみマッチします。additional_stream_specifier を使う場合、この種類であり、かつ additional_stream_specifier にもマッチするストリームにマッチします。使わない場合は、指定した種類のすべてのストリームにマッチします。

g:group_specifier[:additional_stream_specifier]

指定子 group_specifier のグループに属するストリームにマッチします。additional_stream_specifier を使う場合、そのグループに属し、かつ additional_stream_specifier にもマッチするストリームにマッチします。group_specifier は次のいずれかです。

group_index

このグループインデックスのストリームにマッチします。

#group_id または i:group_id

このグループ ID のストリームにマッチします。

p:program_id[:additional_stream_specifier]

ID が program_id のプログラムに属するストリームにマッチします。additional_stream_specifier を使う場合、そのプログラムに属し、かつ additional_stream_specifier にもマッチするストリームにマッチします。

#stream_id または i:stream_id

ストリーム ID(たとえば MPEG-TS コンテナの PID)でストリームにマッチします。

m:key[:value]

メタデータタグ key が指定の value を持つストリームにマッチします。value を与えない場合、そのタグを何らかの値で含むストリームにマッチします。key や value 中のコロン「:」はバックスラッシュでエスケープする必要があります。

disp:dispositions[:additional_stream_specifier]

指定の disposition を持つストリームにマッチします。dispositions は、1 つ以上の disposition(-dispositions オプションで表示されるもの)を「+」でつないだリストです。

u

使える構成を持つストリームにマッチします。すなわち、コーデックが定義され、映像の寸法や音声のサンプリングレートなど不可欠な情報が揃っているストリームです。

ffmpeg では、メタデータによるマッチは入力ファイルでのみ正しく機能する点に注意してください。

5.2 共通オプション

これらのオプションは ff* ツール群で共通です。

-L, -license

ライセンスを表示します。

-h, -?, -help, --help [arg]

ヘルプを表示します。特定の項目についてのヘルプを表示するため、省略可能なパラメータを指定できます。引数を指定しない場合は、基本的な(非アドバンスドの)ツールオプションのみが表示されます。

arg の取りうる値は次のとおりです。

long

基本的なツールオプションに加えて、アドバンスドなツールオプションも表示します。

full

encoder、decoder、demuxer、muxer、フィルタなどの共通オプション・プライベートオプションを含む、オプションの完全な一覧を表示します。

decoder=decoder_name

decoder_name という名前の decoder の詳細情報を表示します。すべての decoder の一覧を得るには -decoders オプションを使います。

encoder=encoder_name

encoder_name という名前の encoder の詳細情報を表示します。すべての encoder の一覧を得るには -encoders オプションを使います。

demuxer=demuxer_name

demuxer_name という名前の demuxer の詳細情報を表示します。すべての demuxer と muxer の一覧を得るには -formats オプションを使います。

muxer=muxer_name

muxer_name という名前の muxer の詳細情報を表示します。すべての muxer と demuxer の一覧を得るには -formats オプションを使います。

filter=filter_name

filter_name という名前のフィルタの詳細情報を表示します。すべてのフィルタの一覧を得るには -filters オプションを使います。

bsf=bitstream_filter_name

bitstream_filter_name という名前の bitstream filter の詳細情報を表示します。すべての bitstream filter の一覧を得るには -bsfs オプションを使います。

protocol=protocol_name

protocol_name という名前のプロトコルの詳細情報を表示します。すべてのプロトコルの一覧を得るには -protocols オプションを使います。

-version

バージョンを表示します。

-buildconf

ビルド構成を 1 行に 1 オプションずつ表示します。

-formats

利用できるフォーマット(デバイスを含む)を表示します。

-demuxers

利用できる demuxer を表示します。

-muxers

利用できる muxer を表示します。

-devices

利用できるデバイスを表示します。

-codecs

libavcodec が認識するすべてのコーデックを表示します。

このドキュメント全体で「codec」という語は、より正確には「メディアの bitstream フォーマット」と呼ぶべきものの略として使っている点に注意してください。

-decoders

利用できる decoder を表示します。

-encoders

利用できるすべての encoder を表示します。

-bsfs

利用できる bitstream filter を表示します。

-protocols

利用できるプロトコルを表示します。

-filters

利用できる libavfilter のフィルタを表示します。

-pix_fmts

利用できる pixel format を表示します。

-sample_fmts

利用できる sample format を表示します。

-layouts

チャンネル名と標準のチャンネルレイアウトを表示します。

-dispositions

ストリームの disposition を表示します。

-colors

認識される色名を表示します。

-sources device[,opt1=val1[,opt2=val2]...]

入力デバイスの自動検出されたソースを表示します。デバイスによっては、自動検出できないシステム依存のソース名を提供する場合があります。返される一覧が常に完全とは限りません。

ffmpeg -sources pulse,server=192.168.0.4

-sinks device[,opt1=val1[,opt2=val2]...]

出力デバイスの自動検出されたシンクを表示します。デバイスによっては、自動検出できないシステム依存のシンク名を提供する場合があります。返される一覧が常に完全とは限りません。

ffmpeg -sinks pulse,server=192.168.0.4

-loglevel [flags+]loglevel | -v [flags+]loglevel

ライブラリが使うログレベルとフラグを設定します。

省略可能な flags 接頭辞は次の値からなります。

‘repeat’

繰り返されるログ出力を 1 行目にまとめず、「Last message repeated n times」という行も省略することを示します。

‘level’

各メッセージ行に [level] 接頭辞を付けることを示します。ログ色付けの代わりに、たとえばログをファイルへダンプするときに使えます。

‘time’

ログ行の先頭に時刻情報を付けることを示します。

‘datetime’

ログ行の先頭に日付と時刻の情報を付けることを示します。

フラグは「+」/「-」接頭辞を付けて単独でも使え、他のフラグや loglevel に影響せず、1 つのフラグだけを設定/解除できます。フラグと loglevel の両方を設定する場合は、最後のフラグ値と loglevel の間に「+」区切りが必要です。

loglevel は次のいずれかの値を含む文字列または数値です。

‘quiet, -8’

何も表示せず、沈黙します。

‘panic, 0’

アサーション失敗のような、プロセスのクラッシュにつながりうる致命的エラーのみを表示します。現状ではどこにも使われていません。

‘fatal, 8’

致命的エラーのみを表示します。これは、それ以降プロセスが絶対に続行できないエラーです。

‘error, 16’

回復可能なものも含め、すべてのエラーを表示します。

‘warning, 24’

すべての警告とエラーを表示します。誤りや想定外の事象の可能性に関するメッセージはすべて表示されます。

‘info, 32’

処理中の情報メッセージを表示します。これは警告・エラーに加えてのものです。これが既定値です。

‘verbose, 40’

info と同じですが、より詳細です。

‘debug, 48’

デバッグ情報を含め、すべてを表示します。

‘trace, 56’

たとえば繰り返しログ出力を有効にし、level 接頭辞を付け、loglevel を verbose に設定するには次のようにします。

ffmpeg -loglevel repeat+level+verbose -i input output

level 接頭辞フラグや loglevel の現在の状態に影響を与えず、繰り返しログ出力を有効にする別の例です。

ffmpeg [...] -loglevel +repeat

既定では、プログラムは stderr へログを出力します。端末が色付けに対応していれば、エラーと警告は色で示されます。ログの色付けは、環境変数 AV_LOG_FORCE_NOCOLOR を設定すると無効化でき、環境変数 AV_LOG_FORCE_COLOR を設定すると強制できます。

-report

完全なコマンドラインとログ出力を、カレントディレクトリの program-YYYYMMDD-HHMMSS.log という名前のファイルへダンプします。このファイルはバグ報告に役立ちます。また -loglevel debug も暗黙的に有効になります。

環境変数 FFREPORT に任意の値を設定しても同じ効果があります。値が「:」区切りの key=value 列であれば、これらのオプションがレポートに影響します。オプション値が特殊文字やオプション区切りの「:」を含む場合はエスケープが必要です(ffmpeg-utils マニュアルの「Quoting and escaping」の節を参照)。

認識されるオプションは次のとおりです。

file

レポートに使うファイル名を設定します。%p はプログラム名に、%t はタイムスタンプに、%% はそのままの % に展開されます。

level

ログの詳細レベルを数値で設定します(-loglevel を参照)。

たとえば、ログレベル 32(ログレベル info のエイリアス)でレポートを ffreport.log というファイルへ出力するには次のようにします。

FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output

環境変数の解析エラーは致命的ではなく、レポートにも現れません。

-hide_banner

バナーの表示を抑制します。

FFmpeg のツールはすべて、通常は著作権表示・ビルドオプション・ライブラリのバージョンを表示します。このオプションでその表示を抑制できます。

-cpuflags flags (global)

cpu フラグの設定・解除を可能にします。このオプションはテスト用です。何をしているか分かっていない限り使わないでください。

ffmpeg -cpuflags -sse+mmx ...
ffmpeg -cpuflags mmx ...
ffmpeg -cpuflags 0 ...

このオプションで指定できるフラグは次のとおりです。

‘x86’

‘mmx’ ‘mmxext’ ‘sse’ ‘sse2’ ‘sse2slow’ ‘sse3’ ‘sse3slow’ ‘ssse3’ ‘atom’ ‘sse4.1’ ‘sse4.2’ ‘avx’ ‘avx2’ ‘xop’ ‘fma3’ ‘fma4’ ‘3dnow’ ‘3dnowext’ ‘bmi1’ ‘bmi2’ ‘cmov’ ‘ARM’

‘armv5te’ ‘armv6’ ‘armv6t2’ ‘vfp’ ‘vfpv3’ ‘neon’ ‘setend’ ‘AArch64’

‘armv8’ ‘vfp’ ‘neon’ ‘PowerPC’

‘altivec’ ‘Specific Processors’

‘pentium2’ ‘pentium3’ ‘pentium4’ ‘k6’ ‘k62’ ‘athlon’ ‘athlonxp’ ‘k8’ -cpucount count (global)

CPU 数の検出を上書きします。このオプションはテスト用です。何をしているか分かっていない限り使わないでください。

ffmpeg -cpucount 2

-max_alloc bytes

ffmpeg の malloc 系関数がヒープ上に確保するブロックの最大サイズ上限を設定します。このオプションを使うときは 細心の注意 を払ってください。そうすることの全結果を理解していないなら使わないでください。既定は INT_MAX です。

5.3 AVOptions

これらのオプションは libavformat、libavdevice、libavcodec の各ライブラリが直接提供します。利用できる AVOptions の一覧を見るには -help オプションを使います。これらは 2 つのカテゴリに分かれます。

generic

任意のコンテナ・コーデック・デバイスに設定できます。generic オプションは、コンテナ/デバイスについては AVFormatContext のオプションとして、コーデックについては AVCodecContext のオプションとして列挙されています。

private

特定のコンテナ・デバイス・コーデックに固有のものです。private オプションは、対応するコンテナ/デバイス/コーデックの下に列挙されています。

たとえば、MP3 ファイルに既定の ID3v2.4 ではなく ID3v2.3 ヘッダを書き込むには、MP3 muxer の id3v2_version private オプションを使います。

ffmpeg -i input.flac -id3v2_version 3 out.mp3

すべてのコーデック AVOptions はストリームごとに適用されるため、ストリーム指定子を付ける必要があります。

ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k -ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4

上の例では、マルチチャンネル音声ストリームを出力に 2 回マップしています。1 つ目はコーデック ac3、ビットレート 640k でエンコードされます。2 つ目は 2 チャンネルにダウンミックスされ、コーデック aac でエンコードされます。後者にはビットレート 128k を、出力ストリームの絶対インデックスを使って指定しています。

注意: ブール値の AVOptions には -nooption 構文は使えません。-option 0/-option 1 を使ってください。

注意: オプション名に v/a/s を前置してストリームごとの AVOptions を指定する旧来の非公式な方法は、現在は廃止予定で、まもなく削除されます。

5.4 主なオプション

-f fmt (input/output)

入力または出力ファイルのフォーマットを強制します。フォーマットは通常、入力ファイルでは自動検出され、出力ファイルではファイル拡張子から推測されるため、たいていの場合このオプションは不要です。

-i url (input)

入力ファイルの URL です。

-y (global)

確認せずに出力ファイルを上書きします。

-n (global)

出力ファイルを上書きせず、指定した出力ファイルがすでに存在する場合は直ちに終了します。

-stream_loop number (input)

入力ストリームをループする回数を設定します。ループ 0 はループなし、ループ -1 は無限ループを意味します。

-recast_media (global)

demuxer が検出・指定したものと異なるメディア種類の decoder を強制できるようにします。データストリームとして mux されたメディアデータをデコードするのに便利です。

-c[:stream_specifier] codec (input/output,per-stream) -codec[:stream_specifier] codec (input/output,per-stream)

1 つ以上のストリームに対し、encoder(出力ファイルの前で使う場合)または decoder(入力ファイルの前で使う場合)を選択します。codec は decoder/encoder の名前か、特別な値 copy(出力専用)です。copy はそのストリームを再エンコードしないことを示します。

たとえば

ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT

はすべての映像ストリームを libx264 でエンコードし、すべての音声ストリームをコピーします。

各ストリームには、最後にマッチした c オプションが適用されます。したがって

ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT

は、2 番目の映像(libx264 でエンコード)と 138 番目の音声(libvorbis でエンコード)を除き、すべてのストリームをコピーします。

-t duration (input/output)

入力オプションとして(-i の前で)使う場合、入力ファイルから読み込むデータの長さを制限します。

出力オプションとして(出力 URL の前で)使う場合、出力の長さが duration に達したら書き込みを停止します。

duration は時間長の指定でなければなりません。(ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual を参照してください。

-to と -t は排他で、-t が優先されます。

-to position (input/output)

position で出力の書き込みまたは入力の読み込みを停止します。position は時間長の指定でなければなりません。(ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual を参照してください。

-to と -t は排他で、-t が優先されます。

-fs limit_size (output)

ファイルサイズ上限をバイト単位で設定します。上限を超えると、それ以上のバイトの塊は書き込まれません。出力ファイルのサイズは、要求したファイルサイズよりわずかに大きくなります。

-ss position (input/output)

入力オプションとして(-i の前で)使う場合、この入力ファイルを position までシークします。多くのフォーマットでは正確なシークができないため、ffmpeg は position の手前で最も近いシークポイントへシークします。トランスコード時に -accurate_seek が有効(既定)であれば、シークポイントと position の間の余分な区間はデコードされて破棄されます。ストリームコピー時、または -noaccurate_seek 使用時は、その区間は保持されます。

出力オプションとして(出力 URL の前で)使う場合、タイムスタンプが position に達するまで入力をデコードしますが破棄します。

position は時間長の指定でなければなりません。(ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual を参照してください。

-sseof position (input)

-ss オプションと同様ですが、「ファイル末尾」を基準とします。つまり負の値はファイルのより前を、0 は EOF を指します。

-isync input_index (input)

ある入力を同期ソースとして割り当てます。

これは対象入力と参照入力の開始時刻の差を取り、その差で対象ファイルのタイムスタンプをオフセットします。期待どおりの結果を得るには、2 つの入力のソースタイムスタンプが同じクロックソースから得られている必要があります。copyts が設定されている場合は start_at_zero も設定しなければなりません。どちらかの入力に開始タイムスタンプがなければ、同期調整は行われません。

指定できる値は、有効な ffmpeg 入力インデックスを参照するものです。同期参照が対象インデックス自身または -1 の場合、対象のタイムスタンプは調整されません。同期参照自体が他の入力に同期されていてはなりません。

既定値は -1 です。

-itsoffset offset (input)

入力の時刻オフセットを設定します。

offset は時間長の指定でなければなりません。(ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual を参照してください。

このオフセットは入力ファイルのタイムスタンプに加算されます。正のオフセットを指定すると、対応するストリームは offset で指定した時間だけ遅延します。

-itsscale scale (input,per-stream)

入力タイムスタンプをリスケールします。scale は浮動小数点数です。

-timestamp date (output)

コンテナに記録するタイムスタンプを設定します。

date は日付の指定でなければなりません。(ffmpeg-utils)the Date section in the ffmpeg-utils(1) manual を参照してください。

-metadata[:metadata_specifier] key=value (output,per-metadata)

メタデータのキー/値のペアを設定します。

省略可能な metadata_specifier を与えると、ストリーム・チャプター・プログラムにメタデータを設定できます。詳細は -map_metadata のドキュメントを参照してください。

このオプションは -map_metadata で設定したメタデータを上書きします。値を空にすればメタデータを削除することもできます。

たとえば、出力ファイルのタイトルを設定するには次のようにします。

ffmpeg -i in.avi -metadata title="my title" out.flv

最初の音声ストリームの言語を設定するには次のようにします。

ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT

-disposition[:stream_specifier] value (output,per-stream)

ストリームの disposition フラグを設定します。

既定値: 既定では、disposition フラグはすべて入力ストリームからコピーされます。ただし、このオプションが適用される出力ストリームが complex filtergraph から供給される場合は、既定では disposition フラグは設定されません。

value は「+」または「-」で区切った disposition フラグの並びです。「+」接頭辞は指定の disposition を追加し、「-」は削除します。最初のフラグにも「+」または「-」が前置されている場合、結果の disposition は既定値を value で更新したものになります。最初のフラグに接頭辞がない場合、結果の disposition は value そのものになります。0 に設定して disposition をクリアすることもできます。

出力ファイルに -disposition オプションが 1 つも指定されていない場合、ffmpeg は自動的に各種類の最初のストリームに「default」disposition フラグを設定します。これは、その種類のストリームが出力ファイルに複数あり、かつその種類のストリームでまだ default 指定されているものがない場合です。

-dispositions オプションで既知の disposition フラグを一覧できます。

たとえば、2 番目の音声ストリームを既定ストリームにするには次のようにします。

ffmpeg -i in.mkv -c copy -disposition:a:1 default out.mkv

2 番目の字幕ストリームを既定ストリームにし、1 番目の字幕ストリームから default disposition を取り除くには次のようにします。

ffmpeg -i in.mkv -c copy -disposition:s:0 0 -disposition:s:1 default out.mkv

埋め込みのカバー/サムネイルを追加するには次のようにします。

ffmpeg -i in.mp4 -i IMAGE -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4

1 番目の音声ストリームの他の disposition フラグを残したまま、「original」を追加し「comment」disposition フラグを取り除くには次のようにします。

ffmpeg -i in.mkv -c copy -disposition:a:0 +original-comment out.mkv

1 番目の音声ストリームの他の disposition フラグを残したまま、「original」を取り除き「comment」disposition フラグを追加するには次のようにします。

ffmpeg -i in.mkv -c copy -disposition:a:0 -original+comment out.mkv

1 番目の音声ストリームに「original」と「comment」disposition フラグだけを設定する(そして他の disposition フラグを取り除く)には次のようにします。

ffmpeg -i in.mkv -c copy -disposition:a:0 original+comment out.mkv

1 番目の音声ストリームからすべての disposition フラグを取り除くには次のようにします。

ffmpeg -i in.mkv -c copy -disposition:a:0 0 out.mkv

すべての muxer が埋め込みサムネイルに対応しているわけではなく、対応していても JPEG や PNG など一部のフォーマットしか扱えません。

-program [title=title:][program_num=program_num:]st=stream[:st=stream...] (output)

指定の title、program_num でプログラムを作り、指定のストリームをそれに追加します。

-stream_group [map=input_file_id=stream_group][type=type:]st=stream[:st=stream][:stg=stream_group][:id=stream_group_id...] (output)

指定の type と stream_group_id のストリームグループを作るか、入力グループをマップして作り、指定のストリームや既に定義済みの stream_group をそれに追加します。

type は次のいずれかです。

iamf_audio_element

同じ IAMF Audio Element に属するストリームをグループ化します。

このグループ種類では次のオプションが利用できます。

audio_element_type

Audio Element の種類です。次の値がサポートされます。

channel

スケーラブルなチャンネル音声表現です。

scene

アンビソニックス表現です。

demixing

スケーラブルなチャンネル音声表現を再構築するために使うデミキシング情報です。このオプションは残りと「,」で区切る必要があり、次の key=value オプションを取ります。

parameter_id

フレーム内のパラメータブロックが参照しうる識別子です。

dmixp_mode

あらかじめ定義されたデミキシングパラメータの組み合わせです。

recon_gain

スケーラブルなチャンネル音声表現を再構築するために使う Recon gain 情報です。このオプションは残りと「,」で区切る必要があり、次の key=value オプションを取ります。

parameter_id

フレーム内のパラメータブロックが参照しうる識別子です。

layer

Audio Element 内のチャンネルレイアウトを定義するレイヤーです。このオプションは残りと「,」で区切る必要があります。「,」区切りのエントリを複数定義でき、少なくとも 1 つは設定しなければなりません。

次の「:」区切りの key=value オプションを取ります。

ch_layout

このレイヤーのチャンネルレイアウトです。

flags

次のフラグが利用できます。

recon_gain

recon_gain がフレーム内のパラメータブロックにメタデータとして存在するかを通知するかどうかです。

output_gain output_gain_flags

output_gain がどのチャンネルに適用されるかです。次のフラグが利用できます。

FL FR BL BR TFL TFR ambisonics_mode

アンビソニックスのモードです。audio_element_type が channel に設定されている場合は効果がありません。

次の値がサポートされます。

mono

各アンビソニックスチャンネルが、グループ内の個別のモノストリームとして符号化されます。

default_w

既定の重み値です。

iamf_mix_presentation

同じ IAMF Mix Presentation が参照するすべての IAMF Audio Element に属するストリームをグループ化します。

このグループ種類では次のオプションが利用できます。

submix

Mix Presentation 内のサブミックスです。このオプションは残りと「,」で区切る必要があります。「,」区切りのエントリを複数定義でき、少なくとも 1 つは設定しなければなりません。

次の「:」区切りの key=value オプションを取ります。

parameter_id

フレーム内のパラメータブロックが参照しうる識別子で、ミックスした音声信号を後処理して再生用の音声信号を生成するために使います。

parameter_rate

この parameter_id を参照するフレーム内のパラメータブロックにおいて、サンプルレートと duration のフィールドがどのレートで表されるかです。

default_mix_gain

あるフレームで同じ parameter_id を共有するパラメータブロックがない場合に適用する、既定のミックスゲイン値です。

element

この Mix Presentation 内で、再生用の最終出力音声信号を生成するために使う Audio Element を参照します。このオプションは残りと「|」で区切る必要があります。「|」区切りのエントリを複数定義でき、少なくとも 1 つは設定しなければなりません。

次の「:」区切りの key=value オプションを取ります。

stg

このサブミックスが参照する Audio Element の stream_group_id です。

parameter_id

フレーム内のパラメータブロックが参照しうる識別子で、参照・レンダリングされた Audio Element を、他の処理済み Audio Element と合算する前に処理するために使います。

parameter_rate

この parameter_id を参照するフレーム内のパラメータブロックにおいて、サンプルレートと duration のフィールドがどのレートで表されるかです。

default_mix_gain

あるフレームで同じ parameter_id を共有するパラメータブロックがない場合に適用する、既定のミックスゲイン値です。

annotations

サブミックスのエレメントを表す key=value 文字列です。「key」は「value」文字列の言語を指定する BCP-47 準拠の文字列です。「key」はそのミックスの annotations にあるものと同じでなければなりません。

headphones_rendering_mode

入力のチャンネルベース Audio Element を、ヘッドフォン再生時にステレオスピーカーへレンダリングするか、バイノーラルレンダラで空間化するかを示します。参照する Audio Element の audio_element_type が channel に設定されている場合は効果がありません。

次の値がサポートされます。

stereo binaural layout

このサブミックスについて、ラウドネス情報が測定されたレイアウトを指定します。このオプションは残りと「|」で区切る必要があります。「|」区切りのエントリを複数定義でき、少なくとも 1 つは設定しなければなりません。

次の「:」区切りの key=value オプションを取ります。

layout_type

loudspeakers

レイアウトは ITU-2051-3 のラウドスピーカー音響システムの規約に従います。

binaural

レイアウトはバイノーラルです。

sound_system

ITU-2051-3 の Sound System A〜J のいずれか、および 7.1.2 と 3.1.2 に一致するチャンネルレイアウトです。layout_type が binaural に設定されている場合は効果がありません。

integrated_loudness

ITU-1770-4 で定義される、番組の統合ラウドネス情報です。

digital_peak

ITU-1770-4 で定義される、音声信号のデジタル(サンプリングされた)ピーク値です。

true_peak

ITU-1770-4 で定義される、音声信号の真のピーク値です。

dialog_anchored_loudness

ITU-1770-4 で定義される、ダイアログラウドネス情報です。

album_anchored_loudness

ITU-1770-4 で定義される、アルバムラウドネス情報です。

annotations

ミックスを表す key=value 文字列です。「key」は「value」文字列の言語を指定する BCP-47 準拠の文字列です。「key」はすべてのサブミックスエレメントの annotations にあるものと同じでなければなりません。

たとえば、複数の WAV 入力ファイルからスケーラブルな 5.1 IAMF ファイルを作るには次のようにします。

ffmpeg -i front.wav -i back.wav -i center.wav -i lfe.wav
-map 0:0 -map 1:0 -map 2:0 -map 3:0 -c:a opus
-stream_group type=iamf_audio_element:id=1:st=0:st=1:st=2:st=3,
demixing=parameter_id=998,
recon_gain=parameter_id=101,
layer=ch_layout=stereo,
layer=ch_layout=5.1(side),
-stream_group type=iamf_mix_presentation:id=2:stg=0:annotations=en-us=Mix_Presentation,
submix=parameter_id=100:parameter_rate=48000|element=stg=0:parameter_id=100:annotations=en-us=Scalable_Submix|layout=sound_system=stereo|layout=sound_system=5.1(side)
-streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.iamf

4 つのストリームを持つ入力 IAMF ファイルから 2 つのストリームグループ(Audio Element と Mix Presentation)を mp4 出力にコピーするには次のようにします。

ffmpeg -i input.iamf -c:a copy -stream_group map=0=0:st=0:st=1:st=2:st=3 -stream_group map=0=1:stg=0
-streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.mp4

-target type (output)

ターゲットファイル種類(vcdsvcddvddvdv50)を指定します。type には pal-ntsc-film- を前置して、対応する規格を使えます。これにより、すべてのフォーマットオプション(ビットレート・コーデック・バッファサイズ)が自動的に設定されます。次のように入力するだけです。

ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

とはいえ、規格と衝突しないと分かっている範囲で、次のように追加のオプションを指定できます。

ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg

各ターゲットに設定されるパラメータは次のとおりです。

VCD

pal:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x288 -r 25
-codec:v mpeg1video -g 15 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k

ntsc:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x240 -r 30000/1001
-codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k

film:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x240 -r 24000/1001
-codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k

SVCD

pal:
-f svcd -packetsize 2324
-s 480x576 -pix_fmt yuv420p -r 25
-codec:v mpeg2video -g 15 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k

ntsc:
-f svcd -packetsize 2324
-s 480x480 -pix_fmt yuv420p -r 30000/1001
-codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k

film:
-f svcd -packetsize 2324
-s 480x480 -pix_fmt yuv420p -r 24000/1001
-codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k

DVD

pal:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x576 -pix_fmt yuv420p -r 25
-codec:v mpeg2video -g 15 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k

ntsc:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x480 -pix_fmt yuv420p -r 30000/1001
-codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k

film:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x480 -pix_fmt yuv420p -r 24000/1001
-codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k

DV

pal:
-f dv
-s 720x576 -pix_fmt yuv420p -r 25
-ar 48000 -ac 2

ntsc:
-f dv
-s 720x480 -pix_fmt yuv411p -r 30000/1001
-ar 48000 -ac 2

film:
-f dv
-s 720x480 -pix_fmt yuv411p -r 24000/1001
-ar 48000 -ac 2

dv50 ターゲットは dv ターゲットと同一ですが、pixel format が 3 つの規格すべてで yuv422p に設定される点だけが異なります。

上記のパラメータをユーザーが設定すると、その値がターゲットのプリセット値を上書きします。その場合、出力はターゲット規格に準拠しなくなる可能性があります。

-dn (input/output)

入力オプションとして使う場合、ファイルのすべてのデータストリームについて、フィルタリングや、どの出力への自動選択・マッピングも禁止します。個別にストリームを無効化するには -discard オプションを参照してください。

出力オプションとして使う場合、データの記録、すなわちどのデータストリームの自動選択・マッピングも無効にします。完全に手動で制御するには -map オプションを参照してください。

-dframes number (output)

出力するデータフレーム数を設定します。これは -frames:d の旧式なエイリアスです。代わりに -frames:d を使ってください。

-frames[:stream_specifier] framecount (output,per-stream)

framecount フレームを書き込んだ後、そのストリームへの書き込みを停止します。

-q[:stream_specifier] q (output,per-stream) -qscale[:stream_specifier] q (output,per-stream)

固定の品質スケール(VBR)を使います。q/qscale の意味はコーデック依存です。qscale を stream_specifier なしで使うと映像ストリームにのみ適用されます。これは従来の挙動との互換のためであり、また stream_specifier なしのとき、コーデック固有の同じ値を音声・映像という 2 つの異なるコーデックに指定するのは、ふつう意図したことではないためです。

-filter[:stream_specifier] filtergraph (output,per-stream)

filtergraph で指定した filtergraph を作り、それを使ってストリームにフィルタをかけます。

filtergraph はストリームに適用する filtergraph の記述で、ストリームと同じ種類の入力と出力を 1 つずつ持つ必要があります。filtergraph 内で、入力にはラベル in、出力にはラベル out が結び付きます。filtergraph の構文については ffmpeg-filters マニュアルを参照してください。

複数の入力や出力を持つ filtergraph を作りたい場合は -filter_complex オプションを参照してください。

-reinit_filter[:stream_specifier] integer (input,per-stream)

このブール値オプションは、入力フレームのパラメータがストリームの途中で変わったとき、このストリームを供給先とする filtergraph を再初期化するかどうかを決めます。ほとんどの映像フィルタとすべての音声フィルタは入力フレームのプロパティの変化を扱えないため、既定で有効です。再初期化すると、たとえば一部のフィルタで利用できるフレームカウント n の参照など、既存のフィルタ状態が失われます。再初期化時にバッファされているフレームも失われます。再初期化を引き起こす変化は、映像ではフレーム解像度または pixel format、音声では sample format・サンプリングレート・チャンネル数・チャンネルレイアウトです。

-drop_changed[:stream_specifier] integer (input,per-stream)

このブール値オプションは、ストリームの途中でフレームパラメータが異なるフレームを、filtergraph の再初期化につなげる代わりに破棄するかどうかを決めます。再初期化はフィルタ状態の損失を招くためです。一般に、ライブ配信入力で壊れているがデコードはできるパケットを避けるのに便利です。既定は false です。

-filter_threads nb_threads (global)

フィルタパイプラインの処理に使うスレッド数を定義します。各パイプラインは、並列処理のためにこの数のスレッドを使えるスレッドプールを作ります。既定は利用可能な CPU の数です。

-filter_buffered_frames nb_frames (global)

filtergraph 内でバッファできるフレームの最大数を定義します。通常の状況では、filtergraph は数フレーム以上をバッファすべきではありません。とくに、フレームがバランスよく供給・読み出しされる(これが ffmpeg で意図された挙動です)場合はそうです。とはいえこのオプションで、filtergraph 内の全リンクにわたってバッファされるフレームの総数を制限できます。これより多くのフレームが生成されると、フィルタリングは中断されエラーが返されます。既定値は 0 で、制限なしを意味します。

-pre[:stream_specifier] preset_name (output,per-stream)

マッチするストリームのプリセットを指定します。

-stats (global)

エンコードの進捗・統計を "info" レベルのログとして出力します(-loglevel を参照)。既定で有効です。明示的に無効にするには -nostats を指定する必要があります。

-stats_period time (global)

エンコードの進捗・統計を更新する周期を設定します。既定は 0.5 秒です。

-print_graphs (global)

実行グラフの詳細を、-print_graphs_format で設定した形式で stderr に表示します。

-print_graphs_file filename (global)

実行グラフの詳細を、-print_graphs_format で設定した形式で指定のファイルに書き込みます。

-print_graphs_format format (global)

出力形式を設定します(利用できる形式は default, compact, csv, flat, ini, json, xml, mermaid, mermaidhtml)。既定の形式は json です。

-progress url (global)

プログラムが扱いやすい進捗情報を url へ送ります。

進捗情報は定期的に、またエンコード処理の終了時に書き出されます。「key=value」の行からなります。key は英数字のみで構成されます。一連の進捗情報の最後の key は常に「progress」で、値は「continue」または「end」になります。

更新周期は -stats_period で設定します。

たとえば、進捗情報を標準出力に出力するには次のようにします。

ffmpeg -progress pipe:1 -i in.mkv out.mkv

-stdin

標準入力での対話を有効にします。標準入力が入力として使われていない限り既定で有効です。明示的に対話を無効にするには -nostdin を指定する必要があります。

標準入力での対話を無効にするのは、たとえば ffmpeg がバックグラウンドのプロセスグループにある場合に便利です。ffmpeg ... < /dev/null でもほぼ同じ結果が得られますが、それにはシェルが必要です。

-debug_ts (global)

タイムスタンプ/レイテンシ情報を表示します。既定では無効です。このオプションは主にテスト・デバッグ用で、出力形式はバージョンによって変わる可能性があるため、可搬性が求められるスクリプトでは使うべきではありません。

-fdebug ts オプションも参照してください。

-attach filename (output)

出力ファイルに添付ファイルを追加します。これは Matroska など一部のフォーマットで、たとえば字幕レンダリングに使うフォントのためにサポートされています。添付ファイルは特定種類のストリームとして実装されているため、このオプションはファイルに新しいストリームを追加します。その後、このストリームに対していつもどおりストリームごとのオプションを使えます。このオプションで作られる添付ストリームは、他のすべてのストリーム(-map や自動マッピングで作られたもの)の後に作られます。

Matroska では mimetype メタデータタグも設定する必要がある点に注意してください。

ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv

(添付ストリームが出力ファイルで 3 番目になると仮定しています。)

-dump_attachment[:stream_specifier] filename (input,per-stream)

マッチした添付ストリームを filename という名前のファイルへ取り出します。filename が空の場合は、filename メタデータタグの値が使われます。

たとえば、最初の添付ファイルを「out.ttf」というファイルへ取り出すには次のようにします。

ffmpeg -dump_attachment:t:0 out.ttf -i INPUT

すべての添付ファイルを、filename タグで決まるファイルへ取り出すには次のようにします。

ffmpeg -dump_attachment:t "" -i INPUT

技術的な注記: 添付ファイルはコーデックの extradata として実装されているため、このオプションは実際には添付ファイルに限らず、任意のストリームから extradata を取り出すのに使えます。

5.5 映像オプション

-vframes number (output)

出力する映像フレーム数を設定します。これは -frames:v の旧式なエイリアスです。代わりに -frames:v を使ってください。

-r[:stream_specifier] fps (input/output,per-stream)

フレームレート(Hz 値、分数、または略記)を設定します。

入力オプションとして使う場合、ファイルに保存されているタイムスタンプを無視し、代わりに一定のフレームレート fps を仮定してタイムスタンプを生成します。これは image2 や v4l2 など一部の入力フォーマットで使う -framerate オプションとは異なります(FFmpeg の古いバージョンでは同じでした)。迷ったら入力オプションの -r ではなく -framerate を使ってください。

出力オプションとして使う場合:

映像エンコード

エンコードの直前にフレームを複製・破棄して、一定の出力フレームレート fps を実現します。

映像ストリームコピー

fps がストリームのフレームレートであることを muxer に伝えます。この場合、データの破棄も複製も行われません。fps がパケットのタイムスタンプから判断される実際のストリームフレームレートと一致しないと、不正なファイルが生成されることがあります。setts bitstream filter も参照してください。

-fpsmax[:stream_specifier] fps (output,per-stream)

最大フレームレート(Hz 値、分数、または略記)を設定します。

出力フレームレートが自動設定されていて、この値より高い場合に、出力フレームレートを抑え込みます。バッチ処理や、入力フレームレートが非常に高く誤検出された場合に便利です。-r と同時には設定できません。ストリームコピー時は無視されます。

-s[:stream_specifier] size (input/output,per-stream)

フレームサイズを設定します。

入力オプションとして使う場合、これは video_size private オプションへのショートカットです。これは、フレームサイズがファイルに保存されていないか設定可能な一部の demuxer(raw video や video grabber など)で認識されます。

出力オプションとして使う場合、対応する filtergraph の 末尾scale 映像フィルタを挿入します。先頭やその他の場所に挿入するには、scale フィルタを直接使ってください。

形式は「wxh」です(既定はソースと同じ)。

-aspect[:stream_specifier] aspect (output,per-stream)

aspect で指定した映像の表示アスペクト比を設定します。

aspect は浮動小数点数の文字列か、num:den の形式の文字列です。num と den はアスペクト比の分子と分母です。たとえば "4:3"、"16:9"、"1.3333"、"1.7777" が有効な引数値です。

-vcodec copy と併用すると、コンテナレベルに保存されたアスペクト比に影響しますが、エンコード済みフレームに保存されたアスペクト比(存在する場合)には影響しません。

-display_rotation[:stream_specifier] rotation (input,per-stream)

映像の回転メタデータを設定します。

rotation は、表示前に映像を反時計回りに回転させる角度を度数で指定する 10 進数です。

このオプションは、ファイルに保存された回転/表示変換メタデータがあればそれを上書きします。映像が(コピーではなく)トランスコードされ、かつ -autorotate が有効な場合、映像はフィルタリング段階で回転します。そうでなければ、muxer が対応していればメタデータが出力ファイルに書き込まれます。

-display_hflip-display_vflip オプションが与えられた場合、それらはこのオプションで指定した回転の後に適用されます。

-display_hflip[:stream_specifier] (input,per-stream)

表示時に画像を水平方向に反転するかどうかを設定します。

詳しくは -display_rotation オプションを参照してください。

-display_vflip[:stream_specifier] (input,per-stream)

表示時に画像を垂直方向に反転するかどうかを設定します。

詳しくは -display_rotation オプションを参照してください。

-mastering_display[:stream_specifier] G(%u,%u)B(%u,%u)R(%u,%u)WP(%u,%u)L(%u,%u) (input,per-stream)

映像のマスタリングディスプレイメタデータを設定します。

G(%u,%u)B(%u,%u)R(%u,%u)WP(%u,%u)L(%u,%u) は、GBR チャンネルの表示原色と白色点(WP)の X,Y を 0.00002 単位で、輝度の最大・最小値(L)を 0.0001 カンデラ毎平方メートル単位で指定する文字列です。値は符号なし整数で、有理数の分子を表します。分母は GBR と(WP)では 50000、(L)では 10000 が暗黙に使われます。

このオプションは、ファイルに保存されたマスタリングディスプレイメタデータがあればそれを上書きします。

-content_light[:stream_specifier] %u,%u (input,per-stream)

映像のコンテンツライトメタデータを設定します。

%u,%u は、最大コンテンツライトレベルと最大ピクチャ平均ライトレベルを指定する文字列です。

このオプションは、ファイルに保存されたコンテンツライトメタデータがあればそれを上書きします。

-vn (input/output)

入力オプションとして使う場合、ファイルのすべての映像ストリームについて、フィルタリングや、どの出力への自動選択・マッピングも禁止します。個別にストリームを無効化するには -discard オプションを参照してください。

出力オプションとして使う場合、映像の記録、すなわちどの映像ストリームの自動選択・マッピングも無効にします。完全に手動で制御するには -map オプションを参照してください。

-vcodec codec (output)

映像コーデックを設定します。これは -codec:v のエイリアスです。

-pass[:stream_specifier] n (output,per-stream)

パス番号(1 または 2)を選択します。2 パスの映像エンコードに使います。1 パス目で映像の統計がログファイルに記録され(-passlogfile オプションも参照)、2 パス目でそのログファイルを使って、要求どおりの正確なビットレートで映像を生成します。1 パス目では、音声を無効にし出力を null にするだけでよいです。Windows と Unix の例を示します。

ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null

-passlogfile[:stream_specifier] prefix (output,per-stream)

2 パスログファイル名の接頭辞を prefix に設定します。既定のファイル名接頭辞は「ffmpeg2pass」です。完全なファイル名は PREFIX-N.log になります。N は出力ストリームに固有の番号です。

-vf filtergraph (output)

filtergraph で指定した filtergraph を作り、それを使ってストリームにフィルタをかけます。

これは -filter:v のエイリアスです。-filter オプションを参照してください。

-autorotate

ファイルメタデータに従って映像を自動的に回転します。既定で有効です。無効にするには -noautorotate を使います。

-autoscale

最初のフレームの解像度に従って映像を自動的にスケールします。既定で有効です。無効にするには -noautoscale を使います。autoscale を無効にすると、filtergraph の出力フレームがすべて同じ解像度になるとは限らず、一部の encoder/muxer には適さない場合があります。そのため、本当に分かっている場合を除き無効にするのは推奨しません。autoscale の無効化は自己責任で行ってください。

5.6 アドバンスド映像オプション

-pix_fmt[:stream_specifier] format (input/output,per-stream)

pixel format を設定します。サポートされるすべての pixel format を表示するには -pix_fmts を使います。選択した pixel format が選べない場合、ffmpeg は警告を表示し、encoder がサポートする最良の pixel format を選びます。pix_fmt に + を前置すると、要求した pixel format が選べない場合に ffmpeg はエラーで終了し、filtergraph 内の自動変換も無効になります。pix_fmt が単一の + の場合、ffmpeg は入力(またはグラフ出力)と同じ pixel format を選び、自動変換は無効になります。

-sws_flags flags (input/output)

libswscale ライブラリの既定フラグを設定します。これらのフラグは、自動挿入される scale フィルタと simple filtergraph 内の scale フィルタで、filtergraph 定義内で上書きされない限り使われます。

scaler オプションの一覧は (ffmpeg-scaler)ffmpeg-scaler manual を参照してください。

-rc_override[:stream_specifier] override (output,per-stream)

特定区間のレート制御の上書きで、スラッシュで区切った "int,int,int" のリストとして指定します。最初の 2 値は開始フレーム番号と終了フレーム番号、最後の 1 値は正なら使う量子化値、負なら品質係数です。

-vstats

映像符号化の統計を vstats_HHMMSS.log へダンプします。形式の説明は vstats ファイル形式の節を参照してください。

-vstats_file file

映像符号化の統計を file へダンプします。形式の説明は vstats ファイル形式の節を参照してください。

-vstats_version file

使う vstats 形式のバージョンを指定します。既定は 2 です。形式の説明は vstats ファイル形式の節を参照してください。

-vtag fourcc/tag (output)

映像のタグ/fourcc を強制します。これは -tag:v のエイリアスです。

-force_key_frames[:stream_specifier] time[,time...] (output,per-stream) -force_key_frames[:stream_specifier] expr:expr (output,per-stream) -force_key_frames[:stream_specifier] source (output,per-stream) -force_key_frames[:stream_specifier] scd_metadata (output,per-stream)

force_key_frames は次の形式の引数を取れます。

time[,time...]

引数がタイムスタンプの場合、ffmpeg は指定の時刻を encoder のタイムベースに従って最も近い出力タイムスタンプに丸め、算出したタイムスタンプ以上のタイムスタンプを持つ最初のフレームで keyframe を強制します。encoder のタイムベースが粗すぎると、指定した時刻より小さいタイムスタンプのフレームで keyframe が強制される場合があります。既定の encoder タイムベースは出力フレームレートの逆数ですが、-enc_time_base で別の値に設定できます。

時刻の 1 つが「chapters[delta]」であれば、ファイル内のすべてのチャプターの開始時刻を delta(秒単位の時刻)だけずらしたものに展開されます。このオプションは、出力ファイルのチャプターマークやその他指定の位置にシークポイントを確実に置くのに便利です。

たとえば、5 分の位置にキーフレームを挿入し、さらに各チャプターの開始 0.1 秒前にもキーフレームを挿入するには次のようにします。

-force_key_frames 0:05:00,chapters-0.1

expr:expr

引数に expr: が前置されている場合、文字列 expr は式として解釈され、各フレームで評価されます。評価が 0 以外の場合に keyframe が強制されます。

expr 内の式には次の定数を含められます。

n

現在処理中のフレーム番号で、0 から始まります。

n_forced

強制されたフレームの数です。

prev_forced_n

直前に強制されたフレームの番号です。まだ keyframe が強制されていないときは NAN です。

prev_forced_t

直前に強制されたフレームの時刻です。まだ keyframe が強制されていないときは NAN です。

t

現在処理中のフレームの時刻です。

たとえば 5 秒ごとに keyframe を強制するには次のように指定します。

-force_key_frames expr:gte(t,n_forced*5)

13 秒目から始めて、直前に強制したフレームの時刻の 5 秒後に keyframe を強制するには次のようにします。

-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))

source

引数が source の場合、ffmpeg は、現在エンコードしているフレームがソース内で keyframe として印付けされていれば keyframe を強制します。その特定のソースフレームを破棄しなければならない場合は、代わりに次に利用可能なフレームを keyframe にします。

scd_metadata

引数が scd_metadata の場合、ffmpeg は、現在のフレームに lavfi.scd.time というキーのメタデータエントリが含まれていれば keyframe を強制します。このメタデータは scdetscdet_vulkan などのフィルタで追加できます。scdet の後にフレームを複製するフィルタを挿入しないでください。複数フレームでメタデータが重複し、keyframe が繰り返し挿入される原因になります。

keyframe を多く強制しすぎると、一部の encoder の先読みアルゴリズムにとって非常に有害である点に注意してください。固定 GOP のオプションなどを使うほうが効率的です。

-apply_cropping[:stream_specifier] source (input,per-stream)

ファイルメタデータに従って、デコード後に映像を自動的にクロップします。既定は all です。

none (0)

クロップメタデータを一切適用しません。

all (1)

コーデックレベルとコンテナレベルの両方のクロップを適用します。これが既定のモードです。

codec (2)

コーデックレベルのクロップを適用します。

container (3)

コンテナレベルのクロップを適用します。

-copyinkf[:stream_specifier] (output,per-stream)

ストリームコピー時に、先頭にある非キーフレームもコピーします。

-init_hw_device type[=name][:device[,key=value...]]

type という種類の新しいハードウェアデバイスを name という名前で、指定のデバイスパラメータを使って初期化します。name を指定しない場合は「type%d」の形式の既定の名前が付きます。

device とそれに続く引数の意味はデバイス種類によって異なります。

cuda

device は CUDA デバイスの番号です。

認識されるオプションは次のとおりです。

primary_ctx

1 に設定すると、新しいデバイスコンテキストを作る代わりにプライマリデバイスコンテキストを使います。

例:

-init_hw_device cuda:1

システム上の 2 番目のデバイスを選びます。

-init_hw_device cuda:0,primary_ctx=1

1 番目のデバイスを選び、プライマリデバイスコンテキストを使います。

dxva2

device は Direct3D 9 ディスプレイアダプタの番号です。

d3d11va

device は Direct3D 11 ディスプレイアダプタの番号です。指定しない場合、既定の Direct3D 11 ディスプレイアダプタ、または「vendor_id」で指定したハードウェア VendorId を持つ最初の Direct3D 11 ディスプレイアダプタを使おうとします。

例:

-init_hw_device d3d11va

既定の Direct3D 11 ディスプレイアダプタに d3d11va デバイスを作ります。

-init_hw_device d3d11va:1

インデックス 1 で指定した Direct3D 11 ディスプレイアダプタに d3d11va デバイスを作ります。

-init_hw_device d3d11va:,vendor_id=0x8086

ハードウェア VendorId が 0x8086 である最初の Direct3D 11 ディスプレイアダプタに d3d11va デバイスを作ります。

vaapi

device は X11 ディスプレイ名、DRM レンダーノード、または DirectX アダプタインデックスのいずれかです。指定しない場合、既定の X11 ディスプレイ($DISPLAY)を開こうとし、次に最初の DRM レンダーノード(/dev/dri/renderD128)、または Windows では既定の DirectX アダプタを開こうとします。

認識されるオプションは次のとおりです。

kernel_driver

device を指定しない場合、このオプションで目的のデバイスに関連付けられたカーネルドライバの名前を指定します。このオプションは、ハードウェアアクセラレーション方式の drmvaapi が有効な場合にのみ利用できます。

vendor_id

device と kernel_driver を指定しない場合、このオプションで目的のデバイスに関連付けられた vendor id を指定します。このオプションは、ハードウェアアクセラレーション方式の drmvaapi が有効で、かつ kernel_driver が指定されていない場合にのみ利用できます。

例:

-init_hw_device vaapi

既定のデバイスに vaapi デバイスを作ります。

-init_hw_device vaapi:/dev/dri/renderD129

DRM レンダーノード /dev/dri/renderD129 に vaapi デバイスを作ります。

-init_hw_device vaapi:1

DirectX アダプタ 1 に vaapi デバイスを作ります。

-init_hw_device vaapi:,kernel_driver=i915

カーネルドライバ「i915」に関連付けられたデバイスに vaapi デバイスを作ります。

-init_hw_device vaapi:,vendor_id=0x8086

vendor id「0x8086」に関連付けられたデバイスに vaapi デバイスを作ります。

vdpau

device は X11 ディスプレイ名です。指定しない場合、既定の X11 ディスプレイ($DISPLAY)を開こうとします。

qsv

device は「MFX_IMPL_*」の値を選びます。指定できる値は次のとおりです。

auto sw hw auto_any hw_any hw2 hw3 hw4

指定しない場合は「auto_any」が使われます。(QSV では、プラットフォームに応じたサブデバイス(「dxva2」「d3d11va」「vaapi」)を作り、そこから QSV デバイスを導出するほうが目的の結果を得やすい場合があります。)

認識されるオプションは次のとおりです。

child_device

Linux では DRM レンダーノード、Windows では DirectX アダプタを指定します。

child_device_type

プラットフォームに応じたサブデバイス種類を選びます。Windows では、構成時に --enable-libvpl を指定すると既定のサブデバイス種類として「d3d11va」が使われ、--enable-libmfx を指定すると「dxva2」が使われます。Linux ではサブデバイス種類として「vaapi」のみ使えます。

例:

-init_hw_device qsv:hw,child_device=/dev/dri/renderD129

DRM レンダーノード /dev/dri/renderD129 に「MFX_IMPL_HARDWARE」で QSV デバイスを作ります。

-init_hw_device qsv:hw,child_device=1

DirectX アダプタ 1 に「MFX_IMPL_HARDWARE」で QSV デバイスを作ります。

-init_hw_device qsv:hw,child_device_type=d3d11va

種類「d3d11va」の GPU サブデバイスを選び、「MFX_IMPL_HARDWARE」で QSV デバイスを作ります。

-init_hw_device qsv:hw,child_device_type=dxva2

種類「dxva2」の GPU サブデバイスを選び、「MFX_IMPL_HARDWARE」で QSV デバイスを作ります。

-init_hw_device qsv:hw,child_device=1,child_device_type=d3d11va

DirectX アダプタ 1 にサブデバイス種類「d3d11va」で、「MFX_IMPL_HARDWARE」の QSV デバイスを作ります。

-init_hw_device vaapi=va:/dev/dri/renderD129 -init_hw_device qsv=hw1@ va

/dev/dri/renderD129 に「va」という VAAPI デバイスを作り、そこからデバイス「va」を派生して「hw1」という QSV デバイスを作ります。

opencl

device はプラットフォームとデバイスを platform_index.device_index として選びます。

key-value のペアを使ってデバイス集合を絞り込み、特定のプラットフォーム文字列やデバイス文字列に一致するデバイスだけを見つけることもできます。

絞り込みに使える文字列は次のとおりです。

platform_profile platform_version platform_name platform_vendor platform_extensions device_name device_vendor driver_version device_version device_profile device_extensions device_type

インデックスと絞り込みは、合わせてデバイスを一意に選べる必要があります。

例:

-init_hw_device opencl:0.1

1 番目のプラットフォームの 2 番目のデバイスを選びます。

-init_hw_device opencl:,device_name=Foo9000

名前に文字列 Foo9000 を含むデバイスを選びます。

-init_hw_device opencl:1,device_type=gpu,device_extensions=cl_khr_fp16

2 番目のプラットフォームで cl_khr_fp16 拡張をサポートする GPU デバイスを選びます。

vulkan

device が整数の場合、システム依存のデバイス一覧のインデックスでデバイスを選びます。それ以外の文字列の場合、その文字列を部分文字列として名前に含む最初のデバイスを選びます。

認識されるオプションは次のとおりです。

debug

1 に設定すると、インストールされていれば検証レイヤーを有効にします。

linear_images

1 に設定すると、hwcontext が確保する画像はリニアで、ローカルにマッピング可能になります。

instance_extensions

有効にする追加のインスタンス拡張をプラス区切りで並べたリストです。

device_extensions

有効にする追加のデバイス拡張をプラス区切りで並べたリストです。

例:

-init_hw_device vulkan:1

システム上の 2 番目のデバイスを選びます。

-init_hw_device vulkan:RADV

名前に文字列 RADV を含む最初のデバイスを選びます。

-init_hw_device vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface

1 番目のデバイスを選び、Wayland と XCB のインスタンス拡張を有効にします。

-init_hw_device type[=name]@source

type という種類の新しいハードウェアデバイスを name という名前で、name が source の既存デバイスから派生して初期化します。

-init_hw_device list

この ffmpeg のビルドでサポートされるすべてのハードウェアデバイス種類を一覧します。

-filter_hw_device name

name というハードウェアデバイスを、すべての filtergraph 内のすべてのフィルタへ渡します。hwupload フィルタでアップロード先のデバイスを設定したり、hwmap フィルタでマップ先のデバイスを設定したりするのに使えます。ほかのフィルタも、ハードウェアデバイスを必要とするときにこのパラメータを使う場合があります。これが必要なのは通常、入力がまだハードウェアフレームでない場合だけです。すでにハードウェアフレームの場合、フィルタは入力として受け取るフレームの文脈から、必要なデバイスを導出します。

これはグローバル設定なので、すべてのフィルタが同じデバイスを受け取ります。

-hwaccel[:stream_specifier] hwaccel (input,per-stream)

マッチするストリームのデコードにハードウェアアクセラレーションを使います。hwaccel に指定できる値は次のとおりです。

none

ハードウェアアクセラレーションを使いません(既定)。

auto

ハードウェアアクセラレーション方式を自動選択します。

vdpau

VDPAU(Video Decode and Presentation API for Unix)ハードウェアアクセラレーションを使います。

dxva2

DXVA2(DirectX Video Acceleration)ハードウェアアクセラレーションを使います。

d3d11va

D3D11VA(DirectX Video Acceleration)ハードウェアアクセラレーションを使います。

vaapi

VAAPI(Video Acceleration API)ハードウェアアクセラレーションを使います。

qsv

映像トランスコードに Intel QuickSync Video アクセラレーションを使います。

他のほとんどの値と異なり、このオプションはアクセラレーションによるデコード(qsv decoder を選ぶと自動的に使われます)ではなく、フレームをシステムメモリへコピーせずに行うアクセラレーション付きトランスコードを有効にします。

これが機能するには、decoder と encoder の両方が QSV アクセラレーションに対応している必要があり、フィルタは使えません。

videotoolbox

Video Toolbox ハードウェアアクセラレーションを使います。

選択した hwaccel が利用できないか、選んだ decoder がサポートしていない場合、このオプションは効果がありません。

ほとんどのアクセラレーション方式は再生向けで、現代の CPU でのソフトウェアデコードより速くなるわけではない点に注意してください。さらに ffmpeg は通常、デコードしたフレームを GPU メモリからシステムメモリへコピーする必要があり、さらなる性能低下を招きます。したがってこのオプションは主にテスト用です。

-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)

ハードウェアアクセラレーションに使うデバイスを選びます。

このオプションは -hwaccel オプションも指定している場合にのみ意味があります。-init_hw_device で作った既存デバイスを名前で参照できるほか、その直前に「-init_hw_device」type:hwaccel_device を呼んだかのように新しいデバイスを作ることもできます。

-hwaccels

この ffmpeg のビルドで有効なすべてのハードウェアアクセラレーションコンポーネントを一覧します。実行時の実際の利用可否は、ハードウェアと適切なドライバがインストールされているかどうかに依存します。

-fix_sub_duration_heartbeat[:stream_specifier]

特定の出力映像ストリームをハートビートストリームに設定します。これに従い、ランダムアクセスパケットを受け取ったときに、進行中の字幕を分割して押し出します。

これにより、終了パケットや次の字幕がまだ受信されていない字幕の遅延を下げられます。欠点として、全区間をカバーするために字幕イベントが複製されやすくなります。そのため、字幕イベントが出力に渡されるタイミングの遅延が問題にならない用途では、このオプションを使うべきではありません。

これが効果を持つには、対象の入力字幕ストリームに -fix_sub_duration が設定されていること、さらにその入力字幕ストリームが、ハートビートストリームのある同じ出力へ直接マップされている必要があります。

5.7 音声オプション

-aframes number (output)

出力する音声フレーム数を設定します。これは -frames:a の旧式なエイリアスです。代わりに -frames:a を使ってください。

-ar[:stream_specifier] freq (input/output,per-stream)

音声のサンプリング周波数を設定します。出力ストリームでは、既定で対応する入力ストリームの周波数に設定されます。入力ストリームでは、このオプションは音声キャプチャデバイスと raw demuxer でのみ意味があり、対応する demuxer オプションにマッピングされます。

-aq q (output)

音声品質(コーデック固有、VBR)を設定します。これは -q:a のエイリアスです。

-ac[:stream_specifier] channels (input/output,per-stream)

音声チャンネル数を設定します。出力ストリームでは、既定で入力音声チャンネル数に設定されます。入力ストリームでは、このオプションは音声キャプチャデバイスと raw demuxer でのみ意味があり、対応する demuxer オプションにマッピングされます。

-an (input/output)

入力オプションとして使う場合、ファイルのすべての音声ストリームについて、フィルタリングや、どの出力への自動選択・マッピングも禁止します。個別にストリームを無効化するには -discard オプションを参照してください。

出力オプションとして使う場合、音声の記録、すなわちどの音声ストリームの自動選択・マッピングも無効にします。完全に手動で制御するには -map オプションを参照してください。

-acodec codec (input/output)

音声コーデックを設定します。これは -codec:a のエイリアスです。

-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)

音声の sample format を設定します。サポートされる sample format の一覧を得るには -sample_fmts を使います。

-af filtergraph (output)

filtergraph で指定した filtergraph を作り、それを使ってストリームにフィルタをかけます。

これは -filter:a のエイリアスです。-filter オプションを参照してください。

5.8 アドバンスド音声オプション

-atag fourcc/tag (output)

音声のタグ/fourcc を強制します。これは -tag:a のエイリアスです。

-ch_layout[:stream_specifier] layout (input/output,per-stream)

-channel_layout のエイリアスです。

-channel_layout[:stream_specifier] layout (input/output,per-stream)

音声のチャンネルレイアウトを設定します。出力ストリームでは、既定で入力のチャンネルレイアウトに設定されます。入力ストリームでは、入力のチャンネルレイアウトを上書きします。すべての decoder が上書きされたチャンネルレイアウトを尊重するわけではありません。このオプションは音声キャプチャデバイスと raw demuxer のチャンネルレイアウトも設定し、対応する demuxer オプションにマッピングされます。

-guess_layout_max channels (input,per-stream)

入力チャンネルレイアウトが不明な場合、それが指定したチャンネル数以下に対応するときだけ推測を試みます。たとえば 2 を指定すると、ffmpeg は 1 チャンネルをモノ、2 チャンネルをステレオと認識しますが、6 チャンネルは 5.1 とは認識しません。既定は常に推測を試みます。すべての推測を無効にするには 0 を使います。-channel_layout オプションで入力レイアウトを明示的に指定しても推測は無効になります。

5.9 字幕オプション

-scodec codec (input/output)

字幕コーデックを設定します。これは -codec:s のエイリアスです。

-sn (input/output)

入力オプションとして使う場合、ファイルのすべての字幕ストリームについて、フィルタリングや、どの出力への自動選択・マッピングも禁止します。個別にストリームを無効化するには -discard オプションを参照してください。

出力オプションとして使う場合、字幕の記録、すなわちどの字幕ストリームの自動選択・マッピングも無効にします。完全に手動で制御するには -map オプションを参照してください。

5.10 アドバンスド字幕オプション

-fix_sub_duration

字幕の表示時間を補正します。各字幕について、同じストリームの次のパケットを待ち、重複を避けるために最初の字幕の表示時間を調整します。これは一部の字幕コーデック、とくに DVB 字幕で必要です。元のパケットの表示時間はおおまかな見積もりにすぎず、実際の終わりは空の字幕フレームで示されるためです。必要なときにこのオプションを使わないと、表示時間が過大になったり、非単調なタイムスタンプによる mux 失敗が起きたりすることがあります。

このオプションは、次の字幕パケットがデコードされるまですべてのデータの出力を遅延させる点に注意してください。メモリ消費とレイテンシが大きく増える可能性があります。

-canvas_size size

字幕をレンダリングするのに使うキャンバスのサイズを設定します。

5.11 アドバンスドオプション

-map [-]input_file_id[:stream_specifier][:view_specifier][:?] | [linklabel] (output)

出力ファイルに 1 つ以上のストリームを作ります。このオプションには、データソースを指定する形式が 2 通りあります。1 つ目は(-i で指定した)何らかの入力ファイルから 1 つ以上のストリームを選ぶ形式、2 つ目は(-filter_complex で指定した)何らかの complex filtergraph の出力を取る形式です。

1 つ目の形式では、インデックス input_file_id の入力ファイルのすべてのストリームについて出力ストリームが作られます。stream_specifier を与えると、指定子にマッチするストリームだけが使われます(stream_specifier の構文は「ストリーム指定子」の節を参照)。

ストリーム識別子の前に - 文字を付けると「ネガティブ」マッピングになります。これは、すでに作られたマッピングからマッチするストリームを除外します。

ストリーム指定子の後に省略可能な view_specifier を与えられます。これはマルチビュー映像で使うビューを指定します。view specifier は次のいずれかの形式です。

view:view_id

ID でビューを選びます。view_id を「all」にすると、すべてのビューを 1 つのストリームにインターリーブして使います。

vidx:view_idx

インデックスでビューを選びます。すなわち 0 がベースビュー、1 が最初の非ベースビューというようになります。

vpos:position

表示位置でビューを選びます。position は left または right です。

トランスコードの既定はベースビューのみを使うこと、すなわち vidx:0 と同等です。ストリームコピーでは view specifier はサポートされず、常にすべてのビューがコピーされます。

ストリームインデックスの末尾に ? を付けると、map を省略可能にできます。map がどのストリームにもマッチしない場合、失敗する代わりに無視されます。ただし、無効な入力ファイルインデックスを使った場合(map が存在しない入力を参照する場合など)は依然として失敗する点に注意してください。

別形式の [linklabel] は、complex filtergraph(-filter_complex オプションを参照)の出力を出力ファイルにマップします。linklabel はグラフ内で定義された出力リンクラベルに対応していなければなりません。

このオプションは複数回指定でき、各回が出力ファイルにストリームを追加します。任意の入力ストリームを、異なる出力ストリームのソースとして何度でもマップできます。たとえば、異なるエンコードオプションやフィルタを使うためです。ストリームは、コマンドラインで -map オプションが与えられた順序と同じ順序で出力に作られます。

このオプションを使うと、この出力ファイルの既定のマッピングが無効になります。

例:

map everything

1 番目の入力ファイルのすべてのストリームを出力にマップするには次のようにします。

ffmpeg -i INPUT -map 0 output

select specific stream

1 番目の入力ファイルに音声ストリームが 2 つある場合、これらは 0:0 と 0:1 で識別されます。-map を使って、どのストリームを出力ファイルに置くかを選べます。たとえば

ffmpeg -i INPUT -map 0:1 out.wav

は INPUT の 2 番目の入力ストリームを out.wav の(単一の)出力ストリームにマップします。

create multiple streams

入力ファイル a.mov(識別子 0:2 で指定)からインデックス 2 のストリームと、入力 b.mov(識別子 1:6 で指定)からインデックス 6 のストリームを選び、出力ファイル out.mov にコピーするには次のようにします。

ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov

create multiple streams 2

入力ファイルからすべての映像と 3 番目の音声ストリームを選ぶには次のようにします。

ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT

negative map

2 番目の音声を除くすべてのストリームをマップするには、ネガティブマッピングを使います。

ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT

optional map

1 番目の入力から映像と音声ストリームをマップし、末尾の ? を使って、1 番目の入力に音声ストリームがなければ音声のマッピングを無視するには次のようにします。

ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT

map by language

英語の音声ストリームを選ぶには次のようにします。

ffmpeg -i INPUT -map 0:m:language:eng OUTPUT

-ignore_unknown

種類が不明な入力ストリームのコピーを試みたとき、失敗する代わりにそのストリームを無視します。

-copy_unknown

種類が不明な入力ストリームのコピーを試みたとき、失敗する代わりにそのコピーを許可します。

-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)

次の出力ファイルのメタデータ情報を infile から設定します。これはファイル名ではなくファイルインデックス(0 始まり)である点に注意してください。省略可能な metadata_spec_in/out パラメータで、どのメタデータをコピーするかを指定します。メタデータ指定子は次の形式を取れます。

g

グローバルメタデータ、すなわちファイル全体に適用されるメタデータです。

s[:stream_spec]

ストリームごとのメタデータです。stream_spec は「ストリーム指定子」の章で説明したストリーム指定子です。入力のメタデータ指定子では、最初にマッチしたストリームからコピーされます。出力のメタデータ指定子では、マッチするすべてのストリームへコピーされます。

c:chapter_index

チャプターごとのメタデータです。chapter_index は 0 始まりのチャプターインデックスです。

p:program_index

プログラムごとのメタデータです。program_index は 0 始まりのプログラムインデックスです。

メタデータ指定子を省略すると、既定でグローバルになります。

既定では、グローバルメタデータは 1 番目の入力ファイルからコピーされ、ストリームごと・チャプターごとのメタデータはストリーム/チャプターとともにコピーされます。該当する種類のマッピングを作ると、これらの既定マッピングは無効になります。負のファイルインデックスを使うと、自動コピーを無効にするだけのダミーマッピングを作れます。

たとえば、入力ファイルの最初のストリームのメタデータを出力ファイルのグローバルメタデータへコピーするには次のようにします。

ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3

逆に、グローバルメタデータをすべての音声ストリームへコピーするには次のようにします。

ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv

この例では、グローバルメタデータが既定で仮定されるため、単に 0 でも機能する点に注意してください。

-map_chapters input_file_index (output)

インデックス input_file_index の入力ファイルから、次の出力ファイルへチャプターをコピーします。チャプターマッピングが指定されない場合、チャプターを 1 つ以上持つ最初の入力ファイルからチャプターがコピーされます。負のファイルインデックスを使うとチャプターのコピーを無効にできます。

-benchmark (global)

エンコードの最後にベンチマーク情報を表示します。使用した実時間・システム時間・ユーザー時間と最大メモリ消費量を表示します。最大メモリ消費量はすべてのシステムでサポートされているわけではなく、未対応の場合は通常 0 と表示されます。

-benchmark_all (global)

エンコード中にベンチマーク情報を表示します。各種ステップ(音声/映像のエンコード/デコード)で使用した実時間・システム時間・ユーザー時間を表示します。

-timelimit duration (global)

ffmpeg が CPU ユーザー時間で duration 秒間実行された後に終了します。

-dump (global)

各入力パケットを stderr へダンプします。

-hex (global)

パケットをダンプするとき、ペイロードもダンプします。

-readrate speed (input)

入力の読み込み速度を制限します。

値は正の浮動小数点数で、実時間 1 秒あたりに取り込むべきメディアの最大長を秒単位で表します。既定値は 0 で、取り込み速度に制限を課さないことを表します。値 1 は実時間速度を表し、-re と同等です。

主に(ファイルから読む場合などに)キャプチャデバイスやライブ入力ストリームを模擬するのに使います。入力が実際のキャプチャデバイスやライブストリームの場合、低い値を使うとパケットロスを招くおそれがあるため使うべきではありません。

ライブ配信など、出力パケットの流速が重要な場合に役立ちます。

-re (input)

入力をネイティブのフレームレートで読み込みます。これは -readrate 1 を設定するのと同等です。

-readrate_initial_burst seconds

初期の読み込みバースト時間を秒単位で設定します。これを過ぎると -re/-readrate が適用されます。

-readrate_catchup speed (input)

入力または出力がブロックされ、実際の読み込み速度が指定の readrate より遅れた場合、入力が指定の readrate に追いつくまでこのレートが有効になります。主 readrate より低くてはなりません。

-fps_mode[:stream_specifier] parameter (output,per-stream)

映像同期方式/フレームレートモードを設定します。

passthrough

各フレームは、demuxer から muxer へ、そのタイムスタンプのまま渡されます。

cfr

要求どおりの一定フレームレートを正確に実現するため、フレームが複製・破棄されます。

vfr

フレームはそのタイムスタンプのまま渡されるか、2 つのフレームが同じタイムスタンプを持たないように破棄されます。

auto

muxer の能力に応じて cfr と vfr を選びます。これが既定の方式です。

この後、muxer がタイムスタンプをさらに変更する場合がある点に注意してください。たとえば、フォーマットオプション avoid_negative_ts が有効な場合です。

-map を使うと、どのストリームからタイムスタンプを取るかを選べます。映像か音声のどちらかをそのままにし、残りのストリームをそのストリームに同期させられます。

-frame_drop_threshold parameter

フレーム破棄のしきい値で、映像フレームが破棄される前にどれだけ遅れていられるかを指定します。フレームレート単位なので、1.0 は 1 フレームです。既定は -1.1 です。考えられる用途は、タイムスタンプにノイズがある場合のフレーム破棄を避けることや、正確なタイムスタンプの場合にフレーム破棄の精度を上げることです。

-apad parameters (output,per-stream)

出力音声ストリームをパディングします。これは -af apad を適用するのと同じです。引数は apad フィルタと同じ形式のフィルタパラメータの文字列です。このオプションが効果を持つには、この出力に -shortest が設定されている必要があります。

-copyts

入力タイムスタンプを処理せず、整形を試みずに値をそのまま保持します。とくに、初期の開始時刻オフセット値を取り除きません。

fps_mode オプションや特定の muxer 処理(フォーマットオプション avoid_negative_ts が有効な場合など)によっては、このオプションを選んでも出力タイムスタンプが入力タイムスタンプと一致しないことがある点に注意してください。

-start_at_zero

copyts と併用すると、入力タイムスタンプを 0 から始まるようにずらします。

これは、たとえば -ss 50 を使うと、入力ファイルがどのタイムスタンプから始まっていても、出力タイムスタンプが 50 秒から始まることを意味します。

-copytb mode

ストリームコピー時に encoder のタイムベースをどう設定するかを指定します。mode は整数値で、次のいずれかを取れます。

1

demuxer のタイムベースを使います。

タイムベースは、対応する入力 demuxer から出力 encoder へコピーされます。可変フレームレートの映像ストリームをコピーするとき、タイムスタンプが単調増加しなくなるのを避けるために必要になる場合があります。

0

decoder のタイムベースを使います。

タイムベースは、対応する入力 decoder から出力 encoder へコピーされます。

-1

健全な出力になるよう、自動で選ぶことを試みます。

既定値は -1 です。

-enc_time_base[:stream_specifier] timebase (output,per-stream)

encoder のタイムベースを設定します。timebase は次のいずれかを取れます。

0

メディア種類に応じた既定値を割り当てます。

映像では 1/framerate、音声では 1/samplerate を使います。

demux

demuxer のタイムベースを使います。

filter

filtergraph のタイムベースを使います。

正の数

与えた数をタイムベースとして使います。

このフィールドは、2 つの整数の比(たとえば 1:24、1:48000)または 10 進数(たとえば 0.04166、2.0833e-5)として与えられます。

既定値は 0 です。

-bitexact (input/output)

(de)muxer と (de/en)coder で bitexact モードを有効にします。

-shortest (output)

最も短い出力ストリームが終わった時点でエンコードを終了します。

このオプションはフレームのバッファリングを必要とする場合があり、余分なレイテンシを生じる点に注意してください。このレイテンシの最大量は -shortest_buf_duration オプションで制御できます。

-shortest_buf_duration duration (output)

少なくとも 1 つのストリームが「疎」である(つまりフレーム間のギャップが大きい。字幕で典型的にそうなります)場合、-shortest オプションは潜在的に大量のデータのバッファリングを必要とする場合があります。

このオプションは、バッファされるフレームの最大時間長を秒単位で制御します。値を大きくすると -shortest がより正確な結果を出せる場合がありますが、メモリ使用量とレイテンシが増えます。

既定値は 10 秒です。

-dts_delta_threshold threshold

タイムスタンプの不連続のしきい値で、秒単位の 10 進数で表します。

このオプションで有効になるタイムスタンプ不連続の補正は、タイムスタンプの不連続を受け入れる入力フォーマット(AVFMT_TS_DISCONT フラグが有効なもの。たとえば MPEG-TS や HLS)にのみ適用され、-copyts オプション使用時は(ラップが検出されない限り)自動的に無効になります。

絶対値が threshold より大きいタイムスタンプの不連続が検出されると、ffmpeg は現在の DTS と PTS を対応する delta 値だけ増減して不連続を取り除きます。

既定値は 10 です。

-dts_error_threshold threshold

タイムスタンプ誤差のしきい値で、秒単位の 10 進数で表します。

このオプションで有効になるタイムスタンプ補正は、タイムスタンプの不連続を受け入れない入力フォーマット(AVFMT_TS_DISCONT フラグが有効でないもの)にのみ適用されます。

絶対値が threshold より大きいタイムスタンプの不連続が検出されると、ffmpeg は PTS/DTS のタイムスタンプ値を破棄します。

既定値は 3600*30(30 時間)で、これは任意に選ばれたかなり保守的な値です。

-muxdelay seconds (output)

demux-decode の最大遅延を設定します。

-muxpreload seconds (output)

demux-decode の初期遅延を設定します。

-streamid output-stream-index:new-value (output)

出力ストリームに新しい stream-id 値を割り当てます。このオプションは、適用先の出力ファイル名より前に指定すべきです。出力ファイルが複数ある場合、streamid を別の値に再割り当てできます。

たとえば、出力 mpegts ファイルでストリーム 0 の PID を 33、ストリーム 1 の PID を 36 に設定するには次のようにします。

ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts

-bsf[:stream_specifier] bitstream_filters (input/output,per-stream)

マッチするストリームに bitstream filter を適用します。フィルタは、demuxer から受け取った各パケット(入力オプションとして使う場合)、または muxer へ送る前の各パケット(出力オプションとして使う場合)に適用されます。

bitstream_filters はカンマ区切りの bitstream filter 指定のリストで、それぞれ次の形式です。

filter[=optname0=optval0:optname1=optval1:...]

オプション値の一部にする「,=:」のいずれかの文字は、バックスラッシュでエスケープする必要があります。

bitstream filter の一覧を得るには -bsfs オプションを使います。

たとえば

ffmpeg -bsf:v h264_mp4toannexb -i h264.mp4 -c:v copy -an out.h264

は、h264_mp4toannexb bitstream filter(MP4 にカプセル化された H.264 ストリームを Annex B に変換する)を 入力 映像ストリームに適用します。

一方

ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt

は、mov2textsub bitstream filter(MOV 字幕からテキストを取り出す)を 出力 字幕ストリームに適用します。ただし、どちらの例も -c copy を使っているため、フィルタを入力に適用するか出力に適用するかはほとんど影響しません。トランスコードが行われる場合は話が変わります。

-tag[:stream_specifier] codec_tag (input/output,per-stream)

マッチするストリームのタグ/fourcc を強制します。

-timecode hh:mm:ssSEPff

書き込むタイムコードを指定します。SEP は、ノンドロップタイムコードでは「:」、ドロップでは「;」(または「.」)です。

ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg

-filter_complex filtergraph (global)

complex filtergraph、すなわち任意の数の入力や出力を持つものを定義します。simple なグラフ、つまり同じ種類の入力と出力を 1 つずつ持つものについては -filter オプションを参照してください。filtergraph は filtergraph の記述で、ffmpeg-filters マニュアルの「Filtergraph syntax」の節で説明されています。このオプションは複数回指定でき、各回が新しい complex filtergraph を作ります。

complex filtergraph への入力は、対応するリンクラベルの形式で区別される、異なる種類のソースから来ます。

  • 入力ストリームをつなぐには [file_index:stream_specifier](つまり -map と同じ構文)を使います。stream_specifier が複数のストリームにマッチする場合、最初のものが使われます。マルチビュー映像では、ストリーム指定子の後に view specifier を続けられます。構文は -map オプションのドキュメントを参照してください。
  • ループバックデコーダをつなぐには [dec:dec_idx] を使います。dec_idx はその入力につなぐループバックデコーダのインデックスです。マルチビュー映像では、decoder インデックスの後に view specifier を続けられます。構文は -map オプションのドキュメントを参照してください。
  • 別の complex filtergraph の出力をつなぐには、そのリンクラベルを使います。たとえば次の例
    ffmpeg -i input.mkv \
      -filter_complex '[0:v]scale=size=hd1080,split=outputs=2[for_enc][orig_scaled]' \
      -c:v libx264 -map '[for_enc]' output.mkv \
      -dec 0:0 \
      -filter_complex '[dec:0][orig_scaled]hstack[stacked]' \
      -map '[stacked]' -c:v ffv1 comparison.mkv
    

は入力映像を読み込み、

* (2 行目)1 入力 2 出力の complex filtergraph で映像を 1920x1080 にスケールし、結果を両方の出力に複製します。 
* (3 行目)スケールした一方の出力を `libx264` でエンコードし、結果を output.mkv に書き込みます。 
* (4 行目)このエンコード済みストリームをループバックデコーダでデコードします。 
* (5 行目)ループバックデコーダの出力(つまり `libx264` でエンコードされた映像)を、スケールした元の入力と横並びに配置します。 
* (6 行目)合成した映像を可逆エンコードして comparison.mkv に書き込みます。

2 つの filtergraph を 1 つにまとめられない点に注意してください。まとめるとトランスコードのパイプラインに循環ができ(filtergraph の出力がエンコードへ、そこからデコードへ、さらに同じグラフへ戻る)、そのような循環は許されないためです。

ラベルのない入力は、マッチする種類の、まだ使われていない最初の入力ストリームにつながれます。

出力リンクラベルは -map で参照します。ラベルのない出力は 1 番目の出力ファイルに追加されます。

このオプションを使えば、通常の入力ファイルなしで lavfi ソースだけを使うこともできる点に注意してください。

たとえば、映像の上に画像をオーバーレイするには次のようにします。

ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
'[out]' out.mkv

ここで [0:v] は 1 番目の入力ファイルの最初の映像ストリームを指し、overlay フィルタの 1 番目(メイン)の入力につながれます。同様に、2 番目の入力の最初の映像ストリームが overlay の 2 番目(オーバーレイ)の入力につながれます。

各入力ファイルに映像ストリームが 1 つだけと仮定すると、入力ラベルは省略でき、上記は次と同等です。

ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
'[out]' out.mkv

さらに、出力ラベルを省略すると、filtergraph の単一の出力が自動的に出力ファイルに追加されるため、単に次のように書けます。

ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv

特別な例外として、ビットマップ字幕ストリームを入力として使えます。これはファイル内の最大の映像と同じサイズの映像に変換されます。映像がない場合は 720x576 になります。これは実験的かつ一時的な解決策である点に注意してください。libavfilter が字幕を適切にサポートすれば削除されます。

たとえば、MPEG-TS 形式で保存された DVB-T 録画の上に字幕を 1 秒遅らせて焼き込むには次のようにします。

ffmpeg -i input.ts -filter_complex \
  '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
  -sn -map '#0x2dc' output.mkv

(0x2d0、0x2dc、0x2ef はそれぞれ映像・音声・字幕ストリームの MPEG-TS PID です。0:0、0:3、0:7 でも機能したでしょう。)

lavfi の color ソースを使って 5 秒間の純粋な赤い映像を生成するには次のようにします。

ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv

-filter_complex_threads nb_threads (global)

filter_complex グラフの処理に使うスレッド数を定義します。filter_threads と同様ですが、-filter_complex グラフ専用です。既定は利用可能な CPU の数です。

-lavfi filtergraph (global)

complex filtergraph、すなわち任意の数の入力や出力を持つものを定義します。-filter_complex と同等です。

-accurate_seek (input)

このオプションは、-ss オプションによる入力ファイルの正確なシークを有効・無効にします。既定で有効なので、トランスコード時のシークは正確です。無効にするには -noaccurate_seek を使います。これは、たとえば一部のストリームをコピーし他をトランスコードする場合に便利です。

-seek_timestamp (input)

このオプションは、-ss オプションによる入力ファイルのタイムスタンプによるシークを有効・無効にします。既定で無効です。有効にすると、-ss オプションの引数は実際のタイムスタンプとみなされ、ファイルの開始時刻でオフセットされません。これは、トランスポートストリームのようにタイムスタンプ 0 から始まらないファイルでのみ意味があります。

-thread_queue_size size (input/output)

入力では、このオプションはファイルやデバイスから読むときにキューに入れられるパケットの最大数を設定します。低レイテンシ/高レートのライブストリームでは、適時に読まれないとパケットが破棄されることがあります。この値を設定すると、ffmpeg に専用の入力スレッドを使わせ、パケットが到着次第読み込ませることができます。既定では、ffmpeg は入力が複数指定された場合にのみこれを行います。

出力では、このオプションは各 mux スレッドにキューできるパケットの最大数を指定します。

-sdp_file file (global)

出力ストリームの sdp 情報を file に表示します。これにより、少なくとも 1 つの出力が rtp ストリームでない場合に sdp 情報をダンプできます。(出力フォーマットの少なくとも 1 つが rtp である必要があります。)

-discard (input)

特定のストリーム、またはストリームのフレームを破棄できます。任意の入力ストリームは値 all を使って完全に破棄でき、一方ストリームからのフレームの選択的破棄は demuxer で行われ、すべての demuxer がサポートしているわけではありません。

none

フレームを破棄しません。

default

既定。フレームを破棄しません。

noref

すべての非参照フレームを破棄します。

bidir

すべての双方向フレームを破棄します。

nokey

keyframe 以外のすべてのフレームを破棄します。

all

すべてのフレームを破棄します。

-abort_on flags (global)

さまざまな条件で停止・中断します。利用できるフラグは次のとおりです。

empty_output

パケットが 1 つも muxer に渡されず、出力が空です。

empty_output_stream

一部の出力ストリームで、パケットが 1 つも muxer に渡されませんでした。

-max_error_rate (global)

全入力にわたるデコードフレーム失敗の割合を設定し、これを超えると ffmpeg は終了コード 69 を返します。このしきい値を超えても処理は終了しません。範囲は 0 から 1 の浮動小数点数です。既定は 2/3 です。

-xerror (global)

エラー時に停止・終了します。

-max_muxing_queue_size packets (output,per-stream)

音声や映像ストリームをトランスコードする際、ffmpeg は各ストリームについて 1 パケットずつ揃うまで出力への書き込みを始めません。それを待つ間、他のストリームのパケットはバッファされます。このオプションは、マッチする出力ストリームについて、このバッファのサイズをパケット単位で設定します。

このオプションの既定値はほとんどの用途で十分高いはずなので、本当に必要だと確信している場合だけ触ってください。

-muxing_queue_data_threshold bytes (output,per-stream)

これは、mux キューサイズが考慮されないようにする最小しきい値です。既定はストリームあたり 50 メガバイトで、muxer に渡されるパケットの総サイズに基づきます。

-auto_conversion_filters (global)

-vf、-af、-filter_complex、-lavfi で定義されたものを含め、すべての filtergraph にフォーマット変換フィルタを自動挿入できるようにします。フィルタのフォーマット折衝で変換が必要になると、フィルタの初期化は失敗します。それでも、該当する変換フィルタ(scale、aresample)をグラフに挿入すれば変換は行えます。既定で有効です。明示的に無効にするには -noauto_conversion_filters を指定する必要があります。

-bits_per_raw_sample[:stream_specifier] value (output,per-stream)

指定の出力ストリームの raw サンプルあたりのビット数を value と宣言します。このオプションは encoder/muxer に提供する情報を設定するだけで、ストリーム自体をこの値に合わせて変えるわけではない点に注意してください。ストリームのプロパティと一致しない値を設定すると、エンコード失敗や不正な出力ファイルにつながることがあります。

-stats_enc_pre[:stream_specifier] path (output,per-stream) -stats_enc_post[:stream_specifier] path (output,per-stream) -stats_mux_pre[:stream_specifier] path (output,per-stream)

マッチするストリームについて、フレームごとのエンコード情報を path で指定したファイルへ書き込みます。

-stats_enc_pre は raw な映像・音声フレームがエンコードに送られる直前の情報を、-stats_enc_post はエンコード済みパケットが encoder から受け取られたときの情報を書き込みます。-stats_mux_pre はパケットがちょうど muxer に送られようとするときの情報を書き込みます。各フレームまたはパケットが、指定ファイルに 1 行を生成します。この行の形式は -stats_enc_pre_fmt / -stats_enc_post_fmt / -stats_mux_pre_fmt で制御します。

複数ストリームの統計を 1 つのファイルへ書き込む場合、異なるストリームに対応する行はインターリーブされます。このインターリーブの正確な順序は規定されておらず、同じオプションでも、プログラムの実行ごとに同じであることは保証されません。

-stats_enc_pre_fmt[:stream_specifier] format_spec (output,per-stream) -stats_enc_post_fmt[:stream_specifier] format_spec (output,per-stream) -stats_mux_pre_fmt[:stream_specifier] format_spec (output,per-stream)

-stats_enc_pre / -stats_enc_post / -stats_mux_pre で書き込まれる行の形式を指定します。

format_spec は {fmt} の形式のディレクティブを含められる文字列です。format_spec はバックスラッシュエスケープされます。リテラルの {、}、\ を出力に書くには、それぞれ \{、\}、\\ を使います。

fmt で与えるディレクティブは次のいずれかです。

fidx

出力ファイルのインデックスです。

sidx

ファイル内の出力ストリームのインデックスです。

n

フレーム番号です。エンコード前: これまでに encoder へ送られたフレーム数。エンコード後: これまでに encoder から受け取ったパケット数。mux 時: このストリームについてこれまでに muxer へ提出されたパケット数。

ni

入力フレーム番号です。この出力フレームまたはパケットに対応する入力フレーム(つまり decoder が出力したもの)のインデックスです。利用できない場合は -1 です。

tb

このフレーム/パケットのタイムスタンプが表されるタイムベースで、有理数 num/den です。encoder と muxer は異なるタイムベースを使う場合がある点に注意してください。

tbi

ptsi のタイムベースで、有理数 num/den です。ptsi が利用できる場合に利用でき、そうでなければ 0/1 です。

pts

フレームまたはパケットのプレゼンテーションタイムスタンプで、整数です。プレゼンテーション時刻を求めるにはタイムベースを掛けます。

ptsi

入力フレーム(ni を参照)のプレゼンテーションタイムスタンプで、整数です。プレゼンテーション時刻を求めるには tbi を掛けます。利用できない場合は (2^63 - 1 = 9223372036854775807) と表示されます。

t

フレームまたはパケットのプレゼンテーション時刻で、10 進数です。pts に tb を掛けたものに等しいです。

ti

入力フレーム(ni を参照)のプレゼンテーション時刻で、10 進数です。ptsi に tbi を掛けたものに等しいです。利用できない場合は inf と表示されます。

dts (packet)

パケットのデコードタイムスタンプで、整数です。プレゼンテーション時刻を求めるにはタイムベースを掛けます。

dt (packet)

フレームまたはパケットのデコード時刻で、10 進数です。dts に tb を掛けたものに等しいです。

sn (frame,audio)

これまでに encoder へ送られた音声サンプル数です。

samp (frame,audio)

フレーム内の音声サンプル数です。

size (packet)

エンコード済みパケットのサイズをバイト単位で表します。

br (packet)

現在のビットレートをビット毎秒で表します。

abr (packet)

これまでのストリーム全体の平均ビットレートをビット毎秒で表します。この時点で判定できない場合は -1 です。

key (packet)

パケットが keyframe を含む場合は文字「K」、そうでなければ文字「N」です。

packet とタグ付けされたディレクティブは、-stats_enc_post_fmt と -stats_mux_pre_fmt でのみ使えます。

frame とタグ付けされたディレクティブは、-stats_enc_pre_fmt でのみ使えます。

audio とタグ付けされたディレクティブは、音声ストリームでのみ使えます。

既定のフォーマット文字列は次のとおりです。

pre-encoding

{fidx} {sidx} {n} {t}

post-encoding

{fidx} {sidx} {n} {t}

将来、既定のフォーマット文字列の末尾に新しい項目が追加される可能性があります。形式が厳密に同じであることに依存するユーザーは、自分で形式を明示すべきです。

同じファイルへ書き込まれる異なるストリームの統計は、形式が異なる場合がある点に注意してください。

5.12 プリセットファイル

プリセットファイルは option=value のペアの並びを 1 行に 1 つずつ含み、コマンドラインで指定するのが面倒なオプションの並びを指定します。ハッシュ(「#」)文字で始まる行は無視され、コメントとして使います。例については FFmpeg のソースツリーの presets ディレクトリを参照してください。

プリセットファイルには ffpreset と avpreset の 2 種類があります。

5.12.1 ffpreset ファイル

ffpreset ファイルは vpreapresprefpre の各オプションで指定します。fpre オプションはプリセット名ではなくプリセットのファイル名を入力に取り、あらゆる種類のコーデックに使えます。vpreaprespre オプションでは、プリセットファイルで指定されたオプションが、プリセットオプションと同じ種類の現在選択中のコーデックに適用されます。

vpreaprespre の各プリセットオプションに渡す引数は、次の規則に従って使うプリセットファイルを特定します。

まず ffmpeg は arg.ffpreset という名前のファイルを、$FFMPEG_DATADIR(設定されていれば)、$HOME/.ffmpeg、構成時に定義された datadir(通常は PREFIX/share/ffmpeg)、または win32 では実行ファイルと並ぶ ffpresets フォルダ、の順に探します。たとえば引数が libvpx-1080p であれば、libvpx-1080p.ffpreset というファイルを探します。

そのようなファイルが見つからない場合、ffmpeg は codec_name-arg.ffpreset という名前のファイルを上記のディレクトリで探します。codec_name はプリセットファイルのオプションが適用されるコーデックの名前です。たとえば -vcodec libvpx で映像コーデックを選び -vpre 1080p を使うと、libvpx-1080p.ffpreset というファイルを探します。

5.12.2 avpreset ファイル

avpreset ファイルは pre オプションで指定します。ffpreset ファイルと似た働きをしますが、encoder 固有のオプションしか許しません。したがって、encoder を指定する option=value のペアは使えません。

pre オプションが指定されると、ffmpeg は接尾辞 .avpreset を持つファイルを、$AVCONV_DATADIR(設定されていれば)、$HOME/.avconv、構成時に定義された datadir(通常は PREFIX/share/ffmpeg)、の順に探します。

まず ffmpeg は codec_name-arg.avpreset という名前のファイルを上記のディレクトリで探します。codec_name はプリセットファイルのオプションが適用されるコーデックの名前です。たとえば -vcodec libvpx で映像コーデックを選び -pre 1080p を使うと、libvpx-1080p.avpreset というファイルを探します。

そのようなファイルが見つからない場合、ffmpeg は同じディレクトリで arg.avpreset という名前のファイルを探します。

5.13 vstats ファイル形式

-vstats-vstats_file オプションは、生成された映像出力に関する統計を含むファイルの生成を有効にします。

-vstats_version オプションは、生成されるファイルの形式バージョンを制御します。

バージョン 1 の形式は次のとおりです。

frame= FRAME q= FRAME_QUALITY PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s

バージョン 2 の形式は次のとおりです。

out= OUT_FILE_INDEX st= OUT_FILE_STREAM_INDEX frame= FRAME_NUMBER q= FRAME_QUALITYf PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s

各キーに対応する値は以下のとおりです。

avg_br

平均ビットレート。Kbits/s で表します。

br

ビットレート。Kbits/s で表します。

frame

エンコードされたフレームの番号です。

out

出力ファイルのインデックスです。

PSNR

ピーク信号対雑音比です。

q

フレームの品質です。

f_size

エンコード済みパケットのサイズをバイト数で表します。

s_size

ストリームサイズを KiB で表します。

st

出力ファイルのストリームインデックスです。

time

パケットの時刻です。

type

ピクチャタイプです。

エンコード統計を表示する別の方法として、-stats_enc 系オプションも参照してください。

6 例

6.1 映像・音声のキャプチャ

入力フォーマットとデバイスを指定すれば、ffmpeg は映像と音声を直接キャプチャできます。

ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg

OSS の代わりに ALSA 音声ソース(モノ入力、カード id 1)を使う場合:

ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg

ffmpeg を起動する前に、Gerd Knorr 作の xawtv のような TV ビューアで、正しい映像ソースとチャンネルを有効にしておく必要がある点に注意してください。また、標準のミキサーで音声録音レベルを正しく設定する必要もあります。

6.2 X11 のキャプチャ

ffmpeg で X11 ディスプレイをキャプチャするには次のようにします。

ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg

0.0 は X11 サーバの display.screen 番号で、DISPLAY 環境変数と同じです。

ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg

0.0 は X11 サーバの display.screen 番号で、DISPLAY 環境変数と同じです。10 はキャプチャの x オフセット、20 は y オフセットです。

6.3 映像・音声のファイルフォーマット変換

サポートされる任意のファイルフォーマットとプロトコルを ffmpeg の入力にできます。

例:

  • YUV ファイルを入力に使えます。
    ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
    

これは次のファイルを使います。

    /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
    /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...

Y ファイルは U・V ファイルの 2 倍の解像度を使います。これらはヘッダのない raw ファイルです。まともな映像デコーダならどれでも生成できます。ffmpeg が画像サイズを推測できない場合は -s オプションでサイズを指定する必要があります。

  • raw な YUV420P ファイルから入力できます。
    ffmpeg -i /tmp/test.yuv /tmp/out.avi
    

test.yuv は raw な YUV プラナーデータを含むファイルです。各フレームは Y プレーンに続いて、垂直・水平方向に半分の解像度の U・V プレーンで構成されます。

  • raw な YUV420P ファイルへ出力できます。

    ffmpeg -i mydivx.avi hugefile.yuv
    
  • 複数の入力ファイルと出力ファイルを設定できます。

    ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
    

音声ファイル a.wav と raw な YUV 映像ファイル a.yuv を MPEG ファイル a.mpg に変換します。

  • 音声と映像の変換を同時に行うこともできます。
    ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
    

a.wav をサンプリングレート 22050 Hz の MPEG オーディオに変換します。

  • 複数のフォーマットへ同時にエンコードし、入力ストリームから出力ストリームへのマッピングを定義できます。
    ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
    

a.wav を 64 kbits の a.mp2 と 128 kbits の b.mp2 に変換します。「-map file:index」は、出力ストリームの定義順に、各出力ストリームに使う入力ストリームを指定します。

  • 復号した VOB をトランスコードできます。
    ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi
    

これは典型的な DVD リッピングの例です。入力は VOB ファイル、出力は MPEG-4 映像と MP3 音声を持つ AVI ファイルです。このコマンドでは B フレームを使い、MPEG-4 ストリームを DivX5 互換にしています。GOP サイズは 300 で、29.97fps の入力映像に対して 10 秒ごとに 1 つのイントラフレームを意味します。さらに音声ストリームは MP3 でエンコードされるため、configure に --enable-libmp3lame を渡して LAME サポートを有効にする必要があります。このマッピングは、目的の音声言語を得る DVD トランスコードでとくに便利です。

注: サポートされる入力フォーマットを見るには ffmpeg -demuxers を使ってください。

  • 映像から画像を取り出したり、多数の画像から映像を作ったりできます。

映像から画像を取り出すには次のようにします。

    ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

これは映像から 1 秒あたり 1 フレームを取り出し、foo-001.jpeg、foo-002.jpeg などの名前のファイルへ出力します。画像は新しい WxH の値に合わせてリスケールされます。

取り出すフレーム数を限りたい場合は、上記のコマンドを -frames:v-t オプションと組み合わせるか、-ss と組み合わせて特定の時点から取り出しを始められます。

多数の画像から映像を作るには次のようにします。

    ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi

foo-%03d.jpeg という構文は、3 桁のゼロ埋めの 10 進数で連番を表すことを指定します。これは C の printf 関数がサポートするのと同じ構文ですが、通常の整数を受け付ける書式だけが使えます。

画像シーケンスを取り込むとき、-i は image2 固有の -pattern_type glob オプションを選ぶことで、シェルのようなワイルドカードパターン(グロブ)の内部展開もサポートします。

たとえば、グロブパターン foo-*.jpeg にマッチするファイル名から映像を作るには次のようにします。

    ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
  • 同じ種類のストリームを複数、出力に入れられます。
    ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut
    

結果の出力ファイル test12.nut には、入力ファイルの最初の 4 つのストリームが逆順で含まれます。

  • CBR の映像出力を強制するには次のようにします。

    ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
    
  • lmin、lmax、mblmin、mblmax の 4 つのオプションは「lambda」単位を使いますが、QP2LAMBDA 定数を使えば「q」単位から簡単に変換できます。

    ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
    

7 関連項目

ffmpeg-all, ffplay, ffprobe, ffmpeg-utils, ffmpeg-scaler, ffmpeg-resampler, ffmpeg-codecs, ffmpeg-bitstream-filters, ffmpeg-formats, ffmpeg-devices, ffmpeg-protocols, ffmpeg-filters

8 著者

FFmpeg の開発者たち。

著者の詳細については、プロジェクトの Git 履歴(https://git.ffmpeg.org/ffmpeg)を参照してください。たとえば FFmpeg のソースディレクトリで git log コマンドを実行するか、オンラインリポジトリ https://git.ffmpeg.org/ffmpeg を閲覧します。

特定コンポーネントのメンテナは、ソースコードツリーの MAINTAINERS ファイルに記載されています。

ホスティングは telepoint.bg の提供です。