FFmpeg フォーマットドキュメント
1 概要
このドキュメントは、libavformat ライブラリが提供する、サポート対象のフォーマット(muxer と demuxer)について説明します。
2 フォーマットオプション
libavformat ライブラリは、すべての muxer と demuxer に設定できる汎用的なグローバルオプションをいくつか提供します。さらに、各 muxer や demuxer は、そのコンポーネント固有の、いわゆるプライベートオプションをサポートする場合があります。
オプションは、FFmpeg ツールで -option value を指定するか、AVFormatContext のオプションに値を明示的に設定するか、あるいはプログラムから利用する場合は libavutil/opt.h API を使って設定できます。
サポートされるオプションの一覧は次のとおりです。
avioflags flags (input/output)
設定できる値:
‘direct’
バッファリングを抑制します。
probesize integer (input)
プローブのサイズをバイト単位で設定します。すなわち、ストリーム情報を取得するために解析するデータのサイズです。値を大きくすると、情報がストリーム中に分散している場合でも、より多くの情報を検出できますが、レイテンシは増加します。32 以上の整数でなければなりません。既定値は 5000000 です。
max_probe_packets integer (input)
codec をプローブする際にバッファリングするパケットの最大数を設定します。既定値は 2500 パケットです。
packetsize integer (output)
パケットサイズを設定します。
fflags flags
フォーマットフラグを設定します。一部は限られたフォーマットでのみ実装されています。
入力ファイルに対して設定できる値:
‘discardcorrupt’
破損したパケットを破棄します。
‘fastseek’
一部のフォーマットで、高速だが不正確なシークを有効にします。
‘genpts’
DTS があれば、欠落している PTS を生成します。
‘igndts’
PTS も設定されている場合、DTS を無視します。PTS が設定されている場合、DTS の値は NOPTS に設定されます。これは nofillin フラグが設定されているときは無視されます。
‘ignidx’
インデックスを無視します。
‘nobuffer’
入力ストリームの初期解析中にバッファリングが引き起こすレイテンシを抑制します。
‘nofillin’
正確に計算できるパケットフィールドの欠落値を埋めません。
‘noparse’
AVParser を無効にします。これには +nofillin も必要です。
‘sortdts’
出力パケットを DTS でインターリーブしようとします。現時点では、インデックスを持つ AVI でのみ利用できます。
出力ファイルに対して設定できる値:
‘autobsf’
出力フォーマットが必要とする bitstream フィルタを自動的に適用します。既定で有効です。
‘bitexact’
プラットフォーム・ビルド・時刻に依存しないデータのみを書き込みます。これにより、ファイルやデータのチェックサムが再現可能になり、プラットフォーム間で一致するようになります。主な用途は回帰テストです。
‘flush_packets’
パケットを即座に書き出します。
‘shortest’
最も短いストリームの終わりで mux を停止します。EOF より前に長いストリームがフラッシュされるのを避けるため、max_interleave_delta を増やす必要がある場合があります。
seek2any integer (input)
1 に設定すると、サポートされている場合に demuxer レベルで非キーフレームへのシークを許可します。既定値は 0 です。
analyzeduration integer (input)
入力をプローブするために何マイクロ秒を解析するかを指定します。値を大きくすると、より正確な情報を検出できますが、レイテンシは増加します。既定値は 5,000,000 マイクロ秒 = 5 秒です。
cryptokey hexadecimal string (input)
復号鍵を設定します。
indexmem integer (input)
タイムスタンプインデックスに使用する最大メモリ(ストリームあたり)を設定します。
rtbufsize integer (input)
リアルタイムフレームのバッファリングに使用する最大メモリを設定します。
fdebug flags (input/output)
特定のデバッグ情報を表示します。
設定できる値:
‘ts’
タイムスタンプ情報を表示します。
‘id3v2’
ID3v2 タグを含むファイルを demux する際に、ID3v2 フレームのデータを表示します。
max_delay integer (input/output)
mux または demux の最大遅延をマイクロ秒単位で設定します。
fpsprobesize integer (input)
fps をプローブするために使用するフレーム数を設定します。
audio_preload integer (output)
音声パケットをどれだけ早くインターリーブするかをマイクロ秒単位で設定します。
chunk_duration integer (output)
各チャンクのマイクロ秒数を設定します。
chunk_size integer (output)
各チャンクのサイズをバイト単位で設定します。
err_detect, f_err_detect flags (input)
エラー検出フラグを設定します。f_err_detect は非推奨であり、ffmpeg ツール経由でのみ使用してください。
設定できる値:
‘crccheck’
埋め込まれた CRC を検証します。
‘bitstream’
bitstream 仕様からの逸脱を検出します。
‘buffer’
不適切な bitstream 長を検出します。
‘explode’
軽微なエラーを検出した時点でデコードを中止します。
‘careful’
仕様に違反しているが実際には見かけないものをエラーとみなします。
‘compliant’
仕様に準拠していないものすべてをエラーとみなします。
‘aggressive’
まともなエンコーダなら行わないはずのものをエラーとみなします。
max_interleave_delta integer (output)
インターリーブのための最大バッファリング時間を設定します。時間はマイクロ秒で表され、既定値は 10000000(10 秒)です。
すべてのストリームを正しくインターリーブするため、libavformat は、出力ファイルに実際にパケットを書き込む前に、各ストリームに少なくとも 1 つのパケットが揃うまで待機します。一部のストリームが「疎」である(すなわち連続するパケットの間に大きなギャップがある)場合、これが過剰なバッファリングにつながることがあります。
このフィールドは、mux キュー内の最初のパケットと最後のパケットのタイムスタンプの最大差を指定します。この差を超えると、libavformat はすべてのストリームのパケットがキューに溜まっているかどうかにかかわらず、パケットを出力します。
0 に設定すると、libavformat は、バッファリングされたパケット間の最大タイムスタンプ差にかかわらず、各ストリームのパケットが揃うまでパケットのバッファリングを続けます。
use_wallclock_as_timestamps integer (input)
1 に設定すると、ウォールクロックをタイムスタンプとして使用します。既定値は 0 です。
avoid_negative_ts integer (output)
設定できる値:
‘make_non_negative’
タイムスタンプをシフトして非負にします。なお、これは先頭の負のタイムスタンプにのみ影響し、非単調な負のタイムスタンプには影響しません。
‘make_zero’
最初のタイムスタンプが 0 になるようにタイムスタンプをシフトします。
‘auto (default)’
対象フォーマットが必要とする場合にシフトを有効にします。
‘disabled’
タイムスタンプのシフトを無効にします。
シフトが有効な場合、すべての出力タイムスタンプが同じ量だけシフトされます。音声・映像・字幕のずれや相対的なタイムスタンプ差は、シフトしなかった場合と同様に保持されます。
skip_initial_bytes integer (input)
ヘッダーとフレームを読み込む前にスキップするバイト数を設定します。既定値は 0 です。
correct_ts_overflow integer (input)
1 に設定すると、単一のタイムスタンプオーバーフローを補正します。既定値は 1 です。
flush_packets integer (output)
各パケットの後に、基盤となる I/O ストリームをフラッシュします。既定値は -1(auto)で、基盤となるプロトコルが判断することを意味します。1 で有効になり、レイテンシを減らす効果があります。0 で無効になり、場合によっては IO スループットが向上することがあります。
output_ts_offset offset (output)
出力時刻オフセットを設定します。
offset は時間長の指定でなければなりません。(ffmpeg-utils) ffmpeg-utils(1) マニュアルの「Time duration」セクション を参照してください。
このオフセットは muxer によって出力タイムスタンプに加算されます。
正のオフセットを指定すると、対応するストリームが offset で指定した時間長だけ遅延します。既定値は 0 で、オフセットを適用しないことを意味します。
format_whitelist list (input)
許可する demuxer の「,」区切りリストです。既定ではすべて許可されます。
dump_separator string (input)
コマンドラインに出力されるストリームパラメータの各フィールドを区切るために使うセパレータです。たとえば、フィールドを改行とインデントで区切るには:
ffprobe -dump_separator "
" -i ~/videos/matrixbench_mpeg2.mpg
max_streams integer (input)
ストリームの最大数を指定します。これは、ストリーム数が多すぎてリソースを過度に消費するファイルを拒否するために使えます。
skip_estimate_duration_from_pts bool (input)
ファイル末尾の PTS の追加プローブが必要な場合に、入力の長さの推定をスキップします。現時点では MPEG-PS と MPEG-TS に適用されます。
duration_probesize integer (input)
ファイル末尾の PTS の追加プローブが実際に必要となる場合(現時点では MPEG-PS と MPEG-TS)に、入力の長さを推定するためのプローブサイズをバイト単位で設定します。これは、より正確な長さのプローブそのものに関心のあるユーザーや、たとえば concat demuxer の利用を通じて間接的にそれを必要とするユーザーを対象としています。典型的なユースケースは、高ビットレート・高い映像バッファリングで、映像と音声の終端の PTS が似たかたちで終わる MPEG-TS の CBR です。このようなシナリオでは、最後の映像パケットと最後の音声パケットの間の物理的なギャップが大きいため、映像ストリームの長さを取得するには多くのバイトを読む必要があります。もう 1 つのユースケースは、フレームの並べ替えにより、既定のプローブ動作がストリームの最後ではない単一の映像フレームにしか到達せず、長さが正確にならない場合です。このオプションを設定すると、プローブサイズが固定されるため、小さなファイルでも性能に影響します。既定の動作は、汎用的なトレードオフであり、大部分は適応的ですが、ストリームの長さを取得するためにプローブサイズを無制限に拡張することはありません。1 以上の整数か、既定動作を表す 0 でなければなりません。
strict, f_strict integer (input/output)
標準にどれだけ厳密に従うかを指定します。f_strict は非推奨であり、ffmpeg ツール経由でのみ使用してください。
設定できる値:
‘very’
より古く厳格な版の仕様、または参照ソフトウェアに厳密に準拠します。
‘strict’
結果がどうであれ、仕様のすべての事項に厳密に準拠します。
‘normal’ ‘unofficial’
非公式な拡張を許可します。
‘experimental’
標準化されていない実験的なもの、および実験的(未完成/作業中/十分にテストされていない)なデコーダやエンコーダを許可します。注意: 実験的なデコーダはセキュリティ上のリスクをもたらす可能性があります。信頼できない入力のデコードにこれを使用しないでください。
2.1 フォーマットのストリーム指定子
フォーマットのストリーム指定子を使うと、特定のプロパティに一致する 1 つ以上のストリームを選択できます。
ストリーム指定子の正確なセマンティクスは、libavformat/avformat.h ヘッダーで宣言されている avformat_match_stream_specifier() 関数によって定義され、(ffmpeg) ffmpeg(1) マニュアルの「Stream specifiers」セクション に記載されています。
3 Demuxer
Demuxer は、特定の種類のファイルからマルチメディアストリームを読み込める、FFmpeg 内の構成可能な要素です。
FFmpeg のビルドを構成すると、サポートされているすべての demuxer が既定で有効になります。利用可能なものは、configure オプション --list-demuxers で一覧表示できます。
configure オプション --disable-demuxers ですべての demuxer を無効にし、--enable-demuxer=DEMUXER オプションで個別の demuxer を選択的に有効にしたり、--disable-demuxer=DEMUXER オプションで無効にしたりできます。
ff* ツールの -demuxers オプションは、有効な demuxer の一覧を表示します。有効な demuxer と muxer をまとめた一覧を見るには -formats を使用します。
現在利用可能な demuxer の一部について、以下で説明します。
3.1 aa
Audible Format 2、3、4 の demuxer です。
この demuxer は、Audible Format 2、3、4(.aa)のファイルを demux するために使用します。
3.2 aac
Raw Audio Data Transport Stream AAC の demuxer です。
この demuxer は、単一の AAC ストリームと、その中にある ID3v1/2 または APE タグを含む ADTS 入力を demux するために使用します。
3.3 apng
Animated Portable Network Graphics の demuxer です。
この demuxer は、APNG ファイルを demux するために使用します。PNG シグネチャを除く、最初の fcTL チャンクまで(これを含まない)のすべてのヘッダーは extradata として伝送されます。その後、フレームは 2 つの fcTL チャンクの間、または最後の fcTL チャンクと IEND チャンクの間にあるすべてのチャンクとして分割されます。
-ignore_loop bool
設定すると、ファイル内の loop 変数を無視します。既定で有効です。
-max_fps int
1 秒あたりのフレーム数で表した最大フレームレートです。既定値の 0 では制限を課しません。
-default_fps int
ファイルに指定がない場合の、1 秒あたりのフレーム数で表した既定のフレームレートです(0 は可能な限り高速を意味します)。既定値は 15 です。
3.4 asf
Advanced Systems Format の demuxer です。
この demuxer は、ASF ファイルと MMS ネットワークストリームを demux するために使用します。
-no_resync_search bool
特定のオプションのスタートコードを探して再同期しようとしません。
3.5 concat
仮想的な連結スクリプトの demuxer です。
この demuxer は、テキストファイルからファイルの一覧やその他のディレクティブを読み込み、それらをあたかもすべてのパケットがまとめて mux されたかのように、次々と demux します。
ファイル内のタイムスタンプは、最初のファイルが 0 から始まり、各ファイルが前のファイルの終わったところから始まるように調整されます。これはグローバルに行われるため、すべてのストリームの長さが完全に同じでない場合はギャップが生じることがあります。
すべてのファイルは同じストリーム(同じ codec、同じタイムベースなど)を持っていなければなりません。
各ファイルの長さは、次のファイルのタイムスタンプを調整するために使われます。長さが正しくない場合(たとえばビットレートから計算された場合や、ファイルが切り詰められている場合)、アーティファクトを引き起こすことがあります。duration ディレクティブを使って、各ファイルに格納された長さを上書きできます。
3.5.1 構文
スクリプトは拡張 ASCII のテキストファイルで、1 行に 1 つのディレクティブを記述します。空行、先頭の空白、「#」で始まる行は無視されます。次のディレクティブが認識されます。
file path
読み込むファイルのパスです。特殊文字とスペースはバックスラッシュまたはシングルクォートでエスケープしなければなりません。
これ以降のファイル関連のディレクティブはすべて、そのファイルに適用されます。
ffconcat version 1.0
スクリプトの種類とバージョンを識別します。
FFmpeg にフォーマットを自動認識させるには、このディレクティブをスクリプトの最初の行に、まさにこのとおり(余分なスペースやバイトオーダーマークなしで)記述しなければなりません。
duration dur
ファイルの長さです。この情報はファイルから取得できますが、ここで指定したほうが効率的なことがあり、またファイルからの情報が取得できない、もしくは正確でない場合に役立ちます。
すべてのファイルに長さが設定されていれば、連結された動画全体をシークできます。
inpoint timestamp
ファイルの In point です。demuxer がファイルを開くと、即座に指定されたタイムスタンプにシークします。In point ですべてのストリームが正しく提示できるようにシークが行われます。
このディレクティブは intra フレーム codec で最も効果的に機能します。non-intra フレームの codec では通常、実際の In point より前に余分なパケットが得られ、デコード結果にも In point より前のフレームが含まれる可能性が高いためです。
各ファイルについて、ファイルの In point より前のパケットは、計算されたファイルの開始タイムスタンプより小さいタイムスタンプ(最初のファイルの場合は負)を持ち、ファイルの長さは(duration ディレクティブで指定されていなければ)指定された In point に基づいて短縮されます。
指定された In point より前のパケットが存在しうるため、連結された 2 つのファイル間でパケットのタイムスタンプが重なることがあります。
outpoint timestamp
ファイルの Out point です。demuxer がいずれかのストリームで指定されたデコードタイムスタンプに達すると、それをファイル終端の状態として扱い、すべてのストリームの現在のパケットと残りのパケットをスキップします。
Out point は排他的です。つまり demuxer は、Out point 以上のデコードタイムスタンプを持つパケットを出力しません。
このディレクティブは、intra フレーム codec、およびすべてのストリームが密にインターリーブされたフォーマットで最も効果的に機能します。non-intra フレームの codec では通常、Out point より後の presentation timestamp を持つ追加パケットが得られるため、デコード結果にも Out point より後のフレームが含まれる可能性が高くなります。ストリームが密にインターリーブされていない場合、Out point より前のすべてのストリームのパケットが揃わず、最も早いストリームしか Out point までデコードできないことがあります。
ファイルの長さは(duration ディレクティブで指定されていなければ)指定された Out point に基づいて短縮されます。
file_packet_metadata key=value
ファイルのパケットのメタデータです。指定したメタデータは、ファイルの各パケットに設定されます。このディレクティブを複数回指定して、複数のメタデータエントリを追加できます。このディレクティブは非推奨です。代わりに file_packet_meta を使用してください。
file_packet_meta key value
ファイルのパケットのメタデータです。指定したメタデータは、ファイルの各パケットに設定されます。このディレクティブを複数回指定して、複数のメタデータエントリを追加できます。
option key value
ファイルへのアクセス・オープン・プローブのためのオプションです。複数回記述できます。
stream
仮想ファイル内にストリームを導入します。これ以降のストリーム関連のディレクティブはすべて、最後に導入されたストリームに適用されます。サブファイル内の一致するストリームを識別できるようにするには、一部のストリームプロパティを設定する必要があります。スクリプト内でストリームが 1 つも定義されていない場合は、最初のファイルのストリームがコピーされます。
exact_stream_id id
ストリームの id を設定します。このディレクティブが与えられると、サブファイル内の対応する id を持つ文字列が使用されます。これは、ストリームの順序が信頼できない MPEG-PS(VOB)ファイルで特に役立ちます。
stream_meta key value
ストリームのメタデータです。複数回記述できます。
stream_codec value
ストリームの codec です。
stream_extradata hex_string
ストリームの extradata です。16 進数でエンコードされます。
chapter id start end
チャプターを追加します。id は一意の識別子で、できれば小さく連続した値が望ましいです。
3.5.2 オプション
この demuxer は次のオプションを受け付けます。
safe
1 に設定すると、安全でないファイルパスやディレクティブを拒否します。ファイルパスは、プロトコル指定を含まず、相対パスで、すべての構成要素がポータブル文字集合の文字(英字、数字、ピリオド、アンダースコア、ハイフン)のみからなり、構成要素の先頭にピリオドがない場合に安全とみなされます。
0 に設定すると、任意のファイル名が受け入れられます。
既定値は 1 です。
auto_convert
1 に設定すると、ストリームを連結可能にするために、パケットデータに対して自動変換を試みます。既定値は 1 です。
現時点で唯一の変換は、MP4 フォーマット内の H.264 ストリームに h264_mp4toannexb bitstream フィルタを追加することです。これは特に解像度の変化がある場合に必要です。
segment_time_metadata
1 に設定すると、すべてのパケットに lavf.concat.start_time と lavf.concat.duration というパケットメタデータの値が含まれます。これらは、連結された出力における各ファイルセグメントの start_time と duration をマイクロ秒で表したものです。duration メタデータは、concat ファイルから判明している場合にのみ設定されます。既定値は 0 です。
3.5.3 例
-
絶対ファイル名を使い、コメントを入れる場合:
# my first filename file /mnt/share/file-1.wav # my second filename including whitespace file '/mnt/share/file 2.wav' # my third filename including whitespace plus single quote file '/mnt/share/file 3'\''.wav' -
入力フォーマットの自動プローブを許可し、安全なファイル名を使い、最初のファイルの長さを設定する場合:
ffconcat version 1.0 file file-1.wav duration 20.0 file subdir/file-2.wav
3.6 dash
Dynamic Adaptive Streaming over HTTP の demuxer です。
この demuxer は、マニフェスト内で見つかったすべての AVStream を提示します。AVStream に discard フラグを設定することで、呼び出し側は実際に受信するストリームを決められます。各ストリームは <Representation> の id と bandwidth プロパティを、それぞれ "id" と "variant_bitrate" という名前のメタデータキーとして反映します。
3.6.1 オプション
この demuxer は次のオプションを受け付けます。
cenc_decryption_key
ISO Common Encryption(CENC/AES-128 CTR; ISO/IEC 23001-7)で暗号化されたファイルを復号するための、16 進数で表した既定の 16 バイト鍵です。
cenc_decryption_keys
ISO Common Encryption(CENC/AES-128 CTR; ISO/IEC 23001-7)で暗号化されたファイルを復号するための、16 バイトの鍵 ID => 16 バイトの鍵(いずれも 16 進数)の辞書です。
3.7 dvdvideo
libdvdnav と libdvdread を利用した DVD-Video の demuxer です。
DVD タイトル、具体的には順次再生される PGC を、変換パイプラインに直接取り込めます。背景の映像や音声といったメニューのアセットも、メニューの座標が与えられれば(ベストエフォートで)demux できます。
ブロックデバイス(DVD ドライブ)、ISO ファイル、ディレクトリ構造を受け付けます。これらの入力のいずれかの前に -f dvdvideo を付けて有効にします。
この demuxer はいかなる復号コードも持ちません。暗号化された DVD の扱いは自己責任であり、この件についてのサポートは期待しないでください。
実際の再生は libdvdnav が、構造の解析は libdvdread が担います。FFmpeg は GPL ライブラリのサポートを利用可能な状態でビルドされ、かつ configure スイッチ --enable-libdvdnav と --enable-libdvdread が必要です。
希望する「タイトル番号」または正確な PGC/PG 座標のいずれかを指定する必要があります。多くのオープンソースの DVD プレーヤーやツールが、この情報の取得を助けてくれます。指定しない場合、demuxer は既定でタイトル 1 になり、これは多くのディスクで機能します。ただし、このフォーマットの柔軟性のため、手動で確認することをおすすめします。風変わりにオーサリングされていたり、無効なヘッダーを持っていたりするディスクは数多く存在します。
入力が実際の DVD ドライブの場合、一部のドライブはディスクの不良セクタの読み取りに静かに失敗し、代わりにランダムなビット(事実上の破損データ)を返すことがある点に注意してください。これは経年劣化したディスクや劣化(ディスクローット)したディスクで特に顕著です。破損を検出するには、2 回目のパスと整合性チェックが必要になります。これは FFmpeg の問題ではありません。
3.7.1 背景
DVD-Video は、従来の意味で直接アクセスできる線形のコンテナフォーマットではありません。代わりに、ヘッダーのない VOB ファイルに格納された、注意深く mux された MPEG-PS ストリームの、複雑かつプログラム的な再生を可能にします。エンドユーザーにとって、これらのストリームは単に「タイトル」として知られていますが、実際の論理的な再生順序は、タイトル内の 1 つ以上の「PGC」(Program Group Chain)によって定義されます。PGC はさらに、複数の「PG」(Program)から構成されます。PG は実際の映像セグメントであり、典型的な本編映像では順番に並んでいます。PGC の構造は、ストリームのレイアウトやメタデータとともに、解析が必要な IFO ファイルに格納されています。PGC は、わかりやすく言えばプレイリストのようなものと考えられます。
実際の DVD プレーヤーは、メニューを介したユーザーの GUI 操作と、内部 VM に依存して demux の方向を制御します。一般にユーザーは、(メニューを介して)操作するか、自動的に目的の PGC へリダイレクトされます。この過程とその後の再生中、DVD プレーヤーの内部 VM は状態を保持し、再生中に別のセクタへのジャンプを生み出しうる命令を実行します。これが libdvdnav が関与する理由です。多くの場合、ディスク上の MPEG-PS のかたまり(VOB)を線形に読み込むだけでは、正しい順序を生成するのに十分ではないからです。
ここでは触れない DVD 構造(長大な話題)が他にも数多く存在します。特に NAV パケットは、正確なタイミングを構築するためにこの demuxer が処理しますが、ストリームとしては出力しません。概要をよく理解するには、次を参照してください: https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures
3.7.2 オプション
この demuxer は次のオプションを受け付けます。
title int
再生するタイトル番号です。pgc と pg が設定されていない場合は設定する必要があります。メニューには適用されません。既定値は 0(auto)で、現時点では最初の利用可能なタイトル(タイトル 1)のみを選択し、その意味合いをユーザーに通知します。
chapter_start int
開始するチャプター、すなわち PTT(part-of-title)の番号です。メニューには適用されません。既定値は 1 です。
chapter_end int
終了するチャプター、すなわち PTT(part-of-title)の番号です。メニューには適用されません。既定値は 0 で、これは可能な限り最後のチャプターで終了することを表す特別な値です。
angle int
映像のアングル番号です。これは本質的に、VOB 内にインターリーブされた代替フレームから構成される追加の映像ストリームを指します。メニューには適用されません。既定値は 1 です。
region int
再生に使用するリージョンコードです。一部のディスクは、異なるリージョンで特定のアングルを既定再生するためにこれを使う場合があります。このオプションは、入力として使用した場合でも、実際の DVD ドライブのリージョンコードには影響しません。メニューには適用されません。既定値は 0、「world」です。
menu bool
タイトルを再生する代わりに、メニューのアセットを demux します。メニューの正確な座標(menu_lu、menu_vts、pgc、pg)が必要です。既定値は false です。
menu_lu int
demux するメニューの言語です。DVD では、メニューは言語ごとにグループ化されています。既定値は 1、最初の言語ユニットです。
menu_vts int
メニューが存在する VTS、または VMG メニュー(ルートレベル)の場合は 0 です。既定値は 1、最初の VTS のメニューです。
pgc int
pg と組み合わせて、再生を開始するエントリ PGC です。title を設定する代わりに使用します。現時点ではチャプターマーカーはサポートされていません。メニューでは明示的に設定する必要があります。既定値は 0 で、title の値から自動的に解決します。
pg int
pgc と組み合わせて、再生を開始するエントリ PG です。title を設定する代わりに使用します。現時点ではチャプターマーカーはサポートされていません。既定値は 1、PGC の最初の PG です。
preindex bool
正確なチャプター(PTT)マーカーと長さの計測を行うために有効にします。これには、NAV パケットからチャプターマーカーのタイムスタンプをインデックス化するための、低速な 2 回目のパス読み込みが必要です。これは実際の光学ドライブにとっては理想的でない追加作業です。ハードドライブに保存した DVD 構造のバックアップに対してこのオプションを使うほうが、推奨されかつ高速です。pgc および pg とは併用できません。既定値は 0、false です。
trim bool
先頭からパディングセル(すなわち 1 秒より短いセル)をスキップします。PGC の先頭に埋め草セグメントを持つディスクは数多く存在し、その多くは実際の DVD プレーヤーのバッファリング速度を制御するためのジャンクデータで、それ以外に実質的な意味を持ちません。メニューには適用されません。既定値は 1、true です。
3.7.3 例
-
指定した DVD 構造からタイトル 3 を開く:
ffmpeg -f dvdvideo -title 3 -i <path to DVD> ... -
指定した DVD 構造から、タイトル 1 のチャプター 3〜6 を開く:
ffmpeg -f dvdvideo -chapter_start 3 -chapter_end 6 -title 1 -i <path to DVD> ... -
指定した DVD 構造から、タイトル 1 のチャプター 5 のみを開く:
ffmpeg -f dvdvideo -chapter_start 5 -chapter_end 5 -title 1 -i <path to DVD> ... -
VTS 1、PGC 1、PG 1 始まりで、言語 1 のメニューを demux する:
ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ...
3.8 ea
Electronic Arts Multimedia フォーマットの demuxer です。
このフォーマットは、Electronic Arts の各種ゲームで使用されています。
3.8.1 オプション
merge_alpha bool
通常、VP6 のアルファチャンネルは(存在する場合)副次的な映像ストリームとして返されますが、このオプションを設定すると、通常の映像に加えてアルファチャンネルを含む単一の映像ストリームを demuxer に返させることができます。
3.9 imf
Interoperable Master Format の demuxer です。
この demuxer は、SMPTE ST 2067-2 に規定された IMF Composition 内で見つかった音声・映像ストリームを提示します。
ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ...
-assetmaps が指定されていない場合、demuxer は CPL と同じディレクトリにある ASSETMAP.xml というファイルを探します。
3.10 flv, live_flv, kux
Adobe Flash Video Format の demuxer です。
この demuxer は、FLV ファイルと RTMP ネットワークストリームを demux するために使用します。ライブのネットワークストリームの場合、フォーマットを強制するなら、タイムスタンプの不連続を切り抜けるために flv の代わりに live_flv オプションを使えます。KUX は、Youku プラットフォームで使われる flv の変種です。
ffmpeg -f flv -i myfile.flv ...
ffmpeg -f live_flv -i rtmp://<any.server>/anything/key ....
-flv_metadata bool
onMetaData 配列の内容に従ってストリームを割り当てます。
-flv_ignore_prevtag bool
直前のタグのサイズの値を無視します。
-flv_full_metadata bool
onMetadata のすべての内容を出力します。
3.11 gif
Animated GIF の demuxer です。
次のオプションを受け付けます。
min_delay
フレーム間の有効な最小遅延を 1/100 秒単位で設定します。範囲は 0〜6000 です。既定値は 2 です。
max_gif_delay
フレーム間の有効な最大遅延を 1/100 秒単位で設定します。範囲は 0〜65535 です。既定値は 65535(約 11 分)で、仕様で許される最大値です。
default_delay
フレーム間の既定の遅延を 1/100 秒単位で設定します。範囲は 0〜6000 です。既定値は 10 です。
ignore_loop
GIF ファイルは、一定回数(または無限)ループするための情報を含むことができます。ignore_loop を 1 に設定すると、入力のループ設定が無視され、ループは行われません。0 に設定すると、ループが行われ、GIF に従った回数だけ繰り返されます。既定値は 1 です。
たとえば overlay フィルタを使って、無限にループする GIF を別の動画の上に重ねるには:
ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv
なお上記の例では、出力動画を最も短い入力ファイルの長さで終わらせるために overlay フィルタの shortest オプションを使っています。この例では GIF が無限にループするため、最も短い入力は input.mp4 になります。
3.12 hls
HLS demuxer
Apple HTTP Live Streaming の demuxer です。
この demuxer は、すべての variant stream のすべての AVStream を提示します。id フィールドにはビットレートの variant のインデックス番号が設定されます。AVStream に discard フラグを設定することで(ffplay では「a」または「v」を押すことで)、呼び出し側は実際に受信する variant stream を決められます。ストリームが属する variant の合計ビットレートは、"variant_bitrate" という名前のメタデータキーで利用できます。
次のオプションを受け付けます。
live_start_index
ライブストリームを開始するセグメントインデックスです(負の値は末尾からの位置です)。
prefer_x_start
プレイリストに #EXT-X-START があれば、live_start_index の代わりにそれを優先して使用します。
allowed_extensions
hls がアクセスを許可されるファイル拡張子の「,」区切りリストです。
extension_picky
許可されていない拡張子のプローブをブロックします。また、mpegts(常に許可されます)を除き、利用可能なすべてのセグメントがフォーマットと一致する拡張子を持つことを要求します。拡張子に依存するのではなく、ホワイトリストを正しく設定することをおすすめします。既定で有効です。
max_reload
不十分なリストの再読み込みを試みる最大回数です。既定値は 1000 です。
m3u8_hold_counters
新しいセグメントがないまま m3u8 が更新されるときに、これを読み込む最大回数です。既定値は 1000 です。
http_persistent
永続的な HTTP 接続を使用します。HTTP ストリームにのみ適用されます。既定で有効です。
http_multiple
HTTP セグメントのダウンロードに複数の HTTP 接続を使用します。HTTP/1.1 サーバーでは既定で有効です。
http_seekable
HTTP セグメントのダウンロードに HTTP の partial request を使用します。0 = 無効、1 = 有効、-1 = auto、既定値は auto です。
seg_format_options
: で区切った key=value ペアのリストを使って、メディアセグメントの demuxer のオプションを設定します。
seg_max_retry
エラー時にセグメントを再読み込みする最大回数です。ネットワークエラー時のセグメントスキップが望ましくない場合に役立ちます。既定値は 0 です。
3.13 image2
画像ファイル用の demuxer です。
この demuxer は、パターンで指定された画像ファイルのリストから読み込みを行います。パターンの構文と意味は、オプション pattern_type で指定します。
パターンには、ファイルに含まれる画像のフォーマットを自動判別するためのサフィックスを付けられます。
サイズ、pixel format、各画像のフォーマットは、シーケンス内のすべてのファイルで同一でなければなりません。
この demuxer は次のオプションを受け付けます。
framerate
映像ストリームのフレームレートを設定します。既定値は 25 です。
loop
1 に設定すると入力をループします。既定値は 0 です。
pattern_type
指定されたファイル名の解釈に使うパターンの種類を選択します。
pattern_type は次のいずれかの値を受け付けます。
none
パターンマッチングを無効にします。したがって映像には指定した画像のみが含まれます。複数の画像からシーケンスを作りたくない場合や、ファイル名に特殊なパターン文字が含まれうる場合は、このオプションを使うとよいでしょう。
sequence
シーケンスパターン型を選択します。連番で索引付けされたファイルのシーケンスを指定するのに使います。
シーケンスパターンには文字列 "%d" または "%0Nd" を含められます。これは、パターンに一致する各ファイル名で連番を表す文字の位置を指定します。"%d0Nd" の形式を使った場合、各ファイル名で番号を表す文字列は 0 埋めされ、N は番号を表す 0 埋めの桁数の合計になります。リテラル文字 ’%’ は文字列 "%%" でパターン中に指定できます。
シーケンスパターンに "%d" または "%0Nd" が含まれる場合、パターンで指定されるファイルリストの最初のファイル名には、start_number 以上 start_number+start_number_range-1 以下の番号が含まれていなければならず、以降の番号はすべて連続している必要があります。
例えば、パターン "img-%03d.bmp" は img-001.bmp, img-002.bmp, ..., img-010.bmp などの形式のファイル名のシーケンスに一致します。パターン "i%%m%%g-%d.jpg" は i%m%g-1.jpg, i%m%g-2.jpg, ..., i%m%g-10.jpg などの形式のファイル名のシーケンスに一致します。
なお、パターンは必ずしも "%d" や "%0Nd" を含む必要はありません。例えば単一の画像ファイル img.jpeg を変換するには、次のコマンドを使えます。
ffmpeg -i img.jpeg img.png
glob
glob ワイルドカードのパターン型を選択します。
パターンは glob() パターンと同様に解釈されます。これは libavformat が globbing サポート付きでコンパイルされている場合のみ選択できます。
既定値は sequence です。
pixel_format
読み込む画像の pixel format を設定します。指定しない場合、pixel format はシーケンス内の最初の画像ファイルから推測されます。
start_number
画像ファイルパターンに一致するファイルのうち、読み込みを開始する索引を設定します。既定値は 0 です。
start_number_range
シーケンス内で最初の画像ファイルを探す際に、start_number を起点としてチェックする索引の範囲を設定します。既定値は 5 です。
ts_from_file
1 に設定すると、フレームのタイムスタンプを画像ファイルの更新時刻に設定します。なお、タイムスタンプの単調性は保証されません。画像はこのオプションを使わない場合と同じ順序で並びます。既定値は 0 です。2 に設定すると、フレームのタイムスタンプを画像ファイルの更新時刻にナノ秒精度で設定します。
video_size
読み込む画像の映像サイズを設定します。指定しない場合、映像サイズはシーケンス内の最初の画像ファイルから推測されます。
export_path_metadata
1 に設定すると、入力で見つかったメタデータに 2 つの追加フィールドを加え、他のフィルタからも利用できるようにします(例は drawtext フィルタを参照)。既定値は 0 です。追加フィールドは以下のとおりです。
lavf.image2dec.source_path
読み込み中の入力ファイルのフルパスに対応します。
lavf.image2dec.source_basename
読み込み中のファイル名に対応します。
3.13.1 Examples
-
ファイルシーケンス img-001.jpeg, img-002.jpeg, ... の画像から、入力フレームレートを毎秒 10 フレームと仮定して
ffmpegで映像を作成します。ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv -
上と同様ですが、シーケンス中の索引 100 のファイルから読み始めます。
ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv -
"*.png" の glob パターンに一致する画像、すなわち ".png" サフィックスで終わるすべてのファイルを読み込みます。
ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
3.14 libgme
Game Music Emu ライブラリは、ビデオゲーム音楽ファイル用エミュレータの集合体です。
詳細は https://bitbucket.org/mpyne/game-music-emu/overview を参照してください。
次のオプションを受け付けます。
track_index
demux するトラックの索引を設定します。この demuxer は 1 トラックのみエクスポートできます。トラックの索引は 0 から始まります。既定では最初のトラックを選びます。トラック数は tracks メタデータエントリとしてエクスポートされます。
sample_rate
エクスポートするトラックのサンプリングレートを設定します。範囲は 1000 から 999999 です。既定値は 44100 です。
max_size (bytes)
この demuxer はファイル全体をメモリにバッファリングします。この値を調整して最大バッファサイズを設定します。これは読み込めるファイルサイズの上限としても機能します。既定値は 50 MiB です。
3.15 libmodplug
ModPlug ベースのモジュール demuxer
https://github.com/Konstanty/libmodplug を参照してください。
2 チャンネル 16 ビット 44.1 kHz の音声ストリームを 1 つエクスポートします。任意で、pal8 の 16 色映像ストリームを、メタデータの描画あり/なしでエクスポートできます。
次のオプションを受け付けます。
noise_reduction
単純なローパスフィルタを適用します。1(オン)または 0(オフ)を指定できます。既定値は 0 です。
reverb_depth
リバーブの量を設定します。範囲は 0-100 です。既定値は 0 です。
reverb_delay
ディレイをミリ秒で設定します。40-250 ms にクランプされます。既定値は 0 です。
bass_amount
XBass あるいは megabass とも呼ばれる低音拡張を適用します。範囲は 0(静か)から 100(大きい)です。既定値は 0 です。
bass_range
低音域のカットオフ、すなわち上限を設定します。範囲は 10-100 Hz です。既定値は 0 です。
surround_depth
Dolby Pro-Logic サラウンド効果を適用します。範囲は 0(静か)から 100(強い)です。既定値は 0 です。
surround_delay
サラウンドのディレイをミリ秒で設定します。5-40 ms にクランプされます。既定値は 0 です。
max_size
この demuxer はファイル全体をメモリにバッファリングします。この値を調整して最大バッファサイズを設定します。これは読み込めるファイルサイズの上限としても機能します。範囲は 0 から 100 MiB です。0 はバッファサイズの制限を撤廃します(非推奨)。既定値は 5 MiB です。
video_stream_expr
生成される映像ストリームに色を割り当てるために eval API で評価される文字列です。使用できる変数は x, y, w, h, t, speed, tempo, order, pattern, row です。
video_stream
映像ストリームを生成します。1(オン)または 0(オフ)を指定できます。既定値は 0 です。
video_stream_w
映像フレームの幅を ’chars’ 単位で設定します。1 char は 8 ピクセルを表します。範囲は 20-512 です。既定値は 30 です。
video_stream_h
映像フレームの高さを ’chars’ 単位で設定します。1 char は 8 ピクセルを表します。範囲は 20-512 です。既定値は 30 です。
video_stream_ptxt
映像ストリームにメタデータを描画します。speed, tempo, order, pattern, row, ts(時間、ミリ秒)を含みます。1(オン)または 0(オフ)を指定できます。既定値は 1 です。
3.16 libopenmpt
libopenmpt ベースのモジュール demuxer
詳細は https://lib.openmpt.org/libopenmpt/ を参照してください。
一部のファイルには複数のサブソング(トラック)があり、これは subsong オプションで設定できます。
次のオプションを受け付けます。
subsong
サブソングの索引を設定します。’all’、’auto’、またはサブソングの索引のいずれかを指定できます。サブソングの索引は 0 から始まります。既定値は ’auto’ です。
既定値では libopenmpt に選択を委ねます。
layout
チャンネルレイアウトを設定します。有効な値は 1、2、4 チャンネルのレイアウトです。既定値は STEREO です。
sample_rate
libopenmpt が出力するサンプリングレートを設定します。範囲は 1000 から INT_MAX です。既定値は 48000 です。
3.17 mcc
MacCaption MCC ファイル用の demuxer で、MCC バージョン 1.0 と 2.0 をサポートします。MCC ファイルには VANC データが格納され、クローズドキャプション(EIA-608 と CEA-708)、補助タイムコード、パンスキャンデータなどを含められます。既定では、後方互換性のために、MCC demuxer は EIA-608 と CEA-708 のクローズドキャプションのみを抽出して EIA_608 ストリームを返し、それ以外の VANC データはすべて無視します。-eia608_extract 0 を設定すると、すべての VANC データを SMPTE_436M_ANC データストリームとして返すように変更できます。
3.17.1 Examples
- MCC ファイルを Scenarist(SCC)形式に変換します。
ffmpeg -i CC.mcc -c:s copy CC.scc
なお、SCC 形式は EIA-608 のみをサポートするため、CEA-708 拡張などの他のすべてのデータは破棄されます。
- MCC ファイルを MXF ファイルにマージします。
ffmpeg -i video_and_audio.mxf -eia608_extract 0 -i CC.mcc -c copy -map 0 -map 1 out.mxf
これはすべての VANC データを保持し、出力 MXF ファイルに SMPTE_436M_ANC データストリームとして挿入します。
3.18 mov/mp4/3gp
Quicktime File Format および ISO/IEC Base Media File Format(ISO/IEC 14496-12 または MPEG-4 Part 12、ISO/IEC 15444-12 または JPEG 2000 Part 12)用の demuxer です。
登録されている拡張子: mov, mp4, m4a, 3gp, 3g2, mj2, psp, m4b, ism, ismv, isma, f4v
3.18.1 Options
この demuxer は次のオプションを受け付けます。
enable_drefs
外部トラックの読み込みを有効にします。既定では無効です。これを有効にすると、一部のユースケースで理論上は情報が漏洩する可能性があります。
use_absolute_path
絶対パス経由での外部トラックの読み込みを許可します。既定では無効です。これを有効にするとセキュリティリスクがあります。ソースが悪意のないものと判明している場合にのみ有効にすべきです。
seek_streams_individually
シーク時に、各ストリームで個別に最も近い点を特定し、そのストリーム内で特定した点からパケットを demux します。これは、先頭から線形に demux する場合と比べて異なるパケット列につながる可能性があります。既定値は true です。
ignore_editlist
エディットリストのアトムをすべて無視します。この demuxer は既定で、エディットリストが示すタイムラインを反映するようにストリームの索引を変更します。既定値は false です。
advanced_editlist
エディットリストが示すタイムラインを反映するようにストリームの索引を変更します。このオプションを有効にするには、ignore_editlist を false に設定する必要があります。ignore_editlist とこのオプションの両方が false に設定されている場合、エディットリストが示す初期の dwell time や開始タイムスタンプを反映するように、ストリーム索引の先頭のみが変更されます。既定値は true です。
ignore_chapters
チャプターを解析しません。これには GoPro の ’HiLight’ タグ/モーメントも含まれます。なお、チャプターは入力がシーク可能な場合にのみ解析されます。既定値は false です。
use_mfra_for
シーク可能なフラグメント化入力に対し、media fragment random access box が存在すればそこからフラグメントの開始タイムスタンプを設定します。
次のオプションが利用できます。
‘auto’
mfra タイムスタンプを PTS と DTS のどちらに設定するかを自動判別します (既定値)
‘dts’
mfra タイムスタンプを DTS に設定します
‘pts’
mfra タイムスタンプを PTS に設定します
‘0’
タイムスタンプの設定に mfra box を使いません
use_tfdt
フラグメント化入力に対し、フラグメントの開始タイムスタンプを tfdt box の baseMediaDecodeTime に設定します。既定では有効で、DTS の設定に tfdt box を優先的に使います。無効にすると sidx box の earliest_presentation_time を使います。いずれの場合も、mfra box のタイムスタンプが利用可能で use_mfra_for が pts または dts に設定されていれば、それが使われます。
export_all
udta box 内の認識できない box をメタデータエントリとしてエクスポートします。box タイプの先頭 4 文字がキーとして設定されます。既定値は false です。
export_xmp
XMP_ box と uuid box の全内容を、キー xmp の文字列としてエクスポートします。なお、export_all が設定されていてこのオプションが設定されていない場合、XMP_ box の内容は依然としてエクスポートされますが、キーは XMP_ になります。既定値は false です。
activation_bytes
Audible AAX および AAX+ ファイルの復号に必要な 4 バイトのキーです。後述の Audible AAX のサブセクションを参照してください。
audible_fixed_key
Audible AAX/AAX+ ファイルを扱う際に使う固定キーです。事前に設定済みのため、指定する必要はないはずです。
decryption_key
ISO Common Encryption(CENC/AES-128 CTR; ISO/IEC 23001-7)で暗号化されたファイルを復号するための、16 進表記の既定の 16 バイトキーです。
decryption_keys
ISO Common Encryption(CENC/AES-128 CTR; ISO/IEC 23001-7)で暗号化されたファイルを復号するための、16 バイトのキー ID から 16 バイトのキーへの辞書です(いずれも 16 進表記)。
max_stts_delta
trak の stts box に書き込まれる非常に大きいサンプルデルタは、ときに意図的なこともありますが、たいていは誤って書き込まれているか、符号付き 32 ビット整数として扱われた際に dts 補正のための負の値を格納するために使われています。このオプションでは上限を設定でき、それを超えるとデルタは 1 にクランプされます。上限より大きい値は、int32 にキャストして負になる場合、以降の dts を調整するために使われます。
単位はトラックのタイムスケールです。範囲は 0 から UINT_MAX です。既定値は UINT_MAX - 48000*10 で、48 kHz 音声ストリームに対して最大 10 秒の dts 補正を許しつつ、uint32 の範囲の 99.9% を収容します。
interleaved_read
demuxer レベルで複数トラックのパケットをインターリーブします。インターリーブの悪いファイルでは、これにより、異なるトラックのパケット間の大きなギャップによる再生の問題を防げます。MOV/MP4 にはパケット配置の要件がないためです。ただし、非常にインターリーブの悪いファイルでは、トラック間でのシークが原因で過剰なシークが発生する可能性があります。そのため無効にすると、再生を犠牲にしつつ I/O の問題を防げる場合があります。
3.18.2 Audible AAX
Audible AAX ファイルは暗号化された M4B ファイルで、4 バイトの activation secret を指定することで復号できます。
ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4
3.19 mpegts
MPEG-2 transport stream の demuxer です。
この demuxer は次のオプションを受け付けます。
resync_size
新しい同期を探す際のサイズ上限を設定します。既定値は 65536 です。
skip_unknown_pmt
PAT に定義されていないプログラムの PMT をスキップします。既定値は 0 です。
fix_teletext_pts
teletext パケットの PTS と DTS の値を、その teletext ストリームが属しており、かつ破棄されない最初のプログラムの PCR から計算したタイムスタンプで上書きします。既定値は 1 です。teletext パケットの PTS と DTS の値をそのままにしたい場合は、このオプションを 0 に設定します。
ts_packetsize
生のパケットサイズをバイト単位で伝える出力オプションです。検出された生のパケットサイズを表示します。ユーザーが設定することはできません。
scan_all_pmts
すべての PMT をスキャンして結合します。値は -1 から 1 の整数です(-1 は自動設定、1 は有効、0 は無効を意味します)。既定値は -1 です。
merge_pmt_versions
PMT のバージョンが更新され、エレメンタリーストリームが別の PID へ移動した際に、既存のストリームを再利用します。既定値は 0 です。
max_packet_size
demuxer が出力するパケットの最大サイズをバイト単位で設定します。このサイズを超えるペイロードは複数のパケットに分割されます。範囲は 1 から INT_MAX/2 です。既定値は 204800 バイトです。
3.20 mpjpeg
マルチパート MIME にカプセル化された MJPEG の demuxer です。
この demuxer では MJPEG を読み込めます。各フレームは multipart/x-mixed-replace ストリームの一部として表現されます。
strict_mime_boundary
既定の実装では、マルチパート MIME の境界検出に緩やかな基準を適用しています。これは、適切な MIME MJPEG ストリームを生成しない多数の既存エンドポイントとの互換性退行を防ぐためです。このオプションを 1 に設定して有効にすると、境界値のチェックがより厳格になります。
3.21 rawvideo
raw video の demuxer です。
この demuxer では raw video データを読み込めます。想定する映像パラメータを指定するヘッダがないため、データを正しくデコードするにはユーザーがそれらを指定しなければなりません。
この demuxer は次のオプションを受け付けます。
framerate
入力映像のフレームレートを設定します。既定値は 25 です。
pixel_format
入力映像の pixel format を設定します。既定値は yuv420p です。
stride
フレームの行サイズをバイト単位で設定します。余分なパディングがある場合のみ必要です。マルチプレーンフォーマットでは、stride は各プレーンの行サイズのリストになります。
video_size
入力映像のサイズを設定します。この値は明示的に指定しなければなりません。
例えば、pixel format を rgb24、映像サイズを 320x240、フレームレートを毎秒 10 枚と仮定して、raw video ファイル input.raw を ffplay で読み込むには、次のコマンドを使います。
ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
pixel format を yuv420p、映像サイズを 1080x1920 とし、Y プレーンの各行に 8 バイトのパディング、UV プレーンに 4 バイトのパディングがあると仮定して、raw video を ffplay で読み込みます。
ffplay -f rawvideo -pixel_format yuv420p -video_size 1080x1920 -stride 1088,544,544 input.raw
3.22 rcwt
RCWT(Raw Captions With Time)は、608/708 のクローズドキャプション(CC)ソースを処理するためによく使われるオープンソースツール ccextractor 固有のフォーマットです。フォーマットの詳細は (ffmpeg-formats)rcwtenc を参照してください。
この demuxer は 2024 年 3 月時点の仕様を実装しており、これは 2014 年 4 月以降、安定して変更されていません。
3.22.1 Examples
- 組み込みデコーダを使って CC を ASS にレンダリングします。
ffmpeg -i CC.rcwt.bin CC.ass
なお、出力が空のように見える場合は、デコーダの data_field オプションを手動で設定して、目的の CC サブストリームを選ぶ必要があるかもしれません。
- RCWT のバックアップを Scenarist(SCC)形式に変換します。
ffmpeg -i CC.rcwt.bin -c:s copy CC.scc
なお、SCC 形式は RCWT に格納しうるすべての CC 拡張(EIA-708 など)をサポートしているわけではありません。
3.23 sbg
SBaGen スクリプトの demuxer です。
この demuxer は、バイノーラルビートのセッションを生成するために SBaGen http://uazu.net/sbagen/ が使うスクリプト言語を読み込みます。SBG スクリプトは次のようなものです。
-SE
a: 300-2.5/3 440+4.5/0
b: 300-2.5/0 440+4.5/3
off: -
NOW == a
+0:07:00 == b
+0:14:00 == a
+0:21:00 == b
+0:30:00 off
SBG スクリプトは絶対タイムスタンプと相対タイムスタンプを混在させられます。スクリプトが(スクリプト開始時刻を含めて)絶対タイムスタンプのみ、または相対タイムスタンプのみを使う場合、そのレイアウトは固定され、変換は単純です。一方、スクリプトが両方の種類のタイムスタンプを混在させている場合、相対タイムスタンプの NOW の基準は、スクリプトを読み込んだ時点の現在時刻から取られ、スクリプトのレイアウトはその基準に従って固定されます。つまり、スクリプトを直接再生すれば、実際の時刻はサウンドコントローラのクロック精度の範囲で絶対タイムスタンプと一致しますが、ユーザーが何らかの方法で再生を一時停止したりシークしたりすると、すべての時刻がそれに応じてずれます。
3.24 tedcaptions
TED Talks で使われる JSON キャプションです。
TED はキャプションへのリンクを提供していませんが、ページから推測できます。FFmpeg のソースツリーにあるファイル tools/bookmarklets.html には、それらを表に出すためのブックマークレットが含まれています。
この demuxer は次のオプションを受け付けます。
start_time
TED トークの開始時刻をミリ秒単位で設定します。既定値は 15000(15s)です。これは、ダウンロード可能な動画には 15 秒のイントロが含まれるため、キャプションとそれらを同期させるために使います。
例: キャプションを、ほとんどのプレーヤーが理解できる形式に変換します。
ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
3.25 vapoursynth
Vapoursynth のラッパーです。
セキュリティ上の懸念から、Vapoursynth スクリプトは自動検出されないため、入力フォーマットを強制する必要があります。ff* の CLI ツールでは、入力 -i yourscript.vpy の前に -f vapoursynth を加えます。
この demuxer は次のオプションを受け付けます。
max_script_size
この demuxer はスクリプト全体をメモリにバッファリングします。この値を調整して最大バッファサイズを設定します。これは読み込めるスクリプトサイズの上限としても機能します。既定値は 1 MiB です。
3.26 w64
Sony Wave64 音声の demuxer です。
この demuxer は次のオプションを受け付けます。
max_size
wav demuxer の同名オプションを参照してください。
3.27 wav
RIFF Wave 音声の demuxer です。
この demuxer は次のオプションを受け付けます。
ignore_length bool
設定すると、data チャンクのサイズを無視し、ファイルの末尾まで読み込みを続けます。ヘッダが正しく更新されなかった、壊れた、あるいは不完全なファイルを読むのに役立つ場合がありますが、data チャンクの後に非音声チャンクがあるファイルは誤って解釈してしまいます。既定では無効です。
max_size
demux されるパケットの最大パケットサイズをバイト単位で指定します。既定では 0 に設定され、これは入力フォーマットに基づいて適切な値が選ばれることを意味します。
3.28 webp
アニメーション WebP の demuxer です。
次のオプションを受け付けます。
-min_delay int
フレーム間の有効な最小ディレイをミリ秒で設定します。範囲は 0 から 60000 です。既定値は 10 です。
-max_webp_delay int
フレーム間の有効な最大ディレイをミリ秒で設定します。範囲は 0 から 16777215 です。既定値は 16777215(4 時間超)で、これは仕様で許される最大値です。
-default_delay int
フレーム間の既定のディレイをミリ秒で設定します。範囲は 0 から 60000 です。既定値は 100 です。
-ignore_loop bool
WebP ファイルには、特定の回数(または無限に)ループする情報を含められます。ignore_loop を true に設定すると、入力のループ設定は無視され、ループは行われません。false に設定すると、ループが行われ、WebP に従った回数だけ繰り返されます。既定値は true です。
usebgcolor bool
WebP ファイルは ANIM チャンクに背景色のヒントを含みますが、WebP の仕様ではビューアーアプリケーションがそれを使うことは必須とされていません。usebgcolor を true に設定すると背景色のヒントが使われ、そうでなければ背景に透明な黒が使われます。既定値は false です。
4 Muxers
Muxer は FFmpeg において、マルチメディアストリームを特定の種類のファイルに書き込めるようにする設定可能な要素です。
FFmpeg ビルドを構成すると、サポートされるすべての muxer が既定で有効になります。利用可能なすべての muxer は、configure オプション --list-muxers で一覧表示できます。
configure オプション --disable-muxers ですべての muxer を無効にでき、--enable-muxer=MUXER / --disable-muxer=MUXER オプションで個々の muxer を選択的に有効化/無効化できます。
ff* ツールのオプション -muxers は、有効な muxer の一覧を表示します。有効な demuxer と muxer をまとめた一覧を見るには -formats を使います。
現在利用可能な muxer の一部について、以下に説明します。
4.1 Raw muxers
このセクションでは raw muxer を扱います。これらは指定された codec に一致する単一のストリームを受け付けます。タイムスタンプやメタデータは格納しません。認識される拡張子は、特に指定がない限り muxer 名と同じです。
以下の muxer から構成されます。出力拡張子から muxer を自動選択するために使われるメディアタイプと、最終的に使われる拡張子も示します。
‘ac3 audio ’
Dolby Digital(AC-3 とも呼ばれる)です。
‘adx audio ’
CRI Middleware ADX 音声です。
この muxer は、出力がシーク可能で、かつカウントが 32 ビットに格納できる場合、最初のパケットの先頭付近に総サンプル数を書き出します。
‘aptx audio ’
aptX(Audio Processing Technology for Bluetooth)
‘aptx_hd audio (aptxdh)’
aptX HD(Audio Processing Technology for Bluetooth)音声
‘avs2 video (avs, avs2)’
AVS2-P2(Audio Video Standard - Second generation - Part 2)/ IEEE 1857.4 映像
‘avs3 video (avs3)’
AVS3-P2(Audio Video Standard - Third generation - Part 2)/ IEEE 1857.10 映像
‘cavsvideo video (cavs)’
Chinese AVS(Audio Video Standard - First generation)
‘codec2raw audio ’
Codec 2 音声です。
拡張子が登録されていないため、例えば ffmpeg CLI ツールで -f codec2raw のようにフォーマット名を指定する必要があります。
‘data any ’
汎用データ muxer です。
この muxer は、任意のタイプの任意の codec を持つ単一のストリームを受け付けます。入力ストリームは ffmpeg CLI ツールで -map オプションを使って選択しなければなりません。
拡張子が登録されていないため、例えば ffmpeg CLI ツールで -f data のようにフォーマット名を指定する必要があります。
‘dfpwm audio (dfpwm)’
Raw DFPWM1a(Dynamic Filter Pulse With Modulation)音声 muxer です。
‘dirac video (drc, vc2)’
BBC Dirac 映像です。
Dirac Pro codec はそのサブセットであり、SMPTE VC-2 として標準化されています。
‘dnxhd video (dnxhd, dnxhr)’
Avid DNxHD 映像です。
SMPTE VC-3 として標準化されています。DNxHR ストリームを受け付けます。
‘dts audio ’
DTS Coherent Acoustics(DCA)音声
‘eac3 audio ’
Dolby Digital Plus(Enhanced AC-3 とも呼ばれる)
‘evc video (evc)’
MPEG-5 Essential Video Coding(EVC)/ EVC / MPEG-5 Part 1 EVC 映像
‘g722 audio ’
ITU-T G.722 音声
‘g723_1 audio (tco, rco)’
ITU-T G.723.1 音声
‘g726 audio ’
ITU-T G.726 ビッグエンディアン("left-justified")音声です。
拡張子が登録されていないため、例えば ffmpeg CLI ツールで -f g726 のようにフォーマット名を指定する必要があります。
‘g726le audio ’
ITU-T G.726 リトルエンディアン("right-justified")音声です。
拡張子が登録されていないため、例えば ffmpeg CLI ツールで -f g726le のようにフォーマット名を指定する必要があります。
‘gsm audio ’
Global System for Mobile Communications 音声
‘h261 video ’
ITU-T H.261 映像
‘h263 video ’
ITU-T H.263 / H.263-1996、H.263+ / H.263-1998 / H.263 version 2 映像
‘h264 video (h264, 264)’
ITU-T H.264 / MPEG-4 Part 10 AVC 映像です。bitstream が length-prefixed モードの場合は Annex B 構文に変換する必要があります。
‘hevc video (hevc, h265, 265)’
ITU-T H.265 / MPEG-H Part 2 HEVC 映像です。bitstream が length-prefixed モードの場合は Annex B 構文に変換する必要があります。
‘m4v video ’
MPEG-4 Part 2 映像
‘mjpeg video (mjpg, mjpeg)’
Motion JPEG 映像
‘mlp audio ’
Meridian Lossless Packing(Packed PCM とも呼ばれる)
‘mp2 audio (mp2, m2a, mpa)’
MPEG-1 Audio Layer II 音声
‘mpeg1video video (mpg, mpeg, m1v)’
MPEG-1 Part 2 映像です。
‘mpeg2video video (m2v)’
ITU-T H.262 / MPEG-2 Part 2 映像
‘obu video ’
AV1 low overhead Open Bitstream Units muxer です。
ストリームのすべての temporal unit に temporal delimiter OBU が挿入されます。
‘rawvideo video (yuv, rgb)’
raw の非圧縮映像です。
‘sbc audio (sbc, msbc)’
Bluetooth SIG low-complexity subband codec 音声
‘truehd audio (thd)’
Dolby TrueHD 音声
‘vc1 video ’
SMPTE 421M / VC-1 映像
4.1.1 例
ffmpegで ‘rawvideo’ muxer を使って生の映像フレームを保存します:ffmpeg -f lavfi -i testsrc -t 10 -s hd1080p testsrc.yuv
rawvideo muxer はサイズやフォーマットに関する情報を保存しないため、ファイルを demux する際にはこの情報を与える必要があります:
ffplay -video_size 1920x1080 -pixel_format rgb24 -f rawvideo testsrc.rgb
4.2 生 PCM muxer
この節では生の PCM(Pulse-Code Modulation)音声 muxer を扱います。
これらは指定した codec に一致する単一のストリームを受け付けます。タイムスタンプやメタデータは保存しません。認識される拡張子は muxer 名と同じです。
以下の muxer から構成されます。出力拡張子から muxer を自動選択する際に使える、任意の追加拡張子も括弧内に示します。
‘alaw (al)’
PCM A-law
‘f32be’
PCM 32 ビット浮動小数点 ビッグエンディアン
‘f32le’
PCM 32 ビット浮動小数点 リトルエンディアン
‘f64be’
PCM 64 ビット浮動小数点 ビッグエンディアン
‘f64le’
PCM 64 ビット浮動小数点 リトルエンディアン
‘mulaw (ul)’
PCM mu-law
‘s16be’
PCM 符号付き 16 ビット ビッグエンディアン
‘s16le’
PCM 符号付き 16 ビット リトルエンディアン
‘s24be’
PCM 符号付き 24 ビット ビッグエンディアン
‘s24le’
PCM 符号付き 24 ビット リトルエンディアン
‘s32be’
PCM 符号付き 32 ビット ビッグエンディアン
‘s32le’
PCM 符号付き 32 ビット リトルエンディアン
‘s8 (sb)’
PCM 符号付き 8 ビット
‘u16be’
PCM 符号なし 16 ビット ビッグエンディアン
‘u16le’
PCM 符号なし 16 ビット リトルエンディアン
‘u24be’
PCM 符号なし 24 ビット ビッグエンディアン
‘u24le’
PCM 符号なし 24 ビット リトルエンディアン
‘u32be’
PCM 符号なし 32 ビット ビッグエンディアン
‘u32le’
PCM 符号なし 32 ビット リトルエンディアン
‘u8 (ub)’
PCM 符号なし 8 ビット
‘vidc’
PCM Archimedes VIDC
4.3 MPEG-1/MPEG-2 プログラムストリーム muxer
この節では MPEG-1 および MPEG-2 Systems ファミリーに属するフォーマットを扱います。
MPEG-1 Systems フォーマット(ISO/IEEC 11172-1 または MPEG-1 プログラムストリームとも呼ばれる)は、VCD(Video Compact Disc)に格納するメディアトラックのフォーマットとして採用されています。
MPEG-2 Systems 規格(ISO/IEEC 13818-1 とも呼ばれる)は 2 つのコンテナフォーマット、すなわちトランスポートストリームとプログラムストリームを定めていますが、ここで扱うのは後者のみです。
MPEG-2 プログラムストリームフォーマット(対応するファイル拡張子から VOB とも呼ばれる)は MPEG-1 プログラムストリームの拡張であり、音声・映像ストリームに異なる codec をサポートするのに加えて、字幕やナビゲーション用メタデータも保存します。MPEG-2 プログラムストリームは SVCD や DVD のストレージ機器でメディアストリームを格納するために採用されています。
この節は以下の muxer から構成されます。
‘mpeg (mpg,mpeg)’
MPEG-1 Systems / MPEG-1 プログラムストリーム muxer。
‘vcd’
MPEG-1 Systems / MPEG-1 プログラムストリーム(VCD)muxer。
この muxer は VCD(Video Compact Disc)のストレージ機器が受け付けるフォーマットのトラックを生成するために使えます。
いくつかの相違点を除いて ‘mpeg’ muxer と同じです。
‘vob’
MPEG-2 プログラムストリーム(VOB)muxer。
‘dvd’
MPEG-2 プログラムストリーム(DVD VOB)muxer。
この muxer は DVD(Digital Versatile Disc)のストレージ機器が受け付けるフォーマットのトラックを生成するために使えます。
いくつかの相違点を除いて ‘vob’ muxer と同じです。
‘svcd (vob)’
MPEG-2 プログラムストリーム(SVCD VOB)muxer。
この muxer は SVCD(Super Video Compact Disc)のストレージ機器が受け付けるフォーマットのトラックを生成するために使えます。
いくつかの相違点を除いて ‘vob’ muxer と同じです。
4.3.1 オプション
muxrate rate
ユーザー定義の mux レートを bits/s 単位で設定します。指定しない場合は自動計算された mux レートが使われます。既定値は 0。
preload delay
初期の demux-decode 遅延をマイクロ秒単位で設定します。既定値は 500000。
4.4 MOV/MPEG-4/ISOMBFF muxer
この節では QuickTime / MOV ファミリーに属するフォーマットを扱います。MPEG-4 Part 14 フォーマットや ISO base media file format(ISOBMFF)が含まれます。これらのフォーマットは ISO base media file format(ISOBMFF)に基づく共通の構造を共有します。
MOV フォーマットは元々 Apple QuickTime で使うために開発されました。後に MPEG-4 Part 1(のちの Part 14)フォーマット、別名 ISO/IEC 14496-1 の基礎として使われました。そのフォーマットはさらに ISOBMFF、別名 MPEG-4 Part 12 フォーマット、ISO/IEC 14496-12、または ISO/IEC 15444-12 へと一般化されました。
以下の muxer から構成されます。
‘3gp’
3G UMTS マルチメディアサービス向けの Third Generation Partnership Project(3GPP)フォーマット
‘3g2’
3G CDMA2000 マルチメディアサービス向けの Third Generation Partnership Project 2(3GP2 または 3GPP2)フォーマット。‘3gp’ に拡張と制限を加えたものに類似します
‘f4v’
Adobe Flash Video フォーマット
‘ipod’
MPEG-4 音声ファイルフォーマット。MOV/MP4 と同様だが音声ストリームのみを含むよう制限されており、通常は Apple ipod 機器で再生されます
‘ismv’
Microsoft IIS(Internet Information Services)Smooth Streaming Audio/Video(ISMV または ISMA)フォーマット。MPEG-4 Part 14 フォーマットを基にいくつかの非互換な変種を加えたもので、Microsoft IIS サーバ向けにメディアファイルをストリーミングするために使います。
‘mov’
.mov 拡張子で識別される QuickTime player フォーマット
‘mp4’
MP4 または MPEG-4 Part 14 フォーマット
‘psp’
PlayStation Portable MP4/MPEG-4 Part 14 フォーマットの変種。MPEG-4 Part 14 フォーマットを基にいくつかの非互換な変種を加えたもので、PlayStation 機器でファイルを再生するために使います。
4.4.1 フラグメンテーション
‘mov’、‘mp4’、‘ismv’ の各 muxer はフラグメンテーションをサポートします。通常、MOV/MP4 ファイルは全パケットに関するメタデータをすべて 1 か所にまとめて格納します。
このデータは通常ファイル末尾に書き込まれますが、-movflags に +faststart を加えるか、qt-faststart ツールを使うことで再生性を高めるために先頭へ移動できます。
フラグメント化されたファイルは複数のフラグメントから構成され、各フラグメントにはパケットとそのパケットに関するメタデータがまとめて格納されます。フラグメント化されたファイルを書き出す利点は、書き込みが中断されてもファイルがデコード可能なこと(通常の MOV/MP4 は適切に完結していないとデコードできない)と、非常に長いファイルを書き込む際のメモリ使用量が少なくて済むこと(通常の MOV/MP4 ファイルの書き込みではファイルを閉じるまで全パケットの情報をメモリに保持する)です。欠点は他のアプリケーションとの互換性が低いことです。
フラグメンテーションは、ファイルをどのようにフラグメントへ切り分けるかを定義するオプションのいずれかを設定することで有効になります:
frag_duration frag_size min_frag_duration movflags +frag_keyframe movflags +frag_custom
複数の条件を指定した場合、指定した条件のいずれかが満たされた時点でフラグメントが切り分けられます。例外は min_frag_duration オプションで、これは他の条件のいずれかが適用されるために満たされていなければなりません。
4.4.2 オプション
brand brand_string
メジャーブランドを上書きします。
empty_hdlr_name bool
有効にすると hdlr ボックス内に名前を書き込むのをスキップします。既定は false。
encryption_key key
メディアの暗号化キーを 16 進数形式で設定します
encryption_kid kid
メディアの暗号化キー識別子を 16 進数形式で設定します
encryption_scheme scheme
暗号化スキームを設定します。許容される値は ‘none’ と ‘cenc-aes-ctr’
frag_duration duration
長さが duration マイクロ秒のフラグメントを作成します。
frag_interleave number
フラグメント内でサンプルをインターリーブします(連続するサンプルの最大数で、小さいほどインターリーブは緊密になるがオーバーヘッドは増える)。既定では 0 に設定されます。
frag_size size
ペイロードデータを最大 size バイト含むフラグメントを作成します
iods_audio_profile profile
音声プロファイルアトムの iods 番号を指定します(-1 から 255)。既定は -1
iods_video_profile profile
映像プロファイルアトムの iods 番号を指定します(-1 から 255)。既定は -1
ism_lookahead num_entries
ISM ファイルの先読みエントリ数を指定します(0 から 255)。既定は 0
min_frag_duration duration
長さが duration マイクロ秒より短いフラグメントを作成しません
moov_size bytes
moov アトムをファイル末尾に置く代わりに、ファイル先頭にその領域を予約します。予約した領域が不足する場合は muxing に失敗します。
mov_gamma gamma
gama アトムのガンマ値を指定します(0 から 10 の 10 進数)。既定は 0.0。+ movflags と併せて設定する必要があります
movflags flags
各種の muxing スイッチを設定します。以下のフラグが使えます:
‘cmaf’
CMAF(Common Media Application Format)互換のフラグメント化 MP4 出力を書き出します
‘dash’
DASH(Dynamic Adaptive Streaming over HTTP)互換のフラグメント化 MP4 出力を書き出します
‘default_base_moof’
‘omit_tfhd_offset’ フラグと同様に、このフラグは tfhd アトムに絶対値の base_data_offset フィールドを書き込まないようにしますが、その実現に新しい default-base-is-moof フラグを使います。このフラグは 14496-12:2012 で新規に導入されました。状況によってはフラグメントの解析が容易になる場合があります(トラックフラグメントの位置計算を、直前のトラックフラグメントの暗黙の終端に基づいて行うのを避けられる)。
‘delay_moov’
最初のフラグメントが切り分けられるか、最初のフラグメントのフラッシュが行われるまで、初期 moov の書き込みを遅延させます
‘disable_chpl’
Nero チャプターマーカー(chpl アトム)を無効にします。通常は Nero チャプターと QuickTime チャプタートラックの両方がファイルに書き込まれます。このオプションを設定すると QuickTime チャプタートラックのみが書き込まれます。Nero チャプターは、mp3Tag 2.61a や iTunes 11.3 など特定のタグ付けプログラムでファイルを再処理する際に失敗を招くことがあり、他のバージョンでも同様の影響がある可能性が高いです。
‘faststart’
2 回目のパスを実行してインデックス(moov アトム)をファイル先頭へ移動します。この処理には時間がかかることがあり、フラグメント化出力などさまざまな状況では機能しないため、既定では有効になっていません。
‘frag_custom’
av_write_frame(ctx, NULL) を呼び出してそれまでに書き込んだパケットでフラグメントを書き出すことにより、フラグメントを切り分けるタイミングを呼び出し側が手動で選べるようにします。(これは libavformat を組み込んだ他のアプリケーションでのみ有用で、ffmpeg からは使えません。)
‘frag_discont’
次のフラグメントが以前のフラグメントと不連続であることを示します
‘frag_every_frame’
すべてのフレームでフラグメント化します
‘frag_keyframe’
各映像 keyframe で新しいフラグメントを開始します
‘global_sidx’
ファイル先頭にグローバルな sidx インデックスを書き込みます
‘isml’
ライブ Smooth Streaming フィードを作成します(パブリッシングポイントへのプッシュ用)
‘negative_cts_offsets’
CTTS ボックスのバージョン 1 の利用を有効にします。これにより CTS オフセットを負にできます。これによって最初のサンプルの DTS/CTS を 0 にでき、B-frame を含む映像トラックなど一部のケースで編集リストの必要性が減ります。加えて DASH-IF 相互運用ガイドラインへの準拠が容易になります。
このオプションは ‘ismv’(Smooth Streaming)ファイルを書き出す際に暗黙的に設定されます。
‘omit_tfhd_offset’
tfhd アトムに絶対値の base_data_offset を一切書き込みません。これによりフラグメントがファイル/ストリーム内の絶対バイト位置に結び付くのを避けられます。
‘prefer_icc’
colr アトムを書き込む場合、ストリームパケットのサイドデータに ICC プロファイルがあればその使用を優先します。
‘rtphint’
出力ファイルに RTP ヒントトラックを追加します
‘separate_moof’
各トラックごとに別個の moof(movie fragment)アトムを書き込みます。通常は全トラックのパケットが 1 つの moof アトムに書き込まれる(こちらがわずかに効率的)が、このオプションを設定すると muxer はトラックごとに 1 つの moof/mdat ペアを書き込み、トラックの分離を容易にします。
‘skip_sidx’
sidx アトムの書き込みをスキップします。sidx アトムによるビットレートのオーバーヘッドが大きい場合、sidx アトムが必須でないケースでこのオプションを使えます。‘global_sidx’ フラグが有効な場合、このオプションは無視されます。
‘skip_trailer’
フラグメント化されたファイルの mfra/tfra/mfro トレーラーの書き込みをスキップします
‘use_metadata_tags’
メタデータに mdta アトムを使います
‘write_colr’
色情報が未指定でも colr アトムを書き込みます。このフラグは実験的であり、名称変更や変更の可能性があるため、スクリプトからは使わないでください。
‘write_gama’
非推奨の gama アトムを書き込みます
‘hybrid_fragmented’
復旧性のために、出力ファイルをフラグメント化されたファイルとして書き出します。これにより書き込み中の中間ファイルを読み取れます(特に書き込み処理が正常に終了せず中断された場合)。書き込みが完了すると、より互換性が高くシークが容易かつ高速な通常の非フラグメント化ファイルへ変換されます。
書き込みが中断された場合、中間ファイルを手動でリマックスすることで、未完了のファイルに書き込まれていた内容の通常の非フラグメント化ファイルを得られます。
movie_timescale scale
ムービーヘッダーボックス(mvhd)に書き込むタイムスケールを設定します。範囲は 1 から INT_MAX。既定は 1000。
rtpflags flags
出力ファイルに RTP ヒントトラックを追加します。
以下のフラグが使えます:
‘h264_mode0’
RTP での H.264 にモード 0 を使います
‘latm’
AAC に MPEG4-GENERIC の代わりに MP4A-LATM パケット化を使います
‘rfc2190’
H.263 に RFC 4629 の代わりに RFC 2190 パケット化を使います
‘send_bye’
終了時に RTCP BYE パケットを送信します
‘skip_rtcp’
RTCP 送信者レポートを送信しません
skip_iods bool
iods アトムの書き込みをスキップします(既定値は true)
use_editlist bool
編集リストを使います(既定値は auto)
use_stream_ids_as_track_ids bool
ストリーム ID をトラック ID として使います(既定値は false)
video_track_timescale scale
映像トラックに使うタイムスケールを設定します。範囲は 0 から INT_MAX。0 に設定するとタイムスケールはネイティブストリームのタイムベースに基づいて自動設定されます。既定は 0。
write_btrt bool
トラックの stsd ボックス内の bitrate ボックスの書き込みを強制または無効化します。このボックスにはトラックのデコードバッファサイズ(バイト単位)、最大ビットレート、平均ビットレートが含まれます。これらの値がいずれも計算できない場合、ボックスはスキップされます。既定は -1 または auto で、MP4 モードでのみボックスを書き込みます。
write_prft option
PRFT ボックスの NTP フィールドに指定した時刻ソースを用いて、producer time reference box(PRFT)を書き込みます。時刻ソースを wallclock 時刻にするには ‘wallclock’ を、入力パケットの PTS 値にするには ‘pts’ を値に設定します。
write_tmcd bool
タイムコードトラックの書き込みを強制するには on を、無効にするには off を、mov および mp4 出力でのみタイムコードトラックを書き込むには auto を指定します(既定)。
‘pts’ への値設定は、PTS 値がソースで wallclock 時刻として設定されるライブエンコードのユースケースでのみ適用できます。例えば video_pts と audio_pts が ‘abs_wallclock’ に設定された decklink キャプチャソースでのエンコードのユースケースです。
4.4.3 例
ffmpegで ‘ismv’ muxer を使い、IIS のパブリッシングポイントへ Smooth Streaming コンテンツをリアルタイムにプッシュします:ffmpeg -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
4.5 a64
A64 Commodore 64 映像 muxer。
この muxer は単一の a64_multi または a64_multi5 codec 映像ストリームを受け付けます。
4.6 ac4
生 AC-4 音声 muxer。
この muxer は単一の ac4 音声ストリームを受け付けます。
4.6.1 オプション
write_crc bool
有効にすると、各パケットの CRC チェックサムを出力に書き込みます。既定は false
4.7 adts
Audio Data Transport Stream muxer。
単一の AAC ストリームを受け付けます。
4.7.1 オプション
write_id3v2 bool
有効にするとストリーム先頭に ID3v2.4 タグを書き込みます。既定は無効です。
write_apetag bool
有効にするとストリーム末尾に APE タグを書き込みます。既定は無効です。
write_mpeg2 bool
有効にすると ADTS フレームヘッダーの MPEG バージョンビットを 1 に設定し、MPEG-2 を示します。既定は 0 で、MPEG-4 を示します。
4.8 aea
MD STUDIO 音声 muxer。
この muxer は、1 または 2 チャンネルでサンプリングレート 44100Hz の単一の ATRAC1 音声ストリームを受け付けます。
AEA はトラックタイトルの格納をサポートするため、この muxer はストリームのメタデータからタイトルもコンテナに書き込みます。
4.9 aiff
Audio Interchange File Format muxer。
4.9.1 オプション
write_id3v2 bool
1 に設定すると ID3v2 タグの書き込みを有効にします。既定は 0(無効)。
id3v2_version bool
書き込む ID3v2 のバージョンを選択します。現在サポートされているのはバージョン 3 と 4(別名 ID3v2.3 と ID3v2.4)のみです。既定はバージョン 4。
4.10 alp
High Voltage Software の Lego Racers ゲーム音声 muxer。
最大 2 チャンネル、サンプリングレート 44100 Hz 以下の単一の ADPCM_IMA_ALP ストリームを受け付けます。
拡張子: tun、pcm
4.10.1 オプション
type type
ファイルタイプを設定します。
type は以下の値を受け付けます:
‘tun’
ファイルタイプを music に設定します。サンプリングレートは 22050 Hz でなければなりません。
‘pcm’
ファイルタイプを sfx に設定します。
‘auto’
出力ファイル拡張子に応じてファイルタイプを設定します。.pcm なら type pcm、それ以外は type tun が設定されます。(既定)
4.11 amr
3GPP AMR(Adaptive Multi-Rate)音声 muxer。
AMR NB ストリームを含む単一の音声ストリームを受け付けます。
4.12 amv
AMV(Actions Media Video)フォーマット muxer。
4.13 apm
Ubisoft Rayman 2 APM 音声 muxer。
単一の ADPCM IMA APM 音声ストリームを受け付けます。
4.14 apng
Animated Portable Network Graphics muxer。
単一の APNG 映像ストリームを受け付けます。
4.14.1 オプション
final_delay delay
各繰り返しの最後のフレームの後に、秒単位で表した遅延を強制します。既定値は 0.0。
plays repetitions
コンテンツを何回再生するかを指定します。0 で無限ループになり、1 ではループしません
4.14.2 例
ffmpegを使って、2 回繰り返し、最初の繰り返しの後に半秒の遅延を入れた APNG 出力を生成します:ffmpeg -i INPUT -final_delay 0.5 -plays 2 out.apng
4.15 argo_asf
Argonaut Games ASF 音声 muxer。
単一の ADPCM 音声ストリームを受け付けます。
4.15.1 オプション
version_major version
ファイルのメジャーバージョンを上書きします。整数で指定します。既定値は 2
version_minor version
ファイルのマイナーバージョンを上書きします。整数で指定します。既定値は 1
name name
ファイル名をファイルに埋め込みます。指定しない場合は出力ファイル名を使います。名前は 8 文字に切り詰められます。
4.16 argo_cvg
Argonaut Games CVG 音声 muxer。
単一の 1 チャンネル ADPCM 22050Hz 音声ストリームを受け付けます。
loop および reverb オプションはヘッダー内の対応するフラグを設定し、後で取得して音声ストリームをそれに応じて処理できます。
4.16.1 オプション
skip_rate_check bool
サンプリングレートチェックをスキップします(既定は false)
loop bool
ループフラグを設定します(既定は false)
reverb boolean
リバーブフラグを設定します(既定は true)
4.17 asf, asf_stream
Advanced / Active Systems(または Streaming)Format 音声 muxer。
ストリーミングには ‘asf_stream’ 変種を選択すべきです。
Windows Media Audio(wma)と Windows Media Video(wmv)もこの muxer を使うことに注意してください。
4.17.1 オプション
packet_size size
muxer のパケットサイズをバイト数で設定します。この設定を調整することで、ソースに応じてデータの断片化や muxer のオーバーヘッドを減らせる場合があります。既定値は 3200、最小は 100、最大は 64Ki。
4.18 ass
ASS/SSA(SubStation Alpha)字幕 muxer。
単一の ASS 字幕ストリームを受け付けます。
4.18.1 オプション
ignore_readorder bool
dialogue イベントを順序が前後していても即座に書き込みます。既定は false で、その場合は期待される時刻のイベントが見つかるまでキャッシュされます。
4.19 ast
AST(Audio Stream)muxer。
このフォーマットは一部の Nintendo Wii ゲームで音声を再生するために使われます。
単一の音声ストリームを受け付けます。
loopstart および loopend オプションを使って、これらのオプションを尊重するプレーヤー向けにファイル内のループ区間を定義できます。
4.19.1 オプション
loopstart start
ループ開始位置をミリ秒単位で指定します。-1 から INT_MAX の範囲で、-1 を設定した場合はループを指定しないことになり(既定 -1)、loopend の値は無視されます。
loopend end
ループ終了位置をミリ秒単位で指定します。0 から INT_MAX の範囲で、既定は 0。0 を設定した場合はストリーム全体の長さとみなされます。
4.20 au
SUN AU 音声 muxer。
単一の音声ストリームを受け付けます。
4.21 avi
Audio Video Interleaved muxer。
AVI は Microsoft が開発したプロプライエタリなフォーマットで、後に Open DML 仕様を通じて正式に規定されました。
プレーヤー実装の違いにより、生成された出力が対象のプレーヤーで正しく再生されるように、いくつかのオプションを設定する必要がある場合があります。
4.21.1 オプション
flipped_raw_rgb bool
true に設定すると、生 RGB ビットマップに正の高さを格納し、ビットマップが下から上(bottom-up)に格納されていることを示します。このオプションはビットマップを反転しないため、事前に手動で反転する必要がある(例えば ‘vflip’ フィルタを使う)点に注意してください。既定は false で、ビットマップが上から下(top down)に格納されていることを示します。
reserve_index_space size
ファイルヘッダー内の各ストリームの OpenDML マスターインデックスのために、指定したバイト数を予約します。既定では、最初のマスターインデックスに空きがなければ追加のマスターインデックスがデータパケット内に埋め込まれ、インデックスの連鎖としてつなげられます。このインデックス構造は一部のユースケースで問題を起こすことがあります。例えば OpenDML インデックス仕様に厳密に依存するサードパーティソフトウェアや、ファイルシークが遅い場合です。ファイルヘッダーに十分なインデックス領域を予約することでこれらの問題を回避できます。
必要なインデックス領域は出力ファイルサイズに依存し、ギガバイトあたり約 16 バイトが目安です。このオプションを省略するか 0 に設定すると、必要なインデックス領域が推測されます。
既定値は 0。
write_channel_mask bool
チャンネルレイアウトマスクを音声ストリームヘッダーに書き込みます。
このオプションは既定で有効です。チャンネルマスクを無効にすることは特定のシナリオで有用な場合があります。例えば、AVI で単一の音声ストリームのみをサポートするソフトウェアとの互換性のために複数の音声ストリームを 1 つにマージする場合などです((ffmpeg-filters)ffmpeg-filters マニュアルの "amerge" の節を参照)。
4.22 avif
AV1 (Alliance for Open Media Video codec 1) 画像形式の muxer。
この muxer は AV1 codec でエンコードした画像を格納します。
映像ストリームを1つまたは2つ受け付けます。映像ストリームを2つ与えた場合、2つ目はアルファマスクを格納する単一プレーンでなければなりません。
複数の画像を与えた場合、生成される出力はアニメーション AVIF とみなされ、ループ回数は loop オプションで指定できます。
これは Alliance for Open Media の https://aomediacodec.github.io/av1-avif にある仕様に基づいています。
4.22.1 オプション
loop count
アニメーション AVIF をループする回数。0 で無限ループを指定し、既定値は 0。
movie_timescale timescale
ムービーヘッダボックス (mvhd) に書き込むタイムスケールを設定します。範囲は 1 から INT_MAX。既定値は 1000。
4.23 avm2
ShockWave Flash (SWF) / ActionScript Virtual Machine 2 (AVM2) 形式の muxer。
音声ストリーム1つ、映像ストリーム1つ、またはその両方を受け付けます。
4.24 bit
G.729 (.bit) ファイル形式の muxer。
G.729 音声ストリームを1つ受け付けます。
4.25 caf
Apple CAF (Core Audio Format) muxer。
音声ストリームを1つ受け付けます。
4.26 codec2
Codec2 音声の muxer。
codec2 音声ストリームを1つ受け付けます。
4.27 chromaprint
Chromaprint フィンガープリント生成の muxer。
このフィルタをコンパイルできるようにするには、FFmpeg を --enable-chromaprint を付けて configure する必要があります。
この muxer は音声データを Chromaprint ライブラリに渡し、ライブラリが与えられた音声データのフィンガープリントを生成します。参照: https://acoustid.org/chromaprint
最大2チャンネルの符号付きネイティブエンディアン16ビット raw 音声ストリームを1つ受け取ります。
4.27.1 オプション
algorithm version
フィンガープリントに用いるアルゴリズムのバージョンを選択します。範囲は 0 から 4。バージョン 3 では無音検出が有効になります。既定値は 1。
fp_format format
フィンガープリントを出力する形式。以下のオプションを受け付けます:
‘base64’
Base64 で圧縮したフィンガープリント (既定値)
‘compressed’
バイナリ圧縮されたフィンガープリント
‘raw’
バイナリの raw フィンガープリント
silence_threshold threshold
無音を検出するためのしきい値。範囲は -1 から 32767 で、-1 は無音検出を無効にします。無音検出はアルゴリズムのバージョン 3 でのみ使用できます。
AcoustID サービスで使用する場合は無音検出を無効にしなければなりません。既定値は -1。
4.28 crc
CRC (Cyclic Redundancy Check) muxer。
この muxer はすべての入力音声・映像フレームの Adler-32 CRC を計算して出力します。既定では、CRC を計算する前に音声フレームを符号付き16ビット raw 音声に、映像フレームを raw 映像に変換します。
muxer の出力は次の形式の1行からなります: CRC=0xCRC。ここで CRC はデコードしたすべての入力フレームの CRC を表す、8桁にゼロ埋めした16進数。
framecrc muxer も参照してください。
4.28.1 例
-
ffmpegで入力の CRC を計算し、ファイル out.crc に保存します:ffmpeg -i INPUT -f crc out.crc -
ffmpegで次のコマンドにより CRC を標準出力に出力します:ffmpeg -i INPUT -f crc - -
ffmpegでは音声・映像の codec と形式を指定して、各フレームの出力形式を選べます。例えば、PCM 符号なし8ビットに変換した入力音声と MPEG-2 映像に変換した入力映像の CRC を計算するには、次のコマンドを使います:ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
4.29 dash
Dynamic Adaptive Streaming over HTTP (DASH) muxer。
この muxer は MPEG-DASH 規格 ISO/IEC 23009-1:2014 およびそれ以降の規格更新に従ってセグメントとマニフェストファイルを生成します。
詳細は以下を参照:
- ISO DASH 仕様: http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
- WebM DASH 仕様: https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification
この muxer は MPD (Media Presentation Description) マニフェストファイルと、各ストリーム用のセグメントファイルを生成します。セグメントファイルは MPD マニフェストファイルと同じディレクトリに配置されます。
セグメントのファイル名には、規格の 5.3.9.4.4 節で定義されているとおり、マニフェストの SegmentTemplate セクションで使われる定義済み識別子を含めることができます。
利用できる識別子は $RepresentationID$、$Number$、$Bandwidth$、$Time$。標準の識別子に加えて、ffmpeg 独自の $ext$ 識別子もサポートされます。指定すると、ffmpeg はファイル名中の $ext$ を mp4、webm などの muxing 形式の拡張子に置き換えます。
4.29.1 オプション
adaptation_sets adaptation_sets
ストリームをアダプテーションセットに割り当てます。割り当ては MPD マニフェストの AdaptationSets セクションで指定されます。
アダプテーションセットは、単一のサブセットとしてアクセスされる1つ以上のストリームの集合を含みます。例えば、利用可能な帯域に応じてユーザーが選べる、異なるサイズでエンコードされた対応ストリームや、言語の異なる別々の音声ストリームなどが該当します。
各アダプテーションセットは次の構文で指定します:
id=index,streams=streams
ここで index は数値のインデックスで、streams は , 区切りのストリームインデックスの並び。複数のアダプテーションセットはスペースで区切って指定できます。
すべての映像(または音声)ストリームを1つのアダプテーションセットにマップするには、ID の代わりにストリーム識別子として v(または a)を使えます。
割り当てが定義されていない場合、既定では各ストリームごとに1つのアダプテーションセットになります。
以下の任意フィールドも指定できます:
descriptor
ISO/IEC 23009-1:2014/Amd.2:2015 で定義されるディスクリプタを定義します。
例えば:
<SupplementalProperty schemeIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/>
ディスクリプタ文字列は自己完結型(self-closing)の XML タグであるべきです。
frag_duration
frag_duration オプションで指定したグローバルのフラグメント長を上書きします。
frag_type
frag_type オプションで指定したグローバルのフラグメントタイプを上書きします。
seg_duration
seg_duration オプションで指定したグローバルのセグメント長を上書きします。
trick_id
アダプテーションセットが、参照先のアダプテーションセットに対するトリックモード用のストリームを含むものとして印を付けます。
adaptation_sets オプションに指定できる値の例をいくつか示します:
id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v id=1,seg_duration=2,frag_type=none,streams=a
id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1
dash_segment_type type
DASH セグメントファイルのタイプを設定します。
指定できる値:
‘auto’
dash セグメントファイルの形式はストリームの codec に基づいて選択されます。これが既定のモード。
‘mp4’
dash セグメントファイルは ISOBMFF/MP4 形式になります
‘webm’
dash セグメントファイルは WebM 形式になります
extra_window_size size
ディスクから削除するまでに、マニフェストの外側に保持するセグメントの最大数を設定します。
format_options options_list
コンテナ形式 (mp4/webm) のオプションを : 区切りの key=value パラメータのリストで設定します。: 特殊文字を含む値はエスケープしなければなりません。
frag_duration duration
セグメント内のフラグメント長を秒単位で設定します。小数値も設定できます。
frag_type type
フラグメント化の区切りのタイプを設定します。
指定できる値:
‘auto’
セグメントごとに1フラグメントとします
‘every_frame’
フレームごとにフラグメント化します
‘duration’
特定の時間間隔でフラグメント化します
‘pframes’
keyframe で、かつ P フレームの並べ替えに従ってフラグメント化します(映像のみ、実験的)
global_sidx bool
グローバルの SIDX atom を書き込みます。単一ファイルの mp4 出力で、非ストリーミングモードの場合にのみ適用されます。
hls_master_name file_name
HLS マスタープレイリスト名。既定値は master.m3u8。
hls_playlist bool
HLS プレイリストファイルを生成します。マスタープレイリストは hls_master_name オプションで指定したファイル名で生成されます。各ストリームに対して1つのメディアプレイリストファイルが media_0.m3u8、media_1.m3u8 などのファイル名で生成されます。
http_opts http_opts
基盤となる HTTP プロトコルに渡す : 区切りの key=value オプションのリストを指定します。HTTP 出力の場合にのみ適用されます。
http_persistent bool
持続的 HTTP 接続を使用します。HTTP 出力の場合にのみ適用されます。
http_user_agent user_agent
HTTP ヘッダの User-Agent フィールドを上書きします。HTTP 出力の場合にのみ適用されます。
ignore_io_errors bool
オープン時・書き込み時の IO エラーを無視します。ネットワーク出力を伴う長時間の実行で有用。既定では無効。
index_correction bool
セグメントインデックスの補正ロジックを有効または無効にします。use_template が有効で use_timeline が無効の場合にのみ適用されます。既定では無効。
有効にすると、ロジックがセグメントインデックスの流れを監視します。あるストリームのセグメントインデックス値が期待される実時間の位置にない場合、ロジックがそのインデックス値を補正します。
通常このロジックはライブストリーミングのユースケースで必要となります。長時間ストリーミングではネットワーク帯域の変動が起こりやすいです。各変動によってセグメントインデックスが期待される実時間の位置より遅れることがあります。
init_seg_name init_name
初期化セグメントに使う DASH テンプレート形式の名前。既定値は init-stream$RepresentationID$.$ext$。$ext$ はセグメント形式に固有のファイル名拡張子に置き換えられます。
ldash bool
一部の要素の有無や値を制約することで低遅延 DASH を有効にします。既定では無効。
lhls bool
低遅延 HLS (LHLS) を有効にします。現在のセグメントの URI を持つ #EXT-X-PREFETCH タグを追加します。hls.js プレーヤーの関係者がオープンな LHLS 仕様の標準化を進めています。仕様のドラフトは https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md にあります。
このオプションは上記のオープン仕様に準拠しようとするものです。streaming オプションと hls_playlist オプションを自動的に有効にします。これは実験的な機能。
注意: これは Apple 版の LHLS ではありません。https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis を参照してください。
master_m3u8_publish_rate segment_intervals_count
指定した数のセグメント間隔ごとに、マスタープレイリストを繰り返し公開します。
max_playback_rate rate
クライアントが通常再生中に再生遅延とバッファ占有量を自動調整する目的に適切とされる、最大再生レートを設定します。
media_seg_name segment_name
メディアセグメントに使う DASH テンプレート形式の名前。既定値は chunk-stream$RepresentationID$-$Number%05d$.$ext$。$ext$ はセグメント形式に固有のファイル名拡張子に置き換えられます。
method method
出力ファイルの生成に使う HTTP メソッドを指定します。通常は PUT または POST を設定します。
min_playback_rate rate
クライアントが通常再生中に再生遅延とバッファ占有量を自動調整する目的に適切とされる、最小再生レートを設定します。
mpd_profile flags
1つ以上の MPD マニフェストプロファイルを設定します。
指定できる値:
‘dash’
MPEG-DASH ISO Base media file format ライブプロファイル
‘dvb_dash’
DVB-DASH プロファイル
既定値は dash。
remove_at_exit bool
終了時にすべてのセグメントを削除するかどうかを有効または無効にします。既定では無効。
seg_duration duration
セグメント長を秒単位で設定します(小数値も設定できます)。この値は、use_template オプションが有効で use_timeline オプションが無効の場合は平均セグメント長として扱われ、それ以外のすべての場合は最小セグメント長として扱われます。
既定値は 5。
single_file bool
すべてのセグメントを1つのファイルに格納し、バイト範囲を使ってアクセスするかどうかを有効または無効にします。既定では無効。
単一ファイルの名前は single_file_name オプションで指定できます。指定しない場合は、マニフェストファイルのベース名に出力形式の拡張子を付けたものを使います。
single_file_name file_name
マニフェストの baseURL 要素に使う DASH テンプレート形式の名前。single_file オプションが true に設定されていることを暗黙に意味します。テンプレート中の $ext$ はセグメント形式に固有のファイル名拡張子に置き換えられます。
availability_start_time_ms milliseconds
MPD の availabilityStartTime 属性を Unix エポック時刻のミリ秒で設定します。0 を設定すると、最初のパケットが書き込まれた時点の壁時計時刻が使われます。再起動をまたいで安定した可用性開始時刻が必要なライブ出力で有用。
streaming bool
出力のチャンクストリーミングモードを有効または無効にします。チャンクストリーミングモードでは、各フレームがチャンクを構成する moof フラグメントになります。既定では無効。
suggested_presentation_delay duration
MPD の suggestedPresentationDelay 属性を設定します。0 を設定すると、最後のセグメント長が使われます。
target_latency target_latency
配信を意図した目標遅延を秒単位で設定します(小数値も設定できます)。streaming オプションと write_prft オプションが有効な場合にのみ適用されます。これは情報提供用のフィールドで、クライアントがサービスの遅延を測定するために使えます。
timeout timeout
ソケット I/O 操作のタイムアウトを秒単位で設定します(小数値も設定できます)。HTTP 出力の場合にのみ適用されます。
update_period period
動的コンテンツ向けに MPD の更新周期を設定します。単位は秒。0 を設定すると、周期は自動的に計算されます。
既定値は 0。
use_template bool
マニフェストで SegmentList の代わりに SegmentTemplate を使用するかどうかを有効または無効にします。既定では有効。
use_timeline bool
マニフェストの SegmentTemplate セクション内で SegmentTimeline を使用するかどうかを有効または無効にします。既定では有効。
utc_timing_url url
UTC タイムスタンプを ISO 形式で返すページの URL。例えば https://time.akamai.com/?iso
window_size size
マニフェストに保持するセグメントの最大数を設定し、最も古いものを破棄します。ライブストリーミングで有用。
値が 0 の場合、すべてのセグメントがマニフェストに保持されます。既定値は 0。
write_prft write_prft
対応するストリームに Producer Reference Time 要素を書き込みます。これにより、基盤となる muxer での prft ボックスの書き込みも有効になります。utc_url オプションが有効な場合にのみ適用されます。既定では auto に設定されており、その場合 muxer は必要とするモードでのみ有効にしようとします。
4.29.2 例
ffmpeg を使って入力ソースからリアルタイムに読み込み、DASH 出力を生成します。
入力ファイルから2つのマルチメディアストリームを生成します。どちらも ‘libx264’ でエンコードした映像ストリームと ‘libfdk_aac’ でエンコードした音声ストリームを含みます。1つ目のマルチメディアストリームはビットレート 800k の映像と既定レートの音声を含み、2つ目は 320x170 ピクセルにスケールした 300k の映像と 22005 Hz にリサンプリングした音声を含みます。
window_size オプションにより、既定の長さ5秒の最新5セグメントだけを保持します。
ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \
-b:v:0 800k -profile:v:0 main \
-b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline -ar:a:1 22050 \
-bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 \
-use_timeline 1 -use_template 1 -window_size 5 \
-adaptation_sets "id=0,streams=v id=1,streams=a" \
-f dash /path/to/out.mpd
4.30 daud
D-Cinema 音声の muxer。
‘pcm_24daud’ codec でエンコードされ、96000 Hz にリサンプリングされた6チャンネル音声ストリームを1つ受け付けます。
4.30.1 例
ffmpeg を使って入力音声を 96000Hz にリサンプリングした ‘5.1’ チャンネルレイアウトに mux します:
ffmpeg -i INPUT -af aresample=96000,pan=5.1 slow.302
7.0 より前の ffmpeg バージョンでは、mux されるパケットサイズを制限するために ‘asetnsamples’ フィルタを使う必要があるかもしれません。この形式は 65535 バイト(3640 サンプル)より大きいパケットの muxing をサポートしていないためです。新しい ffmpeg バージョンでは、音声は自動的に 36000 バイト(2000 サンプル)のパケットにパケット化されます。
4.31 dv
DV (Digital Video) muxer。
‘dvvideo’ 映像ストリームをちょうど1つと、最大2つの ‘pcm_s16’ 音声ストリームを受け付けます。これ以外の制約は映像のプロパティとフレームレートによって定まり、映像は DV のサポートされたプロファイルに対応していなければなりません。
4.31.1 例
ffmpeg を使って入力を変換します:
ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv
4.32 ffmetadata
FFmpeg メタデータの muxer。
この muxer はストリームのメタデータを ‘ffmetadata’ 形式で書き込みます。
形式の詳細は (ffmpeg-formats)メタデータの章 を参照してください。
4.32.1 例
ffmpeg を使って入力ファイルからメタデータを抽出し、‘ffmetadata’ 形式の metadata.ffmeta ファイルに出力します:
ffmpeg -i INPUT -f ffmetadata metadata.ffmeta
4.33 fifo
FIFO (First-In First-Out) muxer。
‘fifo’ 擬似 muxer は、先入れ先出しのキューを使って実際の muxer を別スレッドで実行することで、エンコードと muxing を分離できます。
これは特に tee muxer と組み合わせると有用で、信頼性・書き込み速度・遅延の異なる複数の宛先へデータを送るのに使えます。
ターゲットの muxer は、出力名から選択されるか、fifo_format オプションで指定されます。
キューがいっぱいになったり、出力が失敗したり(例えばパケットを出力に書き込めない場合など)したときの ‘fifo’ muxer の挙動は選択できます:
- 実時間または処理中のストリームの時刻に基づき、リトライ間の遅延を設定して、出力を透過的に再開できます。
- 一時的な失敗の間はエンコードをブロックすることも、FIFO キューがいっぱいになった場合に透過的にパケットを破棄しながら続行することもできます。
API ユーザーは、その AVFormatContext 内で使われるコールバック関数 (interrupt_callback、io_open、io_close) がスレッドセーフでなければならないことに注意すべきです。
4.33.1 オプション
attempt_recovery bool
失敗が発生した場合、出力の復旧を試みます。これは特にネットワーク出力と併用すると有用で、ストリーミングを透過的に再開できるようになります。既定ではこのオプションは false に設定されています。
drop_pkts_on_overflow bool
true に設定すると、fifo キューがいっぱいになった場合に、エンコーダをブロックする代わりにパケットを破棄します。これにより、ストリームの一部が欠落する代償と引き換えに、入力を遅らせずにストリーミングを続行できます。既定ではこのオプションは false に設定されており、その場合エンコーダは muxer がパケットの一部を処理するまでブロックされ、パケットは失われません。
fifo_format format_name
形式名を指定します。出力名のサフィックスから推測できない場合に有用。
format_opts options
基盤となる muxer の形式オプションを指定します。muxer のオプションは ’:’ で区切った key=value ペアのリストとして指定できます。
max_recovery_attempts count
連続して失敗した復旧試行が何回に達したら出力を恒久的に失敗とするか、その最大回数を設定します。既定ではこのオプションは 0(無制限)に設定されています。
queue_size size
キューのサイズをパケット数で指定します。既定値は 60。
recover_any_error bool
true に設定すると、失敗の原因となったエラーの種類にかかわらず復旧を試みます。既定ではこのオプションは false に設定されており、特定の(通常は恒久的な)エラーの場合は、attempt_recovery オプションが true に設定されていても復旧を試みません。
recovery_wait_streamtime bool
false に設定すると、復旧試行を待つ際に実時間が使われます(つまり、recovery_wait_time オプションで指定した時間が経過した後に復旧が試みられます)。
true に設定すると、代わりに処理中のストリームの時刻が考慮されます(つまり、recovery_wait_time オプションに対応するパケットを破棄した後に復旧が試みられます)。
既定ではこのオプションは false に設定されています。
recovery_wait_time duration
前回の復旧試行が失敗した後、次の復旧試行までの待機時間を秒単位で指定します。既定値は 5。
restart_with_keyframe bool
キューのオーバーフローや失敗から復旧した後、keyframe を待つかどうかを指定します。このオプションは既定で false に設定されています。
timeshift duration
指定した数のパケットをバッファリングし、出力の書き込みを遅らせます。timeshift のためのパケットを格納できるよう、queue_size オプションの値を十分大きくしなければならない点に注意。入力の終端では、fifo バッファが実時間の速度でフラッシュされます。
4.33.2 例
ffmpeg を使って RTMP サーバへストリーミングし、一時的な失敗(ネットワーク障害)が起きても実時間レートでストリームの処理を続行し、毎秒ストリーミングの復旧を無限に試みます:
ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv \
-drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 \
-map 0:v -map 0:a rtmp://example.com/live/stream_name
4.34 film_cpk
Sega film (.cpk) muxer。
この形式はいくつかの Sega ゲームの内部形式として使われていました。
Sega film ファイル形式の詳細については http://wiki.multimedia.cx/index.php?title=Sega_FILM を参照してください。
最大1つの ‘cinepak’ または raw 映像ストリームと、最大1つの音声ストリームを受け付けます。
4.35 filmstrip
Adobe Filmstrip muxer。
この形式は、生成したフィルムストリップのエクスポートを格納するために複数の Adobe ツールで使われます。raw 映像ストリームを1つ受け付けます。
4.36 fits
Flexible Image Transport System (FITS) muxer。
この画像形式は天文データを格納するために使われます。
形式の詳細については https://fits.gsfc.nasa.gov を参照してください。
4.37 flac
Raw FLAC 音声の muxer。
この muxer は FLAC 音声ストリームをちょうど1つ受け付けます。さらに、disposition ‘attached_pic’ の画像を追加することもできます。
4.37.1 オプション
write_header bool
true に設定するとファイルヘッダを書き込みます。既定値は true。
4.37.2 例
ffmpeg を使って、入力ファイルの音声ストリームを ‘attached_pic’ disposition で使う複数の画像とともに格納します:
ffmpeg -i INPUT -i pic1.png -i pic2.jpg -map 0:a -map 1 -map 2 -disposition:v attached_pic OUTPUT
4.38 flv
Adobe Flash Video Format muxer。
4.38.1 オプション
flvflags flags
指定できる値:
‘aac_seq_header_detect’
音声ストリームのデータに基づいて AAC シーケンスヘッダを配置します。
‘no_sequence_end’
シーケンス終了タグを無効にします。
‘no_metadata’
メタデータタグを無効にします。
‘no_duration_filesize’
ストリーム終端で duration と filesize が0に等しい場合に、メタデータ中のそれらを無効にします。(シーク不可のライブストリームで使われます。)
‘add_keyframe_index’
シークを容易にするために使います。特に HTTP 擬似ストリーミングで有用。
4.39 framecrc
パケットごとの CRC (Cyclic Redundancy Check) テスト形式。
この muxer は音声・映像パケットごとに Adler-32 CRC を計算して出力します。既定では、CRC を計算する前に音声フレームを符号付き16ビット raw 音声に、映像フレームを raw 映像に変換します。
muxer の出力は、音声・映像パケットごとに次の形式の1行からなります:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, 0xCRC
CRC はパケットの CRC を表す、8桁にゼロ埋めした16進数。
4.39.1 例
例えば、raw 音声・映像パケットに変換した INPUT 中の音声・映像フレームの CRC を計算し、ファイル out.crc に保存するには:
ffmpeg -i INPUT -f framecrc out.crc
情報を標準出力に出力するには、次のコマンドを使います:
ffmpeg -i INPUT -f framecrc -
ffmpeg では、音声・映像の codec を指定することで、各パケットの CRC を計算する前に音声・映像フレームをエンコードする出力形式を選べます。例えば、PCM 符号なし8ビットに変換した各デコード入力音声フレームと、MPEG-2 映像に変換した各デコード入力映像フレームの CRC を計算するには、次のコマンドを使います:
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
crc muxer も参照してください。
4.40 framehash
パケットごとのハッシュテスト形式。
この muxer は音声・映像パケットごとに暗号学的ハッシュを計算して出力します。これは、各パケットを個別にバイナリ比較しなくても、パケット単位の等価性チェックを行うのに使えます。
既定では、ハッシュを計算する前に音声フレームを符号付き16ビット raw 音声に、映像フレームを raw 映像に変換しますが、他の codec への明示的な変換の出力も使えます。既定では SHA-256 暗号学的ハッシュ関数を使いますが、他にもいくつかのアルゴリズムをサポートします。
muxer の出力は、音声・映像パケットごとに次の形式の1行からなります:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash
hash はパケットについて計算したハッシュを表す16進数。
hash algorithm
文字列 algorithm で指定した暗号学的ハッシュ関数を使います。サポートされる値には MD5、murmur3、RIPEMD128、RIPEMD160、RIPEMD256、RIPEMD320、SHA160、SHA224、SHA256(既定値)、SHA512/224、SHA512/256、SHA384、SHA512、CRC32、adler32 が含まれます。
4.40.1 例
raw 音声・映像パケットに変換した INPUT 中の音声・映像フレームの SHA-256 ハッシュを計算し、ファイル out.sha256 に保存するには:
ffmpeg -i INPUT -f framehash out.sha256
MD5 ハッシュ関数を使って情報を標準出力に出力するには、次のコマンドを使います:
ffmpeg -i INPUT -f framehash -hash md5 -
hash muxer も参照してください。
4.41 framemd5
パケットごとの MD5 テスト形式。
これは framehash muxer の変種です。あの muxer と異なり、既定で MD5 ハッシュ関数を使います。
4.41.1 例
raw 音声・映像パケットに変換した INPUT 中の音声・映像フレームの MD5 ハッシュを計算し、ファイル out.md5 に保存するには:
ffmpeg -i INPUT -f framemd5 out.md5
情報を標準出力に出力するには、次のコマンドを使います:
ffmpeg -i INPUT -f framemd5 -
framehash muxer と md5 muxer も参照してください。
4.42 gif
アニメーション GIF muxer。
GIF 形式はタイムベースが非常に大きいことに注意。そのため、2フレーム間の遅延を1センチ秒より小さくすることはできません。
4.42.1 オプション
loop bool
出力をループする回数を設定します。-1 でループなし、0 で無限ループ(既定値)。
final_delay delay
最後のフレームの後の遅延を(センチ秒で)強制します。各フレームは次のフレームまでの遅延で終わります。既定値は -1 で、これは muxer に前の遅延を再利用するよう伝える特別な値です。ループの場合は、例えば一時停止を示すためにこの値をカスタマイズしたいことがあるでしょう。
4.42.2 例
5 秒間隔で 10 回ループする gif をエンコードする例:
ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif
注 1: フレームを個別の GIF ファイルとして取り出したい場合は、image2 muxer を明示的に指定する必要があります:
ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"
4.43 gxf
General eXchange Format (GXF) muxer。
GXF は Grass Valley Group によって開発され、その後 SMPTE によって SMPTE 360M として標準化され、SMPTE RDD 14-2007 で高精細度ビデオ解像度に対応するよう拡張されました。
codec が ‘mjpeg’、‘mpeg1video’、‘mpeg2video’ のいずれか、または解像度 ‘512x480’ もしくは ‘608x576’ の ‘dvvideo’ である映像ストリームを最大 1 つと、レート 48000Hz・codec ‘pcm16_le’ の音声ストリームを複数受け付けます。
4.44 hash
ハッシュテスト用フォーマット。
この muxer は、すべての入力音声フレームと映像フレームの暗号学的ハッシュを計算して出力します。完全なバイナリ比較を行わずに同一性を確認したい場合に利用できます。
既定では、ハッシュを計算する前に音声フレームは符号付き 16bit の生音声に、映像フレームは生映像に変換されますが、他の codec への明示的な変換結果を使うこともできます。タイムスタンプは無視されます。既定では SHA-256 暗号学的ハッシュ関数を使用しますが、他のいくつかのアルゴリズムにも対応しています。
muxer の出力は次の形式の 1 行から成ります: algo=hash。algo は使用したハッシュ関数を表す短い文字列、hash は計算されたハッシュを表す 16 進数です。
hash algorithm
文字列 algorithm で指定した暗号学的ハッシュ関数を使用します。対応する値には MD5、murmur3、RIPEMD128、RIPEMD160、RIPEMD256、RIPEMD320、SHA160、SHA224、SHA256(既定値)、SHA512/224、SHA512/256、SHA384、SHA512、CRC32、adler32 があります。
4.44.1 例
入力を生音声・生映像に変換した SHA-256 ハッシュを計算し、ファイル out.sha256 に保存するには:
ffmpeg -i INPUT -f hash out.sha256
MD5 ハッシュを標準出力に表示するには次のコマンドを使います:
ffmpeg -i INPUT -f hash -hash md5 -
framehash muxer も参照してください。
4.45 hds
HTTP Dynamic Streaming (HDS) muxer。
HTTP dynamic streaming(HDS)は、Adobe が開発したアダプティブビットレートストリーミング方式です。HDS は MP4 映像コンテンツを HTTP 接続で配信します。HDS はオンデマンド配信にもライブ配信にも利用できます。
この muxer は、.f4m マニフェスト(Adobe Flash Media Manifest File)、各ストリーム用の .abst(Adobe Bootstrap File)、および出力として指定したディレクトリ内のセグメントファイルを生成します。
生成したストリームを再生するには、HDS プレーヤーがこれらに HTTPS でアクセスできる必要があります。
4.45.1 オプション
extra_window_size int
ディスクから削除する前に、マニフェスト外に保持しておくフラグメント数
min_frag_duration microseconds
フラグメントの最小継続時間(マイクロ秒単位)。既定値は 1 秒(10000000)
remove_at_exit bool
true を設定すると、終了時にすべてのフラグメントを削除します
window_size int
マニフェストに保持するフラグメント数(0 以外の値を設定した場合)。既定ではすべてのセグメントが出力ディレクトリに保持されます。
4.45.2 例
ffmpeg を使って、リアルタイムレートで output.hds ディレクトリへ HDS ファイルを生成する例:
ffmpeg -re -i INPUT -f hds -b:v 200k output.hds
4.46 hls
HTTP Live Streaming (HLS) 仕様に従って MPEG-TS をセグメント化する Apple の HTTP Live Streaming muxer。
プレイリストファイルを 1 つと、1 つ以上のセグメントファイルを生成します。出力ファイル名でプレイリストのファイル名を指定します。
既定では、生成する各セグメントに対してファイルを 1 つ作成します。これらのファイルはプレイリストと同じ名前に、連番と .ts 拡張子を付けたものになります。
エンコード時には closed GOP を要求し、セグメント時間の制約に収まるよう GOP サイズを設定してください。
例えば、ffmpeg で入力ファイルを変換するには:
ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8
この例では、プレイリスト out.m3u8 とセグメントファイル out0.ts、out1.ts、out2.ts などが生成されます。
segment muxer も参照してください。これはより汎用的で柔軟なセグメンターの実装を提供し、HLS セグメント化にも利用できます。
4.46.1 オプション
hls_init_time duration
最初のセグメントの目標長を設定します。既定値は 0 です。
duration は時間継続時間の指定でなければなりません。(ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual を参照してください。
最初の m3u8 リストでは、この時間が経過した後の最初のキーフレームでセグメントが切られます。最初のプレイリストが埋まった後は、ffmpeg は hls_time に等しい長さでセグメントを切ります。
hls_time duration
目標のセグメント長を設定します。既定値は 2 です。
duration は時間継続時間の指定でなければなりません。(ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual を参照してください。この時間が経過した後の最初のキーフレームでセグメントが切られます。
hls_list_size size
プレイリストのエントリ数の上限を設定します。0 を設定すると、リストファイルにはすべてのセグメントが含まれます。既定値は 5 です。
hls_delete_threshold size
hls_flags delete_segments が削除する前に、参照されなくなったセグメントをディスク上に保持する数を設定します。プレイリストで最近参照されていたセグメントをクライアントが引き続きダウンロードできるようにするには、この値を増やします。既定値は 1 で、hls_list_size+1 より古いセグメントが削除されることを意味します。
hls_start_number_source source
指定した source に従って、プレイリストのシーケンス番号(#EXT-X-MEDIA-SEQUENCE)を開始します。hls_flags single_file が設定されていない限り、セグメントおよび字幕ファイル名の開始シーケンス番号の元としても使用されます。いずれの場合も、hls_flags append_list が設定されていて、読み込んだプレイリストのシーケンス番号が指定した開始シーケンス番号より大きい場合は、その値が開始値として使用されます。
次の値を受け付けます:
generic(既定値)
start_number オプションの値に従って開始番号を設定します。
epoch
開始番号を、エポック(1970-01-01 00:00:00)からの秒数として設定します。
epoch_us
開始番号を、エポック(1970-01-01 00:00:00)からのマイクロ秒数として設定します。
datetime
開始番号を、現在の日時に基づき YYYYmmddHHMMSS 形式で設定します。例: 20161231235759。
start_number number
hls_start_number_source の値が generic のとき、プレイリストのシーケンス番号(#EXT-X-MEDIA-SEQUENCE)を指定した番号から開始します(これが既定の場合です)。hls_flags single_file が設定されていない限り、セグメントおよび字幕ファイル名の開始シーケンス番号も指定します。既定値は 0 です。
hls_allow_cache bool
クライアントがメディアセグメントをキャッシュしてよい(1)か、してはならない(0)かを明示的に設定します。
hls_base_url baseurl
プレイリストの各エントリに baseurl を付加します。絶対パスを含むプレイリストを生成するのに便利です。
プレイリストのシーケンス番号は各セグメントで一意でなければならない点に注意してください。これは、例えば wrap オプションを指定した場合に循環しうるセグメントファイル名のシーケンス番号とは別物です。
hls_segment_filename filename
セグメントのファイル名を設定します。hls_flags オプションに ‘single_file’ が設定されていない限り、filename はセグメント番号を付加する文字列フォーマットとして使われます。
例:
ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8
これはプレイリスト out.m3u8 とセグメントファイル file000.ts、file001.ts、file002.ts などを生成します。
filename にはフルパスまたは相対パスの指定を含められますが、m3u8 セグメントリストにはパスを除いたファイル名部分のみが含まれます。相対パスを指定した場合、生成されるセグメントファイルのパスはカレントワーキングディレクトリからの相対になります。strftime_mkdir が設定されている場合は、展開後の filename の値全体が m3u8 セグメントリストに書き込まれます。
var_stream_map で 2 つ以上の variant stream を設定する場合、ファイル名パターンには文字列 "%v" を含める必要があり、この文字列は生成されるセグメントファイル名における variant stream のインデックス位置に展開されます。
例:
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
-map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
-hls_segment_filename 'file_%v_%03d.ts' out_%v.m3u8
これはセグメントファイルの組 file_0_000.ts、file_0_001.ts、file_0_002.ts など、および file_1_000.ts、file_1_001.ts、file_1_002.ts などを生成します。
文字列 "%v" は filename 内か、ファイルを含む最後のディレクトリ名内のどちらか一方にのみ存在できます。(加えて、%v は最後のサブディレクトリ名またはファイル名内に複数回現れてもかまいません。)文字列 %v がディレクトリ名内にある場合、ディレクトリ名パターンを展開した後にサブディレクトリが作成されます。これにより、異なる variant stream に対応するセグメントをサブディレクトリ内に作成できます。
例:
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
-map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
-hls_segment_filename 'vs%v/file_%03d.ts' vs%v/out.m3u8
これはセグメントファイルの組 vs0/file_000.ts、vs0/file_001.ts、vs0/file_002.ts など、および vs1/file_000.ts、vs1/file_001.ts、vs1/file_002.ts などを生成します。
strftime bool
filename に対して strftime() を使い、ローカル時刻でセグメントのファイル名を展開します。このモードでもセグメント番号は利用できますが、使うには hls_flag に ‘second_level_segment_index’ を設定する必要があり、指定子は %%d になります。
例:
ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8
これはプレイリスト out.m3u8 とセグメントファイル file-20160215-1455569023.ts、file-20160215-1455569024.ts などを生成します。注: 一部のシステム/環境では %s 指定子が利用できません。strftime() のドキュメントを参照してください。
例:
ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8
これはプレイリスト out.m3u8 とセグメントファイル file-20160215-0001.ts、file-20160215-0002.ts などを生成します。
strftime_mkdir bool
strftime と併用すると、オプション hls_segment_filename の展開後の値に含まれるサブディレクトリをすべて作成します。
例:
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8
これはディレクトリ 201560215 を(存在しなければ)作成し、続いてプレイリスト out.m3u8 とセグメントファイル 20160215/file-20160215-1455569023.ts、20160215/file-20160215-1455569024.ts などを生成します。
例:
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8
これはディレクトリ階層 2016/02/15 を(いずれかが存在しなければ)作成し、続いてプレイリスト out.m3u8 とセグメントファイル 2016/02/15/file-20160215-1455569023.ts、2016/02/15/file-20160215-1455569024.ts などを生成します。
hls_segment_options options_list
: 区切りの key=value パラメータのリストで出力フォーマットのオプションを設定します。: 特殊文字を含む値はエスケープが必要です。
hls_key_info_file key_info_file
セグメント暗号化に key_info_file の情報を使用します。key_info_file の 1 行目は、プレイリストに書き込まれる鍵 URI を指定します。鍵 URL は再生中に暗号鍵へアクセスするために使われます。2 行目は、暗号化処理中に鍵を取得するための鍵ファイルのパスを指定します。鍵ファイルは、バイナリ形式の 16 オクテットを 1 つにまとめた配列として読み込まれます。任意の 3 行目は、暗号化に(既定の)セグメントシーケンス番号の代わりに使用する初期化ベクトル(IV)を 16 進文字列で指定します。key_info_file への変更は、新しい鍵/IV でのセグメント暗号化を引き起こし、hls_flags periodic_rekey が有効な場合は新しい鍵 URI/IV のエントリがプレイリストに追加されます。
key info ファイルの形式:
key URI
key file path
IV (optional)
鍵 URI の例:
http://server/file.key
/path/to/file.key
file.key
鍵ファイルパスの例:
file.key
/path/to/file.key
IV の例:
0123456789ABCDEF0123456789ABCDEF
key info ファイルの例:
http://server/file.key
/path/to/file.key
0123456789ABCDEF0123456789ABCDEF
シェルスクリプトの例:
#!/bin/sh
BASE_URL=${1:-'.'}
openssl rand 16 > file.key
echo $BASE_URL/file.key > file.keyinfo
echo file.key >> file.keyinfo
echo $(openssl rand -hex 16) >> file.keyinfo
ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \
-hls_key_info_file file.keyinfo out.m3u8
hls_enc bool
AES128 暗号化を有効(1)または無効(0)にします。有効にすると、生成される各セグメントが暗号化され、暗号鍵は playlist name.key として保存されます。
hls_enc_key key
セグメントを暗号化する 16 オクテットの鍵を指定します。既定ではランダムに生成されます。
hls_enc_key_url keyurl
設定すると、プレイリスト内の鍵ファイル名の前に baseurl の代わりに keyurl が付加されます。
hls_enc_iv iv
各セグメントに対して、自動生成される代わりに使用する 16 オクテットの初期化ベクトルを指定します。
hls_segment_type flags
取りうる値:
‘mpegts’
セグメントファイルを MPEG-2 Transport Stream 形式で出力します。これはすべての HLS バージョンと互換性があります。
‘fmp4’
セグメントファイルを、MPEG-DASH に似たフラグメント化 MP4 形式で出力します。fmp4 ファイルは HLS バージョン 7 以降で使用できます。
hls_fmp4_init_filename filename
フラグメントファイルのヘッダーファイルのファイル名を設定します。既定のファイル名は init.mp4 です。
strftime が有効な場合、filename はローカル時刻でセグメントのファイル名に展開されます。
例:
ffmpeg -i in.nut -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8
これは 1602678741_init.mp4 のような init を生成します。
hls_fmp4_init_resend bool
m3u8 ファイルが更新されるたびに init ファイルを毎回再送します。既定は 0 です。
var_stream_map で 2 つ以上の variant stream を設定する場合、ファイル名パターンには文字列 "%v" を含める必要があり、この文字列は生成される init ファイル名における variant stream のインデックス位置を指定します。文字列 "%v" は filename 内か、ファイルを含む最後のディレクトリ名内に存在できます。その文字列がディレクトリ名内にある場合、ディレクトリ名パターンを展開した後にサブディレクトリが作成されます。これにより、異なる variant stream に対応する init ファイルをサブディレクトリ内に作成できます。
hls_flags flags
取りうる値:
‘single_file’
このフラグを設定すると、muxer はすべてのセグメントを単一の MPEG-TS ファイルに格納し、プレイリストではバイト範囲を使用します。この方法で生成された HLS プレイリストはバージョン番号 4 になります。
例:
ffmpeg -i in.nut -hls_flags single_file out.m3u8
これはプレイリスト out.m3u8 と単一のセグメントファイル out.ts を生成します。
‘delete_segments’
プレイリストから削除されたセグメントファイルは、セグメントの継続時間とプレイリストの継続時間を足した時間が経過した後に削除されます。
‘append_list’
古いセグメントリストの末尾に新しいセグメントを追加し、古いセグメントリストから #EXT-X-ENDLIST を削除します。
‘round_durations’
プレイリストファイルのセグメント情報内の継続時間情報を、浮動小数点ではなく整数値に丸めます。より高い HLS バージョンを必要とする他の機能がなければ、これにより ffmpeg は HLS バージョン 2 の m3u8 を出力できます。
‘discont_start’
最初のセグメントの情報の前に、#EXT-X-DISCONTINUITY タグをプレイリストに追加します。
‘omit_endlist’
プレイリストの末尾に EXT-X-ENDLIST タグを付加しません。
‘periodic_rekey’
hls_key_info_file で指定したファイルが定期的にチェックされ、暗号化情報の更新が検出されます。AES 暗号鍵を含むこのファイルは、必ずアトミックに置き換えてください。
‘independent_segments’
映像セグメントを持ち、そのプレイリストのすべてのセグメントがキーフレームで始まることが保証されているプレイリストに、#EXT-X-INDEPENDENT-SEGMENTS タグを追加します。
‘iframes_only’
映像セグメントを持ち、#EXT-X-BYTERANGE モードで I フレームのみを再生できるプレイリストに、#EXT-X-I-FRAMES-ONLY タグを追加します。
‘split_by_time’
セグメントがキーフレーム以外のフレームで始まることを許可します。これはキーフレーム間の時間が不均一な場合に一部のプレーヤーでの挙動を改善しますが、他のプレーヤーでは悪化させることもあり、シーク中に不具合を引き起こす場合があります。このフラグは hls_time オプションと併用してください。
‘program_date_time’
EXT-X-PROGRAM-DATE-TIME タグを生成します。
‘second_level_segment_index’
strftime オプションが有効なとき、hls_segment_filename オプションの式で日付/時刻の値に加えて %%d としてセグメントインデックスを使えるようにします。先頭に 0 を付けた固定幅の数値を得るには、%%0xd フォーマットが利用でき、x は必要な幅です。
‘second_level_segment_size’
strftime が有効なとき、hls_segment_filename オプションの式で日付/時刻の値に加えて %%s として(バイト単位で数えた)セグメントサイズを使えるようにします。先頭に 0 を付けた固定幅の数値を得るには、%%0xs フォーマットが利用でき、x は必要な幅です。
‘second_level_segment_duration’
strftime が有効なとき、hls_segment_filename オプションの式で日付/時刻の値に加えて %%t として(マイクロ秒単位で計算した)セグメントの継続時間を使えるようにします。先頭に 0 を付けた固定幅の数値を得るには、%%0xt フォーマットが利用でき、x は必要な幅です。
例:
ffmpeg -i sample.mpeg \
-f hls -hls_time 3 -hls_list_size 5 \
-hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \
-strftime 1 -strftime_mkdir 1 -hls_segment_filename "segment_%Y%m%d%H%M%S_%%04d_%%08s_%%013t.ts" stream.m3u8
これは次のようなセグメントを生成します: segment_20170102194334_0003_00122200_0000003000000.ts、segment_20170102194334_0004_00120072_0000003000000.ts など。
‘temp_file’
セグメントデータを filename.tmp に書き込み、セグメントが完成したときにのみ filename にリネームします。
セグメントを配信する Web サーバーは、*.tmp へのリクエストを拒否するよう設定することで、m3u8 プレイリストに追加される前の作成中セグメントへのアクセスを防げます。
このフラグは m3u8 プレイリストファイルの作成方法にも影響します。このフラグが設定されている場合、すべてのプレイリストファイルは、セグメントと同様に一時ファイルに書き込まれてから完成後にリネームされます。ただし、file プロトコルを使い、hls_playlist_type が ‘vod’ 以外のプレイリストは、このフラグに関係なく常に一時ファイルに書き込まれます。
master_pl_name で指定したマスタープレイリストファイルがあり、file プロトコルを使う場合、master_pl_publish_rate の値が 0 以外であれば、このフラグに関係なく常に一時ファイルに書き込まれます。
hls_playlist_type type
type が ‘event’ の場合、m3u8 ヘッダーに #EXT-X-PLAYLIST-TYPE:EVENT を出力します。これは hls_list_size を 0 に強制し、プレイリストには追記のみが可能になります。
type が ‘vod’ の場合、m3u8 ヘッダーに #EXT-X-PLAYLIST-TYPE:VOD を出力します。これは hls_list_size を 0 に強制し、プレイリストは変更してはならなくなります。
method method
指定した HTTP メソッドを使って hls ファイルを作成します。
例:
ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8
これはすべての mpegts セグメントファイルを HTTP PUT メソッドで HTTP サーバーにアップロードし、同じメソッドを使って refresh 回ごとに m3u8 ファイルを更新します。HTTP サーバーがファイルアップロードのために指定したメソッドに対応している必要がある点に注意してください。
http_user_agent agent
HTTP ヘッダーの User-Agent フィールドを上書きします。HTTP 出力にのみ適用されます。
var_stream_map stream_map
音声・映像・字幕のストリームを異なる variant stream にどうグループ化するかを定義するマップ文字列を指定します。variant stream のグループはスペースで区切ります。
想定する文字列フォーマットは "a:0,v:0 a:1,v:1 ...." のようになります。ここで a:、v:、s: はそれぞれ音声・映像・字幕のストリームを指定するキーです。許可される値は 0 から 9 です(実用上の理由による制限にすぎません)。
variant stream が 2 つ以上ある場合、出力ファイル名パターンには文字列 "%v" を含める必要があります。この文字列は、出力メディアプレイリストのファイル名における variant stream のインデックス位置を指定します。文字列 "%v" は filename 内か、ファイルを含む最後のディレクトリ名内に存在できます。その文字列がディレクトリ名内にある場合、ディレクトリ名パターンを展開した後にサブディレクトリが作成されます。これにより、variant stream をサブディレクトリ内に作成できます。
以下にいくつか例を示します。
-
2 つの hls variant stream を作成します。1 つ目の variant stream はビットレート 1000k の映像ストリームとビットレート 64k の音声ストリームを含み、2 つ目の variant stream はビットレート 256k の映像ストリームとビットレート 32k の音声ストリームを含みます。ここでは out_0.m3u8 と out_1.m3u8 という名前の 2 つのメディアプレイリストが作成されます。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/out_%v.m3u8 -
結果のファイル名にインデックスではなく意味のあるテキストを使いたい場合は、各 variant または一部の variant に名前を指定できます。次の例は前の例と同様に 2 つの hls variant stream を作成します。ただしここでは out_my_hd.m3u8 と out_my_sd.m3u8 という名前の 2 つのメディアプレイリストが作成されます。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0,name:my_hd v:1,a:1,name:my_sd" \ http://example.com/live/out_%v.m3u8 -
3 つの hls variant stream を作成します。1 つ目の variant stream は映像ビットレート 1000k の映像のみのストリーム、2 つ目の variant stream はビットレート 64k の音声のみのストリーム、3 つ目の variant stream はビットレート 256k の映像のみのストリームになります。ここでは out_0.m3u8、out_1.m3u8、out_2.m3u8 という名前の 3 つのメディアプレイリストが作成されます。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k \ -map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0 a:0 v:1" \ http://example.com/live/out_%v.m3u8 -
variant stream をサブディレクトリ内に作成します。ここでは 1 つ目のメディアプレイリストが http://example.com/live/vs_0/out.m3u8 に、2 つ目が http://example.com/live/vs_1/out.m3u8 に作成されます。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/vs_%v/out.m3u8 -
音声のみ 2 つと映像のみ 2 つの variant stream を作成します。マスタープレイリストでは各 variant stream の
#EXT-X-STREAM-INFタグに加えて、2 つの音声のみの variant stream に対して#EXT-X-MEDIAタグも追加され、これらは音声グループ名 ’aud_low’ と ’aud_high’ で 2 つの映像のみの variant stream にマッピングされます。既定では、すべてのエンコード済みストリームを含む単一の hls variant が作成されます。ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k -b:v:1 3000k \ -map 0:a -map 0:a -map 0:v -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low a:1,agroup:aud_high v:0,agroup:aud_low v:1,agroup:aud_high" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8 -
音声のみ 2 つと映像のみ 1 つの variant stream を作成します。マスタープレイリストでは各 variant stream の
#EXT-X-STREAM-INFタグに加えて、2 つの音声のみの variant stream に対して#EXT-X-MEDIAタグも追加され、これらは音声グループ名 ’aud_low’ で 1 つの映像のみの variant stream にマッピングされ、音声グループの default 状態は NO または YES になります。既定では、すべてのエンコード済みストリームを含む単一の hls variant が作成されます。ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes a:1,agroup:aud_low v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8 -
音声のみ 2 つと映像のみ 1 つの variant stream を作成します。マスタープレイリストでは各 variant stream の
#EXT-X-STREAM-INFタグに加えて、2 つの音声のみの variant stream に対して#EXT-X-MEDIAタグも追加され、これらは音声グループ名 ’aud_low’ で 1 つの映像のみの variant stream にマッピングされ、音声グループの default 状態は NO または YES、さらに一方の音声には言語 ENG、もう一方の音声言語には CHN という名前が付けられます。既定では、すべてのエンコード済みストリームを含む単一の hls variant が作成されます。ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_low,language:CHN v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8 -
単一の variant stream を作成します。マスタープレイリストに
TYPE=SUBTITLESの#EXT-X-MEDIAタグを、webvtt 字幕グループ名 ’subtitle’ と任意の字幕名(例: ’English’)を付けて追加します。入力ファイルにテキスト字幕ストリームが少なくとも 1 つあることを確認してください。ffmpeg -y -i input_with_subtitle.mkv \ -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \ -b:a:0 256k \ -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \ -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle,sname:English" \ -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \ 10 -master_pl_publish_rate 10 -hls_flags \ delete_segments+discont_start+split_by_time ./tmp/video.m3u8
cc_stream_map cc_stream_map
異なる closed captions グループとその属性を指定するマップ文字列です。closed captions のストリームグループはスペースで区切ります。
想定する文字列フォーマットは "ccgroup:
このオプションで設定した closed captions グループは、var_stream_map 文字列内で同じ ’ccgroup’ 名を与えることにより、異なる variant stream にマッピングされます。
例:
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
-a53cc:0 1 -a53cc:1 1 \
-map 0:v -map 0:a -map 0:v -map 0:a -f hls \
-cc_stream_map "ccgroup:cc,instreamid:CC1,language:en ccgroup:cc,instreamid:CC2,language:sp" \
-var_stream_map "v:0,a:0,ccgroup:cc v:1,a:1,ccgroup:cc" \
-master_pl_name master.m3u8 \
http://example.com/live/out_%v.m3u8
これは INSTREAM-ID ’CC1’ と ’CC2’ に対して TYPE=CLOSED-CAPTIONS の #EXT-X-MEDIA タグを 2 つマスタープレイリストに追加します。また、2 つの出力 variant stream にグループ名 ’cc’ の CLOSED-CAPTIONS 属性を追加します。
var_stream_map が設定されていない場合、cc_stream_map 内で最初に利用可能な ccgroup が出力 variant stream にマッピングされます。
例:
ffmpeg -re -i in.ts -b:v 1000k -b:a 64k -a53cc 1 -f hls \
-cc_stream_map "ccgroup:cc,instreamid:CC1,language:en" \
-master_pl_name master.m3u8 \
http://example.com/live/out.m3u8
これは、グループ名 ’cc’、言語 ’en’(英語)、INSTREAM-ID ’CC1’ を持つ TYPE=CLOSED-CAPTIONS の #EXT-X-MEDIA タグをマスタープレイリストに追加します。また、出力 variant stream にグループ名 ’cc’ の CLOSED-CAPTIONS 属性を追加します。
master_pl_name name
指定した名前で HLS マスタープレイリストを作成します。
例:
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 http://example.com/live/out.m3u8
これは master.m3u8 という名前の HLS マスタープレイリストを作成し、http://example.com/live/ で公開します。
master_pl_publish_rate count
指定したセグメント間隔の数ごとに、マスタープレイリストを繰り返し公開します。
例:
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 \
-hls_time 2 -master_pl_publish_rate 30 http://example.com/live/out.m3u8
これは master.m3u8 という名前の HLS マスタープレイリストを作成し、30 セグメントごと、すなわち 60 秒ごとに繰り返し公開し続けます。
http_persistent bool
持続的 HTTP 接続を使用します。HTTP 出力にのみ適用されます。
timeout timeout
ソケット I/O 操作のタイムアウトを設定します。HTTP 出力にのみ適用されます。
ignore_io_errors bool
オープン・書き込み・削除中の IO エラーを無視します。ネットワーク出力での長時間実行に便利です。
headers headers
カスタム HTTP ヘッダーを設定します。組み込みの既定ヘッダーを上書きできます。HTTP 出力にのみ適用されます。
4.47 iamf
Immersive Audio Model and Formats (IAMF) muxer。
IAMF は、ストリーミングとオフラインの両方のアプリケーションで、幅広いデバイス上で提示するための没入型音声コンテンツを提供するために使われます。こうしたアプリケーションには、インターネット音声ストリーミング、マルチキャスト/ブロードキャストサービス、ファイルダウンロード、ゲーム、コミュニケーション、仮想現実・拡張現実などがあります。これらのアプリケーションでは、音声がヘッドホン、携帯電話、タブレット、テレビ、サウンドバー、ホームシアターシステム、大画面など、幅広いデバイスで再生されることがあります。
このフォーマットは Alliance for Open Media によって推進・設計されました。
このフォーマットの詳細は https://aomedia.org/iamf/ を参照してください。
4.48 ico
ICO ファイル muxer。
Microsoft のアイコンファイル形式(ICO)には、注意すべきいくつかの厳しい制限があります:
- サイズはどの次元でも 256 ピクセルを超えられません
- BMP 画像と PNG 画像のみ格納できます
-
BMP 画像を使う場合、次のいずれかの pixel format でなければなりません:
BMP Bit Depth FFmpeg Pixel Format 1bit pal8 4bit pal8 8bit pal8 16bit rgb555le 24bit bgr24 32bit bgra -
BMP 画像を使う場合、BITMAPINFOHEADER DIB ヘッダーを使わなければなりません
- PNG 画像を使う場合、rgba pixel format を使わなければなりません
4.49 ilbc
Internet Low Bitrate Codec (iLBC) raw muxer。
単一の ‘ilbc’ 音声ストリームを受け付けます。
4.50 image2, image2pipe
画像ファイル muxer。
‘image2’ muxer は映像フレームを画像ファイルに書き出します。
出力ファイル名はパターンで指定し、連番付きの一連のファイルを生成するのに使えます。パターンには文字列 "%d" または "%0Nd" を含められ、この文字列はファイル名内で番号を表す文字の位置を指定します。"%0Nd" の形式を使った場合、各ファイル名内で番号を表す文字列は N 桁まで 0 埋めされます。リテラルの ’%’ 文字は、パターン内で文字列 "%%" として指定できます。
パターンに "%d" または "%0Nd" が含まれる場合、指定したファイルリストの最初のファイル名には番号 1 が含まれ、それ以降の番号はすべて連続します。
パターンには、書き出す画像ファイルのフォーマットを自動的に判別するために使われるサフィックスを含められます。
例えばパターン "img-%03d.bmp" は、img-001.bmp、img-002.bmp、…、img-010.bmp などの形式のファイル名の並びを指定します。パターン "img%%-%d.jpg" は、img%-1.jpg、img%-2.jpg、…、img%-10.jpg などの形式のファイル名の並びを指定します。
この画像 muxer は .Y.U.V 画像ファイル形式に対応しています。この形式は、各画像フレームが YUV420P の各成分ごとに 3 つのファイルから成る点で特殊です。この画像ファイル形式を読み書きするには、’.Y’ ファイルの名前を指定します。muxer は必要に応じて ’.U’ ファイルと ’.V’ ファイルを自動的に開きます。
‘image2pipe’ muxer は ‘image2’ muxer と同じオプションを受け付けますが、実際に保存されるファイルではなくコマンドの出力に書き込むことを前提としているため、パターンの検証と展開を無視します。
4.50.1 オプション
frame_pts bool
1 に設定すると、ファイル名をパケットの PTS(presentation time stamp)で展開します。既定値は 0 です。
start_number count
指定した番号から並びを開始します。既定値は 1 です。
update bool
1 に設定すると、ファイル名は常にパターンではなく単なるファイル名として解釈され、対応するファイルが新しい画像で継続的に上書きされます。既定値は 0 です。
strftime bool
1 に設定すると、strftime() の日付・時刻情報でファイル名を展開します。既定値は 0 です。
atomic_writing bool
出力を一時ファイルに書き込み、書き込み完了後に目的のファイル名にリネームします。既定では無効です。
protocol_opts options_list
プロトコルオプションを : 区切りの key=value パラメータのリストとして設定します。: 特殊文字を含む値はエスケープが必要です。
4.50.2 例
ffmpegを使って、入力映像から 1 秒ごとに 1 枚の画像を取り出し、ファイル img-001.jpeg、img-002.jpeg、… の並びを作成します:ffmpeg -i in.avi -fps_mode cfr -r 1 -f image2 'img-%03d.jpeg'
ffmpeg では、-f オプションでフォーマットを指定せず、出力ファイル名が画像ファイル形式を指定している場合、image2 muxer が自動的に選択されるため、前のコマンドは次のように書けます:
ffmpeg -i in.avi -fps_mode cfr -r 1 'img-%03d.jpeg'
また、パターンに必ずしも "%d" や "%0Nd" を含める必要はありません。例えば入力映像の冒頭から単一の画像ファイル img.jpeg を作成するには、次のコマンドが使えます:
ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
- strftime オプションを使うと、日付・時刻情報でファイル名を展開できます。構文は
strftime()関数のドキュメントを確認してください。
strftime() の "%Y-%m-%d_%H-%M-%S" パターンから画像ファイルを生成するには、次の ffmpeg コマンドが使えます:
ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
-
現在のフレームの PTS でファイル名を設定します:
ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg -
デスクトップディレクトリの内容を 1 秒ごとに WebDAV サーバーへ直接公開します:
ffmpeg -f x11grab -framerate 1 -i :0.0 -q:v 6 -update 1 -protocol_opts method=PUT http://example.com/desktop.jpg
4.51 ircam
Berkeley / IRCAM / CARL Sound Filesystem (BICSF) フォーマットの muxer。
Berkeley/IRCAM/CARL Sound Format は1980年代に開発されたもので、それ以前のいくつかのサウンドファイルフォーマットやシステムを統合した成果です。統合元には、UCサンディエゴの Computer Audio Research Lab (CARL) で Dr Gareth Loy が開発した csound システム、パリの Institut de Recherche et Coordination Acoustique / Musique で Rob Gross と Dan Timis が開発した IRCAM サウンドファイルシステム、そして Berkeley Fast Filesystem が含まれます。
これはもともと Berkeley/IRCAM/CARL Sound Filesystem の一部として開発されました。これは Berkeley UNIX 上で動作する音声アプリケーション向けのファイルシステムを実装するためのプログラム群です。学術的な音楽研究の分野で特に広く使われ、初期のコンピュータ生成楽曲の制作にも幾度となく用いられました。
この muxer は PCM データを含む音声ストリームを1本だけ受け付けます。
4.52 ivf
On2 IVF muxer。
IVF は On2 Technologies(旧称 Duck Corporation)が、社内で開発したコーデックを格納するために開発したものです。
この muxer は ‘vp8’、‘vp9’、‘av1’ のいずれかの映像ストリームを1本だけ受け付けます。
4.53 jacosub
JACOsub 字幕フォーマットの muxer。
この muxer は ‘jacosub’ 字幕ストリームを1本だけ受け付けます。
フォーマットの詳細については http://unicorn.us.com/jacosub/jscripts.html を参照してください。
4.54 kvag
Simon & Schuster Interactive VAG muxer。
この独自の VAG コンテナは、"Real War" や "Real War: Rogue States" といった一部の Simon & Schuster Interactive のゲームで使われています。
この muxer は ‘adpcm_ima_ssi’ 音声ストリームを1本だけ受け付けます。
4.55 lc3
Bluetooth SIG Low Complexity Communication Codec audio (LC3)、または ETSI TS 103 634 Low Complexity Communication Codec plus (LC3plus)。
この muxer は ‘lc3’ 音声ストリームを1本だけ受け付けます。
4.56 lrc
LRC 歌詞ファイルフォーマットの muxer。
LRC(LyRiCs の略)は、楽曲の歌詞を MP3、Vorbis、MIDI などの音声ファイルと同期させるコンピュータ用ファイルフォーマットです。
この muxer は ‘subrip’ または ‘text’ 字幕ストリームを1本だけ受け付けます。
4.56.1 Options
precision number
タイムスタンプの小数(秒未満)部分に使う小数桁数を設定します。範囲は 1 から 6。既定値は 2、すなわちセンチ秒です。
4.56.2 Metadata
以下のメタデータタグは、フォーマット対応のメタデータに変換されます。
title album artist author creator encoder encoder_version
‘encoder_version’ が明示的に設定されていない場合は、libavformat のバージョンが自動的に設定されます。
4.57 matroska
Matroska コンテナの muxer。
この muxer は matroska および webm コンテナの仕様を実装しています。
4.57.1 Metadata
この muxer で認識されるメタデータ設定は以下のとおりです。
title
単一トラックに付与するタイトル名を設定します。これは添付ファイルとして書き出されるストリームの FileDescription 要素にマッピングされます。
language
トラックの言語を Matroska の言語形式で指定します。
言語は、3文字の文献用 ISO-639-2(ISO 639-2/B)形式(フランス語なら "fre" など)か、言語の特殊性に対応するために言語コードと国コードを組み合わせた形式(カナダのフランス語なら "fre-ca" など)のいずれかを指定できます。
stereo_mode
1本の映像トラック内における2つの視点のステレオ3D映像レイアウトを設定します。
認識される値は以下のとおりです。
‘mono’
映像はステレオではありません
‘left_right’
両方の視点が左右に並べて配置され、左目用の視点が左側にあります
‘bottom_top’
両方の視点が上下に配置され、左目用の視点が下にあります
‘top_bottom’
両方の視点が上下に配置され、左目用の視点が上にあります
‘checkerboard_rl’
各視点が市松模様にインターリーブされて配置され、左目用の視点が先頭になります
‘checkerboard_lr’
各視点が市松模様にインターリーブされて配置され、右目用の視点が先頭になります
‘row_interleaved_rl’
各視点が行単位のインターリーブで構成され、右目用の視点が先頭の行になります
‘row_interleaved_lr’
各視点が行単位のインターリーブで構成され、左目用の視点が先頭の行になります
‘col_interleaved_rl’
両方の視点が列単位のインターリーブで配置され、右目用の視点が先頭の列になります
‘col_interleaved_lr’
両方の視点が列単位のインターリーブで配置され、左目用の視点が先頭の列になります
‘anaglyph_cyan_red’
すべてのフレームがアナグリフ形式で、赤シアンのフィルタを通して見られます
‘right_left’
両方の視点が左右に並べて配置され、右目用の視点が左側にあります
‘anaglyph_green_magenta’
すべてのフレームがアナグリフ形式で、緑マゼンタのフィルタを通して見られます
‘block_lr’
両目が1つの Block にレース(交互配置)され、左目用の視点が先頭になります
‘block_rl’
両目が1つの Block にレース(交互配置)され、右目用の視点が先頭になります
例えば、次のコマンドラインで3D WebM クリップを作成します。
ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
4.57.2 Options
reserve_index_space size
既定では、この muxer はシーク用のインデックス(Matroska の用語では cues)をファイルの末尾に書き込みます。ファイルの先頭でインデックス用にどれだけのスペースを空けておけばよいかを事前に知ることができないためです。しかし、シークは可能だが遅いストリーミングのような一部の用途では、インデックスをファイルの先頭に置くのが有用な場合があります。
このオプションを0以外の値に設定すると、muxer はファイルヘッダに size バイトのスペースを予約し、muxing 完了時にそこへ cues を書き込もうとします。予約したスペースが不足した場合、Cues は書き込まれず、ファイルはファイナライズされ、trailer の書き込み時にエラーが返されます。多くの用途では、映像1時間あたり約50kB が安全なサイズです。
cues は出力がシーク可能な場合にのみ書き込まれる点に注意してください。シーク不可能な場合、このオプションは効果を持ちません。
cues_to_front bool
設定すると、muxer は必要に応じて主データをずらすことでファイルの先頭にインデックスを書き込みます。これは reserve_index_space と組み合わせることができ、その場合は最初に予約したスペースが不足したと判明したときにのみデータがずらされます。
このオプションは出力がシーク不可能な場合は無視されます。
cluster_size_limit size
1つのクラスタに格納するバイト数を、指定した値までに制限します。
指定しない場合、制限は妥当なハードコードされた固定値に自動設定されます。
cluster_time_limit duration
1つのクラスタに格納するミリ秒数を、指定した値までに制限します。
指定しない場合、制限は妥当なハードコードされた固定値に自動設定されます。
dash bool
WebM DASH 仕様に準拠した WebM ファイルを作成します。既定では false に設定されています。
dash_track_number index
DASH ストリームのトラック番号。既定では 1 に設定されています。
live bool
ライブストリームであるとみなしてファイルを書き込みます。既定では false に設定されています。
allow_raw_vfw bool
raw VFW モードを許可します。既定では false に設定されています。
flipped_raw_rgb bool
true に設定すると、raw RGB ビットマップに対して正の高さを格納します。これはビットマップがボトムアップで格納されていることを示します。このオプションはビットマップを反転しない点に注意してください。反転は事前に手動で行う必要があり、例えば ‘vflip’ フィルタを使って行います。既定値は false で、ビットマップがトップダウンで格納されていることを示します。
write_crc32 bool
すべての Level 1 要素の内部に CRC32 要素を書き込みます。既定では true に設定されています。このオプションは WebM では無視されます。
default_mode mode
出力トラックの FlagDefault をどのように設定するかを制御します。これはプレイヤーが既定で再生すべきトラックに影響します。既定のモードは ‘passthrough’。
‘infer’
disposition が default のすべてのトラックに FlagDefault が設定されます。さらに、各種別のトラック(音声、映像、字幕)について、その種別の disposition default のトラックが1つも存在しない場合は、その種別の最初のトラックが(存在すれば)default としてマークされます。これにより、default トラックという概念を持たないコンテナを入力とした場合でも、default フラグが妥当な形で設定されることが保証されます。
‘infer_no_subs’
このモードは infer と同じですが、disposition が default の字幕トラックが存在しない場合、どの字幕トラックも default としてマークされない点が異なります。
‘passthrough’
このモードでは、対応するストリームの disposition に AV_DISPOSITION_DEFAULT フラグが設定されている場合に限り、FlagDefault が設定されます。
4.58 md5
MD5 テスト用フォーマット。
これは hash muxer の派生です。hash muxer とは異なり、既定で MD5 ハッシュ関数を使用します。
hash および framemd5 の muxer も参照してください。
4.58.1 Examples
-
入力を raw な音声・映像に変換した MD5 ハッシュを計算し、out.md5 ファイルに格納するには次のようにします。
ffmpeg -i INPUT -f md5 out.md5 -
MD5 ハッシュを標準出力に表示するには次のようにします。
ffmpeg -i INPUT -f md5 -
4.59 mcc
MacCaption MCC ファイル用の muxer。MCC のバージョン 1.0 および 2.0 をサポートします。MCC ファイルは VANC データを格納するもので、クローズドキャプション(EIA-608 および CEA-708)、補助タイムコード、パンスキャンデータなどを含めることができます。
4.59.1 Options
muxer のオプションは以下のとおりです。
override_time_code_rate
出力の Time Code Rate 値を上書きします。既定ではストリームの time_base から推定しようとしますが、これはしばしばうまくいきません。
use_u_alias
バイト列 E1h 00h 00h 00h に対して U エイリアスを使用します。一部の .mcc ファイルで、ゼロバイトが2個か3個かについて食い違いがあるため、既定では無効になっています。
mcc_version
MCC ファイルフォーマットのバージョン。1 か 2 のいずれかでなければならず、既定値は 2 です。
creation_program
作成プログラム。既定値はこのバージョンの FFmpeg です。
creation_time
作成日時。既定値は現在時刻です。
4.59.2 Examples
-
MXF ファイルから MXF
SMPTE_436M_ANCストリームを抽出し、30 fps で MCC ファイルに書き出します。ffmpeg -i input.mxf -c copy -map 0:d -override_time_code_rate 30 out.mcc -
.mp4 ファイルから EIA-608/CTA-708 のクローズドキャプションを抽出し、29.97 fps で MCC ファイルに書き出します。
ffmpeg -f lavfi -i "movie=input.mp4[out+subcc]" -c:s copy -map 0:s -override_time_code_rate 30000/1001 out.mcc
4.60 microdvd
MicroDVD 字幕フォーマットの muxer。
この muxer は ‘microdvd’ 字幕ストリームを1本だけ受け付けます。
4.61 mmf
Synthetic music Mobile Application Format (SMAF) フォーマットの muxer。
SMAF は、携帯電話や携帯情報端末などの携帯型電子機器向けに Yamaha が規定した音楽データフォーマットです。
この muxer は ‘adpcm_yamaha’ 音声ストリームを1本だけ受け付けます。
4.62 mp3
MP3 muxer は raw な MP3 ストリームを書き出し、以下のオプション機能を備えます。
- 先頭の ID3v2 メタデータヘッダ(既定で有効)。バージョン 2.3 と 2.4 をサポートし、
id3v2_versionプライベートオプションでどちらを使うか(3 か 4)を制御します。id3v2_versionを 0 に設定すると ID3v2 ヘッダは完全に無効になります。
この muxer は ID3v2 ヘッダへの添付画像(APIC フレーム)の書き込みをサポートします。画像は単一パケットの映像ストリームの形で muxer に与えられます。そのようなストリームは任意の本数を指定でき、それぞれが1つの APIC フレームに対応します。ストリームのメタデータタグ title と comment は、それぞれ APIC の説明と画像種別にマッピングされます。許可される画像種別については http://id3.org/id3v2.4.0-frames を参照してください。
APIC フレームは先頭に書き込まれなければならない点に注意してください。そのため muxer は、すべての画像を受け取るまで音声フレームをバッファリングします。したがって、過剰なバッファリングを避けるため、画像はできるだけ早く与えることが推奨されます。
- ID3v2 ヘッダ(存在する場合)の直後に置かれる Xing/LAME フレーム。既定で有効ですが、出力がシーク可能な場合にのみ書き込まれます。
write_xingプライベートオプションで無効にできます。このフレームには、音声の長さやエンコーダ遅延など、デコーダに役立つ可能性のあるさまざまな情報が含まれます。 - ファイル末尾のレガシーな ID3v1 タグ(既定で無効)。
write_id3v1プライベートオプションで有効にできますが、その機能は非常に限られているため、使用は推奨されません。
例:
ID3v2.3 ヘッダと ID3v1 フッタを付けた mp3 を書き出します。
ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
mp3 ファイルに画像を添付するには、map で音声ストリームと画像ストリームの両方を選択します。
ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1
-metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3
追加機能を一切付けない「クリーンな」MP3 を書き出します。
ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3
4.63 mpegts
MPEG トランスポートストリームの muxer。
この muxer は ISO 13818-1 と ETSI EN 300 468 の一部を実装しています。
mpegts muxer で認識されるメタデータ設定は service_provider と service_name。設定されていない場合、service_provider の既定値は ‘FFmpeg’、service_name の既定値は ‘Service01’ となります。
4.63.1 Options
muxer のオプションは以下のとおりです。
mpegts_transport_stream_id integer
‘transport_stream_id’ を設定します。これは DVB におけるトランスポンダを識別します。既定値は 0x0001 です。
mpegts_original_network_id integer
‘original_network_id’ を設定します。これは DVB におけるネットワークの一意な識別子です。主な用途は、‘Original_Network_ID, Transport_Stream_ID’ という経路を通じてサービスを一意に識別することです。既定値は 0xff01 です。
mpegts_service_id integer
‘service_id’(DVB では program とも呼ばれる)を設定します。既定値は 0x0001 です。
mpegts_service_type integer
program の ‘service_type’ を設定します。既定値は digital_tv です。以下のオプションを受け付けます。
‘hex_value’
ETSI 300 468 で定義された 0x01 から 0xff までの任意の16進数値。
‘digital_tv’
デジタルテレビサービス。
‘digital_radio’
デジタルラジオサービス。
‘teletext’
テレテキストサービス。
‘advanced_codec_digital_radio’
Advanced Codec デジタルラジオサービス。
‘mpeg2_digital_hdtv’
MPEG2 デジタル HDTV サービス。
‘advanced_codec_digital_sdtv’
Advanced Codec デジタル SDTV サービス。
‘advanced_codec_digital_hdtv’
Advanced Codec デジタル HDTV サービス。
‘hevc_digital_hdtv’
HEVC デジタルテレビサービス。
mpegts_pmt_start_pid integer
PMT 用の先頭 PID を設定します。既定値は 0x1000、最小値は 0x0020、最大値は 0x1ffa です。このオプションは、PMT PID が 0x0100 に固定される m2ts モードでは効果を持ちません。
mpegts_start_pid integer
エレメンタリストリーム用の先頭 PID を設定します。既定値は 0x0100、最小値は 0x0020、最大値は 0x1ffa です。このオプションは、エレメンタリストリームの PID が固定される m2ts モードでは効果を持ちません。
mpegts_m2ts_mode boolean
1 に設定すると m2ts モードを有効にします。既定値は -1 で、m2ts モードは無効です。
muxrate integer
一定の muxrate を設定します。既定は VBR です。
pes_payload_size integer
PES パケットのペイロードの最小値をバイト単位で設定します。既定値は 2930 です。
mpegts_flags flags
mpegts フラグを設定します。以下のオプションを受け付けます。
‘resend_headers’
次のパケットを書き込む前に PAT/PMT を再送します。
‘latm’
AAC に LATM パケット化を使用します。
‘pat_pmt_at_frames’
各映像フレームごとに PAT と PMT を再送します。
‘system_b’
System A(ATSC)ではなく System B(DVB)に準拠します。
‘initial_discontinuity’
各ストリームの最初のパケットを discontinuity としてマークします。
‘nit’
NIT テーブルを送出します。
‘omit_rai’
random access indicator の書き込みを無効にします。
mpegts_copyts boolean
値を 1 に設定すると、元のタイムスタンプを保持します。既定値は -1 で、タイムスタンプを0から始まるようにずらします。
omit_video_pes_length boolean
映像パケットの PES パケット長を省略します。既定値は 1(true)です。
pcr_period integer
PCR の既定の再送時間をミリ秒単位で上書きします。既定値は -1 で、PCR の間隔が自動的に決定されることを意味します。CBR ストリームには 20 ms が使われ、VBR ストリームには 100 ms 未満となるフレーム長の最大の倍数が使われます。
pat_period duration
PAT/PMT テーブル間の最大間隔を秒単位で指定します。既定値は 0.1 です。
sdt_period duration
SDT テーブル間の最大間隔を秒単位で指定します。既定値は 0.5 です。
nit_period duration
NIT テーブル間の最大間隔を秒単位で指定します。既定値は 0.5 です。
tables_version integer
PAT、PMT、SDT、NIT のバージョンを設定します(既定値は 0、有効な値は 0 から 31 まで)。このオプションにより、標準的な受信機が変更を検出できるよう、ストリーム構造を更新できます。そのためには、出力 AVFormatContext を開き直す(API を使用している場合)か、ffmpeg インスタンスを再起動して、tables_version の値を循環的に変更します。
ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
...
ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111
ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
...
4.63.2 Example
ffmpeg -i file.mpg -c copy \
-mpegts_original_network_id 0x1122 \
-mpegts_transport_stream_id 0x3344 \
-mpegts_service_id 0x5566 \
-mpegts_pmt_start_pid 0x1500 \
-mpegts_start_pid 0x150 \
-metadata service_provider="Some provider" \
-metadata service_name="Some Channel" \
out.ts
4.64 mxf, mxf_d10, mxf_opatom
MXF muxer。
4.64.1 Options
muxer のオプションは以下のとおりです。
store_user_comments bool
ユーザーコメントが利用可能な場合に格納するか、まったく格納しないかを設定します。IRT D-10 はユーザーコメントを許可していません。したがって既定では、mxf と mxf_opatom には書き込みますが、mxf_d10 には書き込みません。
4.65 null
Null muxer。
この muxer は出力ファイルを一切生成しません。主にテストやベンチマークの用途に役立ちます。
例えば ffmpeg でデコードのベンチマークを取るには、次のコマンドを使えます。
ffmpeg -benchmark -i INPUT -f null out.null
上記のコマンドは out.null ファイルを読み書きしませんが、出力ファイルの指定は ffmpeg の構文上必須である点に注意してください。
代わりに、次のようにコマンドを記述することもできます。
ffmpeg -benchmark -i INPUT -f null -
4.66 nut
-syncpoints flags
nut における syncpoint の使い方を変更します。
default 通常の低オーバーヘッドなシーク補助を使用します。 none syncpoint をまったく使わず、オーバーヘッドを減らすがストリームをシーク不可能にします。
このオプションの使用は推奨されません。結果として得られるファイルは破損に非常に敏感で、シークもできなくなるためです。また一般に syncpoint のオーバーヘッドはごくわずかです。なお、-write_index 0 を使うとすべての増大するデータテーブルを無効にでき、限られたメモリで、かつこれらの欠点なしに、無限長のストリームを mux できます。
timestamped syncpoint を wallclock フィールドで拡張します。
none および timestamped フラグは実験的です。
-write_index bool
末尾にインデックスを書き込みます。既定はインデックスを書き込みます。
ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor
4.67 ogg
Ogg コンテナの muxer。
-page_duration duration
優先するページ長をマイクロ秒単位で指定します。muxer は、おおよそ duration マイクロ秒の長さのページを作成しようとします。これにより、シークの粒度とコンテナのオーバーヘッドの間で折り合いをつけられます。既定値は1秒です。値を 0 にするとすべてのセグメントを埋め、ページをできるだけ大きくします。値を 1 にすると、ほとんどの状況で実質的に1ページあたり1パケットとなり、コンテナのオーバーヘッドは増えるがシークの粒度は細かくなります。
-serial_offset value
ストリームのシリアル番号を設定する起点となるシリアル値。十分に大きく異なる値に設定すると、生成された ogg ファイルを安全に連結(チェイン)できることが保証されます。
4.68 pdv
Playdate Video muxer。
この muxer は、Panic 社の Playdate SDK で使われる Playdate 映像コンテナを書き出します。シーク可能な出力と、PDV 映像ストリーム1本を必要とします。
max_frames frames
ファイルヘッダに、最大で frames 本分の映像フレーム用のスペースを予約します。このオプションは必須です。
4.69 rcwt
RCWT(Raw Captions With Time)は、608/708 クローズドキャプション(CC)ソースを処理する一般的なオープンソースツールである ccextractor 固有のフォーマットです。抽出した元の CC ビットストリームをアーカイブするためや、後の処理・変換のためのソースファイルを生成するために使えます。このフォーマットは ccextractor と FFmpeg 間の相互運用を可能にし、解析が容易で、CC 表示のバックアップ作成にも使えます。
この muxer は2024年3月時点の仕様を実装しています。この仕様は2014年4月以降、安定しており変更されていません。
この muxer は、ccextractor が RCWT を mux する方法といくつかの細かな違いがあります。これによって ccextractor で出力を処理する際の互換性問題はこれまで観測されていませんが、状況によっては異なる結果となる場合があり、出力はビット単位で完全に一致するわけではありません。
RCWT の自由に利用できる仕様はこちらにあります: https://github.com/CCExtractor/ccextractor/blob/master/docs/BINARY_FILE_FORMAT.TXT
4.69.1 Examples
- lavfi を使ってクローズドキャプションを RCWT に抽出します。
ffmpeg -f lavfi -i "movie=INPUT.mkv[out+subcc]" -map 0:s:0 -c:s copy -f rcwt CC.rcwt.bin
4.70 segment, stream_segment, ssegment
基本的なストリームセグメンター。
この muxer は、ほぼ一定の長さを持つ複数の別々のファイルへストリームを出力します。出力ファイル名のパターンは image2 と同様の方法で設定できるほか、strftime オプションが有効な場合は strftime テンプレートを使って設定できます。
stream_segment はこの muxer の派生で、グローバルヘッダを必要としないストリーミング出力フォーマット、すなわち MPEG トランスポートストリームセグメントなどへの書き出しに使われ、そうした用途に推奨されます。ssegment は stream_segment の短縮エイリアスです。
各セグメントは、reference_stream オプションで設定される選択された参照ストリームのキーフレームから始まります。
映像ファイルを正確に分割したい場合は、入力のキーフレームをセグメンターが期待する正確な分割時刻に対応させる必要がある点に注意してください。そうしないと、segment muxer は指定した開始時刻の次に見つかったキーフレームから新しいセグメントを開始します。
segment muxer は、一定のフレームレートを持つ単一の映像で最もうまく機能します。
オプションとして、segment_list オプションを設定すれば、作成されたセグメントの一覧を生成できます。一覧の種別は segment_list_type オプションで指定します。セグメント一覧内のエントリのファイル名は、既定では対応するセグメントファイルのベース名に設定されます。
HLS セグメンテーション向けのより特化した実装を提供する hls muxer も参照してください。
4.70.1 Options
segment muxer は以下のオプションをサポートします。
increment_tc 1|0
1 に設定すると、各セグメント間でタイムコードをインクリメントします。これを選択する場合、入力の最初の映像ストリームにタイムコードが含まれている必要があります。既定値は 0 です。
reference_stream specifier
文字列 specifier で指定する参照ストリームを設定します。specifier を auto に設定すると、参照ストリームは自動的に選ばれます。それ以外の場合は、参照ストリームを指定するストリーム指定子(ffmpeg マニュアルの「Stream specifiers」章を参照)でなければなりません。既定値は auto です。
segment_format format
内側のコンテナフォーマットを上書きします。既定ではファイル名の拡張子から推測されます。
segment_format_options options_list
: 区切りの key=value パラメータのリストで出力フォーマットのオプションを設定します。: という特殊文字を含む値はエスケープしなければなりません。
segment_list name
name という名前のリストファイルも生成します。指定しない場合、リストファイルは生成されません。
segment_list_flags flags
セグメント一覧の生成に影響するフラグを設定します。
現在、以下のフラグをサポートします。
‘cache’
キャッシュを許可する(M3U8 リストファイルにのみ影響します)。
‘live’
ライブ向けのファイル生成を許可します。
segment_list_size size
リストファイルが最大で size 個のセグメントを含むように更新します。0 の場合、リストファイルはすべてのセグメントを含みます。既定値は 0 です。
segment_list_entry_prefix prefix
各エントリに prefix を前置します。絶対パスを生成するのに便利です。既定では prefix は適用されません。
segment_list_type type
一覧の形式を選択します。
認識される値は以下のとおりです。
‘flat’
作成されたセグメントについて、1行1セグメントのフラットな一覧を生成します。
‘csv, ext’
作成されたセグメントについて、1行1セグメントの一覧を生成します。各行は次の形式(カンマ区切りの値)に従います。
segment_filename,segment_start_time,segment_end_time
segment_filename は、指定したパターンに従って muxer が生成した出力ファイルの名前です。必要に応じて CSV エスケープ(RFC4180 に準拠)が適用されます。
segment_start_time と segment_end_time は、セグメントの開始時刻と終了時刻を秒単位で表します。
末尾が ".csv" または ".ext" のリストファイルは、この形式を自動的に選択します。
‘ext’ は ‘csv’ に置き換えられ非推奨です。
‘ffconcat’
作成されたセグメントについて ffconcat ファイルを生成します。生成されたファイルは FFmpeg の concat demuxer で読み込めます。
末尾が ".ffcat" または ".ffconcat" のリストファイルは、この形式を自動的に選択します。
‘m3u8’
http://tools.ietf.org/id/draft-pantos-http-live-streaming に準拠した、拡張 M3U8 ファイル(バージョン3)を生成します。
末尾が ".m3u8" のリストファイルは、この形式を自動的に選択します。
指定しない場合、種別はリストファイル名の末尾から推測されます。
segment_time time
セグメント長を time に設定します。値は duration の指定でなければなりません。既定値は "2" です。segment_times オプションも参照してください。
参照ストリームのキーフレームを指定した時刻に強制しない限り、分割は正確にならない場合がある点に注意してください。冒頭の注意書きと後述の例を参照してください。
min_seg_duration time
セグメントの最小長を time に設定します。値は duration の指定でなければなりません。これにより、muxer がこの値を下回る長さでセグメントを終えるのを防ぎます。segment_time と併用したときにのみ有効。既定値は "0" です。
segment_atclocktime 1|0
"1" に設定すると、00:00 を起点とする一定の時刻間隔で分割します。分割間隔の長さには segment_time で指定した時間の値が使われます。
例えば segment_time を "900" に設定すると、12:00、12:15、12:30 ……といった時刻にファイルを作成できます。
既定値は "0" です。
segment_clocktime_offset duration
segment_atclocktime を使うときに、セグメント分割の時刻を指定した duration だけ遅らせます。
例えば segment_time を "900"、segment_clocktime_offset を "300" に設定すると、12:05、12:20、12:35 ……といった時刻にファイルを作成できます。
既定値は "0" です。
segment_clocktime_wrap_duration duration
分割の基準となる時刻から指定した duration 以内にパケットが muxer に到達した場合にのみ新しいセグメントを開始するよう、セグメンターを強制します。これにより、うるう秒や夏時間から標準時への切り替えのような、ローカル時刻が過去に戻るジャンプに対してセグメンターをより堅牢にできます。
既定値は可能な最大の duration で、これは前回の分割基準時刻からの経過時間にかかわらず新しいセグメントを開始することを意味します。
segment_time_delta delta
セグメントの開始時刻を選択する際の精度時間を、duration の指定として指定します。既定値は "0" です。
delta を指定すると、キーフレームの PTS が次の関係を満たす場合に、そのキーフレームが新しいセグメントを開始します。
PTS >= start_time - time_delta
このオプションは、常に GOP の境界で分割される映像コンテンツを分割するときに、指定した分割時刻の直前にキーフレームが見つかった場合に役立ちます。
特に、ffmpeg の force_key_frames オプションと組み合わせて使えます。force_key_frames で指定したキーフレーム時刻は、丸め誤差のために正確に設定されないことがあり、その結果、キーフレーム時刻が指定した時刻の直前に設定されてしまうことがあります。一定フレームレートの映像では、1/(2*frame_rate) の値で、指定した時刻と force_key_frames が設定した時刻との最悪のずれに対処できるはずです。
segment_times times
分割点のリストを指定します。times には、昇順に並べた、カンマ区切りの duration 指定のリストを含めます。segment_time オプションも参照してください。
segment_frames frames
分割する映像フレーム番号のリストを指定します。frames には、昇順に並べた、カンマ区切りの整数のリストを含めます。
このオプションは、参照ストリームのキーフレームが見つかり、かつそのフレームの連番(0から始まる)がリスト内の次の値以上であるたびに、新しいセグメントを開始することを指定します。
segment_wrap limit
セグメントのインデックスが limit に達したら、折り返してゼロに戻します。
segment_start_number number
最初のセグメントのシーケンス番号を設定します。既定値は 0 です。
strftime 1|0
書き出す新しいセグメントの名前を定義するのに strftime 関数を使います。これを選択する場合、出力セグメント名に strftime 関数のテンプレートが含まれていなければなりません。既定値は 0 です。
break_non_keyframes 1|0
有効にすると、キーフレーム以外のフレームでセグメントを開始することを許可します。これにより、キーフレーム間の時間が不規則な場合に一部のプレイヤーでの挙動が改善しますが、他のプレイヤーでは悪化することがあり、シーク時に不具合を引き起こすこともあります。既定値は 0 です。
reset_timestamps 1|0
各セグメントの先頭でタイムスタンプをリセットし、各セグメントがほぼゼロのタイムスタンプから始まるようにします。これは、生成したセグメントの再生を容易にすることを目的としています。muxer とコーデックの組み合わせによっては機能しない場合があります。既定では 0 に設定されています。
initial_offset offset
出力パケットのタイムスタンプに適用するタイムスタンプオフセットを指定します。引数は time duration の指定でなければならず、既定値は 0 です。
write_empty_segments 1|0
有効にすると、通常であればセグメントが占めるはずの期間にパケットが1つもなかった場合に、空のセグメントを書き込みます。そうでない場合、そのセグメントは次に書き込まれるパケットで埋められます。既定値は 0 です。
エンコード時には closed GOP を要求し、セグメント長の制約に合うように GOP サイズを設定してください。
4.70.2 Examples
-
in.mkv の内容を out-000.nut、out-001.nut といったセグメントのリストにリマックスし、生成されたセグメントの一覧を out.list に書き出します:
ffmpeg -i in.mkv -codec hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut -
入力をセグメント化し、出力セグメントに対する出力フォーマットオプションを設定します:
ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4 -
segment_times オプションで指定した分割点に従って入力ファイルをセグメント化します:
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut -
ffmpegの force_key_frames オプションを使って指定位置に入力のキーフレームを強制し、あわせてセグメントオプション segment_time_delta でキーフレーム時刻設定時に生じうる丸めを吸収します。ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \ -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
入力ファイルにキーフレームを強制するにはトランスコードが必要となります。
-
segment_frames オプションで指定したフレーム番号の列に従って入力ファイルを分割し、セグメント化します:
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut -
libx264とaacエンコーダを使って in.mkv を TS セグメントに変換します:ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts -
入力ファイルをセグメント化し、M3U8 のライブプレイリストを作成します(ライブ HLS のソースとして利用できます):
ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \ -segment_list_flags +live -segment_time 10 out%03d.mkv
4.71 smoothstreaming
Smooth Streaming muxer は、一般的な Web サーバで配信するのに適した一連のファイル(Manifest、チャンク)を生成します。
window_size
manifest に保持するフラグメント数を指定します。既定値は 0(すべて保持)。
extra_window_size
manifest から外れたフラグメントをディスクから削除するまでに保持しておく数を指定します。既定値は 5。
lookahead_count
先読みするフラグメントの数を指定します。既定値は 2。
min_frag_duration
フラグメントの最小継続時間(マイクロ秒単位)を指定します。既定値は 5000000。
remove_at_exit
終了時にすべてのフラグメントを削除するかどうかを指定します。既定値は 0(削除しない)。
4.72 streamhash
ストリームごとのハッシュをテストするフォーマット。
この muxer は、すべての入力フレームの暗号学的ハッシュをストリーム単位で計算して出力します。完全なバイナリ比較を行わずに同一性を確認したい場合に利用できます。
既定では、ハッシュ計算の前に音声フレームは符号付き 16 ビットの生音声に、映像フレームは生映像に変換されますが、他のcodecへ明示的に変換した出力を用いることもできます。タイムスタンプは無視されます。既定では SHA-256 暗号学的ハッシュ関数を使用しますが、他のいくつかのアルゴリズムにも対応しています。
この muxer の出力は、ストリームごとに streamindex,streamtype,algo=hash という形式の 1 行で構成されます。streamindex はマップされたストリームのインデックス、streamtype はストリーム種別を表す 1 文字、algo は使用したハッシュ関数を表す短い文字列、hash は計算されたハッシュを表す 16 進数値です。
hash algorithm
文字列 algorithm で指定した暗号学的ハッシュ関数を使用します。指定できる値には MD5、murmur3、RIPEMD128、RIPEMD160、RIPEMD256、RIPEMD320、SHA160、SHA224、SHA256(既定値)、SHA512/224、SHA512/256、SHA384、SHA512、CRC32、adler32 があります。
4.72.1 Examples
入力を生音声・生映像に変換した SHA-256 ハッシュを計算し、ファイル out.sha256 に保存するには:
ffmpeg -i INPUT -f streamhash out.sha256
MD5 ハッシュを標準出力に表示するには次のコマンドを使います:
ffmpeg -i INPUT -f streamhash -hash md5 -
hash および framehash muxer も参照してください。
4.73 tee
tee muxer は、同じデータをファイルやストリームなど複数の出力先へ書き出すために使えます。たとえば、映像をネットワークへ配信しつつ同時にディスクへ保存するといった用途に利用できます。
これは ffmpeg コマンドラインツールに複数の出力を指定する場合とは異なります。tee muxer では、音声と映像のデータは一度だけエンコードされます。通常の複数出力では複数のエンコード処理が並行して開始され、これは非常にコストの高い処理になりえます。tee muxer は libavformat API を直接使う場合には役に立ちません。その場合は同じパケットを複数の muxer へ直接渡せるからです。
tee muxer は特定の出力フォーマットを表すものではないため、ffmpeg は出力ストリームを自動選択できません。したがって、出力対象とするすべてのストリームを -map で指定しなければなりません。以下の例を参照してください。
エンコーダによっては出力フォーマットに応じて異なるオプションが必要になることがあり、その自動検出は tee muxer では機能しないため、明示的に指定する必要があります。代表的な例が global_header フラグです。
スレーブ出力は、muxer に与えるファイル名の中で「|」で区切って指定します。スレーブ名のいずれかに「|」区切り文字や先頭・末尾の空白、特殊文字が含まれる場合は、それらをエスケープしなければなりません((ffmpeg-utils)ffmpeg-utils(1) マニュアルの "Quoting and escaping" の節を参照してください)。
4.73.1 Options
use_fifo bool
1 に設定すると、スレーブ出力は fifo muxer を使って別々のスレッドで処理されます。これにより、出力ごとの速度・遅延・信頼性の違いを補い、透過的なリカバリを構成できます。既定ではこの機能はオフになっています。
fifo_options
fifo 疑似 muxer のインスタンスに渡すオプション。fifo を参照してください。
muxer オプションは、key=value のペアを「:」で区切ったリストとして角括弧で囲み、スレーブごとに前置することで指定できます。オプションの値に特殊文字や「:」区切り文字が含まれる場合はエスケープしなければなりません。これは二段階のエスケープになる点に注意してください。
次の特殊オプションも認識されます:
f
フォーマット名を指定します。出力 URL から推測できない場合は必須となります。
bsfs[/spec]
指定した出力に適用する bitstream フィルタのリストを指定します。
オプションに「/」で区切ってストリーム指定子を付加することで、ある bitstream フィルタをどのストリームに適用するかを指定できます。spec はストリーム指定子でなければなりません(Format stream specifiers を参照してください)。
ストリーム指定子を指定しない場合、bitstream フィルタは出力中のすべてのストリームに適用されます。出力にその bitstream フィルタを適用できないストリームが含まれていると、その出力操作は失敗します。たとえば、音声ストリームを含む出力に h264_mp4toannexb を適用した場合などです。
bitstream フィルタのオプションは opt=value の形式で指定しなければなりません。
複数の bitstream フィルタを「,」で区切って指定できます。
use_fifo bool
これにより、個々のスレーブ muxer について tee muxer の use_fifo オプションを上書きできます。
fifo_options
これにより、個々のスレーブ muxer について tee muxer の fifo_options を上書きできます。fifo を参照してください。
select
スレーブ出力にマップすべきストリームを、ストリーム指定子で指定して選択します。指定しない場合は、マップされたすべてのストリームが既定値となります。出力フォーマットがマップされたすべてのストリームを受け付けない場合、その出力操作は失敗します。
複数のストリーム指定子をカンマ(,)で区切って使ってもかまいません。例: a:0,v
onfail
出力失敗時の動作を指定します。abort(既定)または ignore のいずれかを設定できます。abort は、このスレーブ出力で失敗した場合にプロセス全体を失敗させます。ignore はこの出力の失敗を無視するため、他の出力は影響を受けずに継続します。
4.73.2 Examples
-
何かをエンコードし、WebM ファイルにアーカイブすると同時に MPEG-TS として UDP 経由でストリーミングします:
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/" -
上記と同様ですが、ローカルファイルへの出力が失敗しても(たとえばローカルドライブが満杯になっても)ストリーミングを継続します:
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/" -
ffmpegで入力をエンコードし、出力を 3 つの異なる宛先へ送ります。MPEG-TS フォーマットが要求するとおり、dump_extrabitstream フィルタを使ってすべての出力映像キーフレームのパケットに extradata 情報を付加します。out.aac には音声パケットのみを含めるため、select オプションを適用しています。ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac" -
上記と同様ですが、音声出力にはストリーム
a:1のみを選択します。「:」はオプションを区切るための特殊文字なので、二段階のエスケープを行わなければならない点に注意してください。ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"
4.74 wav
RIFF Wave Audio muxer。
4.74.1 Options
rf64 mode
RIFF の代わりに RF64 ファイルフォーマットを使うかどうかを選択します。RF64 では 4 ギガバイトを超えるファイルが扱えますが、RF64 のサポートは RIFF ほど普及していません。
認識されるモードは次のとおりです:
‘auto’
非 RF64 対応ソフトウェアとの互換性を保つため標準の RIFF ファイルとして書き始め、出力ファイルが 4 ギガバイトより大きくなった場合に RF64 へ切り替えます。ヘッダ内に JUNK チャンクを使って少量の予備領域を確保します。これはすべての準拠 RIFF リーダーで無視されるはずですが、ごく単純な WAV リーダーの中にはこれを誤認するものもあります。
‘always’
ファイルサイズにかかわらず常に RF64 フォーマットを使います。出力ファイルは RF64 対応ソフトウェアでしか読めなくなり、標準の RIFF WAVE ファイルではなくなります。
‘never’
常にプレーンな RIFF を使い、RF64 は使いません。このモードはレガシーソフトウェアとの互換性が最も高いですが、出力ファイルが 4 ギガバイトを超えると、data チャンク内の 32 ビットのサイズフィールドではそのサイズを正しく表せなくなり、大半の音声ソフトウェアはデータの一部または全部を読めなくなります。(wav demuxer の ignore_length オプションを使えば、そのようなファイルを復旧できます。)これが既定のモードです。
write_bext bool
有効にすると、拡張音声メタデータを含む Broadcast Wave Format の BEXT チャンクを付加します。既定値は false。
write_peak mode
有効にすると、Peak Envelope チャンク(EBU Tech 3285 Supplement 3)を付加します。既定値はオフ。
‘off’
Peak Envelope チャンクを付加しません。
‘on’
Peak Envelope チャンクを付加し、peak_block_size、peak_format、peak_ppv の各オプションに基づいてピーク値を計算します。
‘only’
on と同様ですが、実際の音声データの書き込みは省略します(data チャンクはファイルに書き込まれず、Peak Envelope とその他のメタデータチャンクのみが書き込まれます)。
peak_block_size int
各ピークフレームを生成するために使う音声サンプル数。最大 65536。既定値は 256。
peak_format format
ピークエンベロープデータのフォーマット(1: uint8、2: uint16)。既定値は 2(uint16)。
peak_ppv int
ピーク値あたりのピークポイント数(1 または 2)。既定値は 2。
4.75 webm_chunk
WebM Live Chunk Muxer。
この muxer は、WebM のヘッダとチャンクを別々のファイルとして書き出します。これらは DASH 経由で WebM Live ストリームをサポートするクライアントが消費できます。
4.75.1 Options
この muxer は次のオプションをサポートします:
chunk_start_index
最初のチャンクのインデックス(既定値は 0)。
header
初期化データを書き込むヘッダのファイル名。
audio_chunk_duration
各音声チャンクの継続時間(ミリ秒単位、既定値は 5000)。
4.75.2 Example
ffmpeg -f v4l2 -i /dev/video0 \
-f alsa -i hw:0 \
-map 0:0 \
-c:v libvpx-vp9 \
-s 640x360 -keyint_min 30 -g 30 \
-f webm_chunk \
-header webm_live_video_360.hdr \
-chunk_start_index 1 \
webm_live_video_360_%d.chk \
-map 1:0 \
-c:a libvorbis \
-b:a 128k \
-f webm_chunk \
-header webm_live_audio_128.hdr \
-chunk_start_index 1 \
-audio_chunk_duration 1000 \
webm_live_audio_128_%d.chk
4.76 webm_dash_manifest
WebM DASH Manifest muxer。
この muxer は WebM DASH Manifest 仕様を実装し、DASH マニフェストの XML を生成します。DASH ライブストリーム向けのマニフェスト生成にも対応しています。
詳しくは次を参照してください:
- WebM DASH Specification: https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification
- ISO DASH Specification: http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
4.76.1 Options
この muxer は次のオプションをサポートします:
adaptation_sets
このオプションの構文は次のとおりです: "id=x,streams=a,b,c id=y,streams=d,e"。ここで x と y は adaptation set の一意な識別子、a,b,c,d,e は対応する音声・映像ストリームのインデックスです。このオプションを使って任意の数の adaptation set を追加できます。
live
ライブストリームの DASH マニフェストを作成するには 1 に設定します。既定値は 0。
chunk_start_index
最初のチャンクの開始インデックス。これはマニフェスト内の ‘SegmentTemplate’ 要素の ‘startNumber’ 属性に入ります。既定値は 0。
chunk_duration_ms
各チャンクの継続時間(ミリ秒単位)。これはマニフェスト内の ‘SegmentTemplate’ 要素の ‘duration’ 属性に入ります。既定値は 1000。
utc_timing_url
UTC タイムスタンプを ISO 形式で返すページの URL。これはマニフェスト内の ‘UTCTiming’ 要素の ‘value’ 属性に入ります。既定値は None。
time_shift_buffer_depth
任意の Representation が利用可能であることが保証される、最小のタイムシフトバッファ(秒単位)。これは ‘MPD’ 要素の ‘timeShiftBufferDepth’ 属性に入ります。既定値は 60。
minimum_update_period
マニフェストの最小更新周期(秒単位)。これは ‘MPD’ 要素の ‘minimumUpdatePeriod’ 属性に入ります。既定値は 0。
4.76.2 Example
ffmpeg -f webm_dash_manifest -i video1.webm \
-f webm_dash_manifest -i video2.webm \
-f webm_dash_manifest -i audio1.webm \
-f webm_dash_manifest -i audio2.webm \
-map 0 -map 1 -map 2 -map 3 \
-c copy \
-f webm_dash_manifest \
-adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \
manifest.xml
4.77 whip
WHIP(WebRTC-HTTP ingestion protocol)仕様に従い、サブ秒の低遅延ストリーミングをサポートする WebRTC(Real-Time Communication)muxer。
これは実験的な機能です。
シグナリングプロトコルとして HTTP を使って SDP のケイパビリティと ICE lite candidate を交換します。次に STUN binding のリクエストとレスポンスを使って UDP 上にセッションを確立します。続いて DTLS ハンドシェイクを開始して SRTP 暗号鍵を交換します。最後に映像・音声フレームを RTP パケットに分割し、SRTP を使って暗号化します。
H.264 を B フレームなしで使い、音声codecには Opus を使ってください。たとえば、ffmpeg で入力ファイルを WebRTC に変換するには次のようにします:
ffmpeg -re -i input.mp4 -acodec libopus -ar 48000 -ac 2 \
-vcodec libx264 -profile:v baseline -tune zerolatency -threads 1 -bf 0 \
-f whip "http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream"
この例では低遅延オプションを使い、エンドツーエンドで約 150ms の遅延を実現しています。
4.77.1 Options
この muxer は次のオプションをサポートします:
handshake_timeout integer
ICE と DTLS のハンドシェイクのタイムアウトをミリ秒単位で設定します。既定値は 5000。
timeout integer
ソケット I/O 操作のタイムアウトを秒単位で設定します。HTTP 出力にのみ適用されます。既定値は -1。
pkt_size integer
送出する RTP パケットの最大サイズをバイト単位で設定します。既定値は 1200。
ts_buffer_size integer
下層プロトコルのバッファサイズをバイト単位で設定します。既定値は -1(自動)。UDP では妥当な値が自動選択されます。
whip_flags flags
指定できる値:
‘dtls_active’
muxer は dtls active ロールの設定を試み、最初の client hello を送信します。
rtp_history integer
保存する RTP ヒストリ項目の数を設定します。既定値は 512。
authorization string
WHIP の Authorization 用のオプションの Bearer トークン。
cert_file string
DTLS 用のオプションの証明書ファイルパス。
key_file string
DTLS 用のオプションの秘密鍵ファイルパス。
5 Metadata
FFmpeg は、メディアファイルからメタデータをシンプルな UTF-8 エンコードの INI ライクなテキストファイルにダンプし、それを metadata muxer/demuxer を使って読み戻すことができます。
ファイルフォーマットは次のとおりです:
- ファイルはヘッダと、セクションに分けられた多数のメタデータタグから構成され、それぞれが 1 行ずつになります。
- ヘッダは ‘;FFMETADATA’ という文字列で、その後にバージョン番号(現在は 1)が続きます。
- メタデータタグは ‘key=value’ の形式をとります。
- ヘッダの直後にグローバルメタデータが続きます。
- グローバルメタデータの後には、ストリームごと・チャプターごとのメタデータを含むセクションが続くことがあります。
- セクションは、大文字のセクション名(すなわち STREAM または CHAPTER)を角括弧(‘[’, ‘]’)で囲んだもので始まり、次のセクションまたはファイル末尾で終わります。
- チャプターセクションの先頭には、start/end の値に使うオプションのタイムベースが置かれることがあります。これは ‘TIMEBASE=num/den’ の形式でなければならず、num と den は整数です。タイムベースが省略された場合、start/end の時刻はナノ秒単位とみなされます。
次に、チャプターセクションには ‘START=num’、‘END=num’ の形式でチャプターの開始・終了時刻を含めなければなりません。num は正の整数です。
- 空行および ‘;’ または ‘#’ で始まる行は無視されます。
- 特殊文字(‘=’, ‘;’, ‘#’, ‘\’ および改行)を含むメタデータのキーまたは値は、バックスラッシュ ‘\’ でエスケープしなければなりません。
- メタデータ中の空白(例: ‘foo = bar’)はタグの一部とみなされる点に注意してください(上記の例ではキーは ‘foo ’、値は ‘ bar’ となります)。
ffmetadata ファイルは次のようになります:
;FFMETADATA1
title=bike\\shed
;this is a comment
artist=FFmpeg troll team
[CHAPTER]
TIMEBASE=1/1000
START=0
#chapter ends at 0:01:00
END=60000
title=chapter \#1
[STREAM]
title=multi\
line
ffmetadata muxer と demuxer を使えば、入力ファイルからメタデータを ffmetadata ファイルへ抽出し、編集した ffmetadata ファイルとともにファイルを出力ファイルへトランスコードできます。
ffmpeg で ffmetadata ファイルを抽出するには次のようにします:
ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
FFMETADATAFILE ファイルから編集後のメタデータ情報を再挿入するには次のようにします:
ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
6 See Also
ffmpeg, ffplay, ffprobe, libavformat
7 Authors
FFmpeg の開発者たち。
著作権者の詳細については、プロジェクトの Git 履歴(https://git.ffmpeg.org/ffmpeg)を参照してください。たとえば FFmpeg のソースディレクトリで git log コマンドを実行するか、オンラインリポジトリ https://git.ffmpeg.org/ffmpeg を閲覧してください。
各コンポーネントのメンテナは、ソースコードツリー内の MAINTAINERS ファイルに記載されています。
Hosting provided by telepoint.bg