FFmpeg ビットストリームフィルタ ドキュメント
1 概要
この文書では、libavcodec ライブラリが提供するビットストリームフィルタについて説明します。
ビットストリームフィルタは符号化されたストリームデータに対して動作し、デコードを行わずにビットストリームレベルの変更を行います。
2 ビットストリームフィルタ
FFmpeg ビルドを configure すると、サポートされているすべてのビットストリームフィルタが既定で有効になります。利用できるものはすべて configure オプション --list-bsfs で一覧表示できます。
configure オプション --disable-bsfs ですべてのビットストリームフィルタを無効にできます。--enable-bsf=BSF オプションで任意のビットストリームフィルタを個別に有効にしたり、--disable-bsf=BSF オプションで特定のビットストリームフィルタを無効にしたりできます。
ff* ツールの -bsfs オプションは、ビルドに含まれるサポート済みビットストリームフィルタの一覧を表示します。
ff* ツールにはストリームごとに適用される -bsf オプションがあり、カンマ区切りのフィルタのリストを取ります。各フィルタのパラメータは、フィルタ名の後に ’=’ を続けて指定します。
ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
以下に、現在利用できるビットストリームフィルタについて、(あれば)パラメータとともに説明します。
2.1 aac_adtstoasc
MPEG-2/4 AAC ADTS を MPEG-4 Audio Specific Configuration ビットストリームに変換します。
このフィルタは MPEG-2/4 ADTS ヘッダーから MPEG-4 AudioSpecificConfig を作成し、ADTS ヘッダーを削除します。
このフィルタは、たとえば raw ADTS AAC や MPEG-TS コンテナの AAC ストリームを MP4A-LATM や FLV ファイル、あるいは MOV/MP4 ファイルや 3GP・M4A などの関連形式にコピーする際に必要となります。MP4A-LATM や MOV/MP4 および関連形式では自動的に挿入される点に注意してください。
2.2 av1_metadata
AV1 ストリームに埋め込まれたメタデータを変更します。
td
ストリームのすべての時間単位(temporal unit)に対して、時間区切り(temporal delimiter)OBU を挿入または削除します。
‘insert’
TD をまだ持たないすべての TU の先頭に TD を挿入します。
‘remove’
TD を持つすべての TU の先頭から TD を削除します。
color_primaries transfer_characteristics matrix_coefficients
ストリームの色記述フィールドを設定します(AV1 の 6.4.2 節を参照)。
color_range
ストリームのカラーレンジを設定します(AV1 の 6.4.2 節を参照。BT.709 primaries、sRGB transfer characteristic、identity (RGB) matrix coefficients を使うストリームには設定できない点に注意してください)。
‘tv’
リミテッドレンジ。
‘pc’
フルレンジ。
chroma_sample_position
ストリームのクロマサンプル位置を設定します(AV1 の 6.4.2 節を参照)。これは 4:2:0 ストリームにのみ設定できます。
‘vertical’
左位置(MPEG-2 および H.264 の既定値に一致)。
‘colocated’
左上位置。
tick_rate
シーケンスヘッダーのタイミング情報にティックレート(time_scale / num_units_in_display_tick)を設定します。
num_ticks_per_picture
各ピクチャあたりのティック数を設定し、ストリームが固定フレームレートであることを示します。tick_rate も同時に設定されていなければ無視されます。
delete_padding
Padding OBU を削除します。
2.3 chomp
パケット末尾のゼロパディングを削除します。
2.4 dca_core
DCA/DTS ストリームからコアを抽出し、DTS-HD などの拡張部分を取り除きます。
2.5 dovi_rpu
HEVC/AV1 ビットストリーム内の Dolby Vision メタデータを操作します。任意でメタデータ圧縮を有効にできます。
strip
有効にすると、ストリームからすべての Dolby Vision メタデータ(構成レコードと RPU データブロック)を取り除きます。
compression
有効にする圧縮レベル。
‘none’
メタデータ圧縮なし。
‘limited’
限定的なメタデータ圧縮方式。ほとんどのデバイスと互換性があるはずです。これが既定値です。
‘extended’
拡張的なメタデータ圧縮。デバイスがこれをサポートしている必要はありません。なお、このレベルは libavcodec では現在 ‘limited’ と同じ動作をします。
2.6 dovi_split
Dolby Vision Profile 7 のマルチレイヤー HEVC ビットストリームを分割します。Profile 7 では、エンハンスメントレイヤーの HEVC ビットストリームがベースレイヤーのアクセスユニット内にインターリーブされ、タイプ 63(UNSPEC63)の user-unspecified NAL ユニットでラップされて運ばれます。また RPU メタデータはタイプ 62(UNSPEC62)の兄弟 user-unspecified NAL として運ばれます。
mode
出力ビットストリームに残す Dolby Vision コンポーネントを指定します。
‘bl’
ベースレイヤーのみ:すべての UNSPEC63(EL)とすべての UNSPEC62(RPU)を削除します。出力は Dolby Vision マーカーを持たない素の HEVC ストリームになります。これが既定値です。
‘bl_rpu’
ベースレイヤーに RPU NAL を残したもの。
‘el’
エンハンスメントレイヤーのみ:各 UNSPEC63 NAL について、2 バイトの外側 NAL ヘッダーを取り除き、内側のペイロードを出力します。結果として独立した HEVC ビットストリームになります。UNSPEC62(RPU)は削除されます。
‘el_rpu’
エンハンスメントレイヤーに RPU NAL をそのまま残したもの。‘el’ と同じですが、アンラップした EL NAL とともに UNSPEC62 の RPU NAL も出力されます。
2.7 dump_extra
フィルタされたパケットの先頭に extradata を追加します。ただし、追加しようとしている extradata でパケットがすでにちょうど始まっている場合は追加しません。
freq
追加の引数で、どのパケットをフィルタするかを指定します。次の値を受け付けます。
‘k’ ‘keyframe’
すべてのキーパケットに extradata を追加します。
‘e’ ‘all’
すべてのパケットに extradata を追加します。
指定しなければ ‘k’ とみなされます。
たとえば次の ffmpeg コマンドは、libx264 エンコーダが生成する H.264 パケットにグローバルヘッダーを強制し(これにより個々のパケットヘッダーが無効になります)、extradata に格納されたヘッダーをキーパケットに追加することでそれを補正します。
ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
2.8 dv_error_marker
DV 内で破損とマークされたブロックを、指定した色のブロックで置き換えます。
color
破損ブロックを置き換える色。
sta
16 個ありうるエラーステータス値のうち、どれを色付きブロックで置き換えるかを指定する 16 ビットマスク。既定値は 0xFFFE で、0 以外のすべてのエラーステータス値を置き換えます。
‘ok’
エラーなし、コンシールメントなし
‘err’
エラーあり、コンシールメントなし
‘res’
予約
‘notok’
エラーまたはコンシールメント
‘notres’
予約されていない
‘Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru’
個別のエラーステータスコード
http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf の 44〜46 ページまたは 5.5 節を参照してください。
2.9 eac3_core
E-AC-3 ストリームからコアを抽出し、追加チャンネルを取り除きます。
2.10 eia608_to_smpte436m
EIA_608 ストリームを SMPTE_436M_ANC データストリームに変換し、クローズドキャプションを CTA-708 CDP VANC パケットにラップします。
line_number
生成される VANC パケットを置く行番号を選びます。通常は 9 行目(既定値)か 11 行目のどちらかを使います。
wrapping_type
SMPTE 436M のラッピングタイプを選びます。既定値は ‘vanc_frame’ です。次の値を受け付けます。
‘vanc_frame’
VANC フレーム(インターレースまたはセグメント化されたプログレッシブフレーム)
‘vanc_field_1’ ‘vanc_field_2’ ‘vanc_progressive_frame’ sample_coding
SMPTE 436M のサンプルコーディングを選びます。既定値は ‘8bit_luma’ です。次の値を受け付けます。
‘8bit_luma’
8 ビットコンポーネントの輝度サンプル
‘8bit_color_diff’
8 ビットコンポーネントの色差サンプル
‘8bit_luma_and_color_diff’
8 ビットコンポーネントの輝度サンプルと色差サンプル
‘10bit_luma’
10 ビットコンポーネントの輝度サンプル
‘10bit_color_diff’
10 ビットコンポーネントの色差サンプル
‘10bit_luma_and_color_diff’
10 ビットコンポーネントの輝度サンプルと色差サンプル
‘8bit_luma_parity_error’
パリティエラー付きの 8 ビットコンポーネント輝度サンプル
‘8bit_color_diff_parity_error’
パリティエラー付きの 8 ビットコンポーネント色差サンプル
‘8bit_luma_and_color_diff_parity_error’
パリティエラー付きの 8 ビットコンポーネント輝度サンプルと色差サンプル
initial_cdp_sequence_cntr
CDP の 16 ビット符号なし整数 cdp_hdr_sequence_cntr および cdp_ftr_sequence_cntr フィールドの初期値。既定値は 0 です。
cdp_frame_rate
CDP の cdp_frame_rate フィールドを設定します。これはデータストリームのタイミングを実際に変えるわけではなく、生成される CDP パケットのこのフィールドに挿入される値を変えるだけです。既定値は ‘30000/1001’ です。
2.11 extract_extradata
インバンドの extradata を抽出します。
一部の codec では、長期ヘッダー(たとえば MPEG-2 のシーケンスヘッダーや、H.264/HEVC の (VPS/)SPS/PPS)を「インバンド」(つまり符号化フレームを含むビットストリームの一部として)または「アウトオブバンド」(たとえばコンテナレベルで)のいずれかで伝送できます。後者の形式は FFmpeg の用語で「extradata」と呼ばれます。
このビットストリームフィルタはインバンドのヘッダーを検出し、それらを extradata として利用できるようにします。
remove
このオプションを有効にすると、抽出後に長期ヘッダーがビットストリームから取り除かれます。
2.12 filter_units
指定した集合に含まれる、または含まれないタイプのユニットをストリームから削除します。
pass_types
通過させ、それ以外をすべて削除するユニットタイプ、またはユニットタイプの範囲のリスト。’|’ 区切りのユニットタイプ値、または ’-’ による値の範囲のリストとして指定します。
remove_types
pass_types と同じですが、指定した集合のユニットを削除し、それ以外をすべて通過させる点が異なります。
pass_types と remove_types で使うタイプは、H.264、HEVC、H.266 では NAL ユニットタイプ(nal_unit_type)に対応し(H.264 と HEVC の仕様の Table 7-1、または H.266 仕様の Table 5 を参照)、JPEG ではマーカー値(0xFF プレフィックスなし)に、MPEG-2 ではスタートコードプレフィックスを除いたスタートコード(つまり 0x000001 に続くバイト)に対応します。VP8 と VP9 では、すべてのユニットがタイプ 0 を持ちます。
この変換では extradata は変更されませんが、ストリームにインラインのパラメータセットが含まれている場合、それらが削除されると出力が使えなくなる可能性がある点に注意してください。
たとえば H.264 ストリームからすべての非 VCL NAL ユニットを削除するには次のようにします。
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT
H.265 ストリームからすべての AUD、SEI、filler を削除するには次のようにします。
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT
クローズドキャプションを含む、MPEG-2 ストリームからすべてのユーザーデータを削除するには次のようにします。
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=178' OUTPUT
クローズドキャプションを含む、H264 ストリームからすべての SEI を削除するには次のようにします。
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=6' OUTPUT
クローズドキャプションとダイナミック HDR を含む、HEVC ストリームからすべての prefix および suffix SEI を削除するには次のようにします。
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=39|40' OUTPUT
2.13 hapqa_extract
再圧縮せずに HAPQA ファイルの Rgb または Alpha 部分を抽出し、HAPQ または HAPAlphaOnly ファイルを作成します。
texture
残すテクスチャを指定します。
color alpha
HAPQA を HAPQ に変換します。
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov
HAPQA を HAPAlphaOnly に変換します。
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov
2.14 h264_metadata
H.264 ストリームに埋め込まれたメタデータを変更します。
aud
ストリームのすべてのアクセスユニットで AUD NAL ユニットを挿入または削除します。
‘pass’ ‘insert’ ‘remove’
既定値は pass です。
sample_aspect_ratio
VUI パラメータでストリームのサンプルアスペクト比を設定します。H.264 の表 E-1 を参照してください。
overscan_appropriate_flag
ストリームがオーバースキャンでの表示に適しているかどうかを設定します(H.264 の E.2.1 節を参照してください)。
video_format video_full_range_flag
ストリームの映像フォーマットを設定します(H.264 の E.2.1 節および表 E-2 を参照してください)。
colour_primaries transfer_characteristics matrix_coefficients
ストリームの色記述を設定します(H.264 の E.2.1 節および表 E-3、E-4、E-5 を参照してください)。
chroma_sample_loc_type
ストリームのクロマサンプル位置を設定します(H.264 の E.2.1 節および図 E-1 を参照してください)。
tick_rate
VUI パラメータでティックレート(time_scale / num_units_in_tick)を設定します。これはストリームで表現できる最小の時間単位であり、多くの場合ストリームのフィールドレート(フレームレートの 2 倍)を表します。
fixed_frame_rate_flag
ストリームが固定フレームレートを持つかどうかを設定します。通常はフレームレートがティックレートのちょうど半分であることを示しますが、正確な意味はインターレースとピクチャ構造に依存します(H.264 の E.2.1 節および表 E-6 を参照してください)。
zero_new_constraint_set_flags
SPS 内の constraint_set4_flag と constraint_set5_flag をゼロにします。これらのビットは以前のバージョンの H.264 仕様では予約されており、そのため一部のハードウェアデコーダはこれらがゼロであることを要求します。これをゼロにしても結果は依然として有効なビットストリームです。
crop_left crop_right crop_top crop_bottom
SPS でフレームのクロップオフセットを設定します。ストリームがすでにクロップされている場合、これらの値が現在の値を置き換えます。
これらのフィールドはピクセル単位で設定します。クロマがサブサンプリングされている場合やストリームがインターレースの場合、表現できないサイズがある点に注意してください(H.264 の 7.4.2.1.1 節を参照してください)。
sei_user_data
文字列を SEI の未登録ユーザーデータとして挿入します。引数は UUID+string の形式でなければなりません。UUID はハイフンで区切ってもよい 16 進数で表し、文字列は任意のもので構いません。
たとえば ‘086f3693-b7b3-4f2c-9653-21492feee5b8+hello’ は、指定した UUID に関連付けて文字列 “hello” を挿入します。
delete_filler
filler NAL ユニットと filler SEI メッセージの両方を削除します。
display_orientation
Display orientation SEI メッセージを挿入・抽出・削除します。構文と意味については H.264 の D.1.27 節および D.2.27 節を参照してください。
‘pass’ ‘insert’ ‘remove’ ‘extract’
既定値は pass です。
Insert モードは rotate および flip オプションと連携して動作します。既存の Display orientation メッセージは insert または remove モードで削除されます。Extract モードは表示行列をサイドデータとしてパケットに付加します。
rotate
display orientation SEI に回転を設定します(反時計回りの角度、度単位)。範囲は -360 から +360 です。既定値は NaN です。
flip
display orientation SEI に反転を設定します。
‘horizontal’ ‘vertical’
既定値は未設定です。
level
SPS にレベルを設定します。H.264 の A.3 節および表 A-1 から A-5 を参照してください。
引数はレベル名(たとえば ‘4.2’)、level_idc 値(たとえば ‘42’)、または入力ストリームの特性からレベルを推測するようフィルタに指示する特別な名前 ‘auto’ のいずれかでなければなりません。
2.15 h264_mp4toannexb
H.264 ビットストリームを長さプレフィックス方式からスタートコードプレフィックス方式(ITU-T H.264 仕様の Annex B で定義)に変換します。
これは一部のストリーミング形式、典型的には MPEG-2 トランスポートストリーム形式(muxer mpegts)で必要となります。
たとえば H.264 ストリームを含む MP4 ファイルを ffmpeg で mpegts 形式にリマックスするには、次のコマンドを使えます。
ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
このフィルタは MPEG-TS(muxer mpegts)と raw H.264(muxer h264)の出力形式では自動的に挿入される点に注意してください。
2.16 h264_redundant_pps
これは、冗長な PPS を含む一部の Blu-ray BDMV H264 ストリームに特定の修正を適用します。これらの PPS はストリームの無関係なパラメータを変更し、正しい extradata を必要とする他の変換を混乱させます。
これらの影響を受けたストリームで使われたエンコーダは、初期 QP や重み付き予測の有効・無効を変えながら、ストリーム全体にわたって余分な PPS を追加します。このため、ストリームをグローバルヘッダーのコンテナにコピーすると問題が生じます。先頭の PPS がストリームの残りの部分に適していないからです。たとえば副作用の一つとして、新しい PPS が現れるまでシークすると乱れた出力が返されます。
この BSF は余分な PPS を削除し、ストリームがグローバルヘッダー内の単一の先頭 PPS を使うようにスライスヘッダーを書き換えることで、この問題を解決します。
2.17 hevc_metadata
HEVC ストリームに埋め込まれたメタデータを変更します。
aud
ストリームのすべてのアクセスユニットで AUD NAL ユニットを挿入または削除します。
‘insert’ ‘remove’ sample_aspect_ratio
VUI パラメータでストリームのサンプルアスペクト比を設定します。
video_format video_full_range_flag
ストリームの映像フォーマットを設定します(H.265 の E.3.1 節および表 E.2 を参照してください)。
colour_primaries transfer_characteristics matrix_coefficients
ストリームの色記述を設定します(H.265 の E.3.1 節および表 E.3、E.4、E.5 を参照してください)。
chroma_sample_loc_type
ストリームのクロマサンプル位置を設定します(H.265 の E.3.1 節および図 E.1 を参照してください)。
tick_rate
VPS および VUI パラメータでティックレート(time_scale / num_units_in_tick)を設定します。num_ticks_poc_diff_one と組み合わせることで、ストリームに一定のフレームレートを設定できます。ストリームがコンテナに入っている場合、コンテナのパラメータによって上書きされる可能性が高い点に注意してください。
num_ticks_poc_diff_one
VPS および VUI で poc_proportional_to_timing_flag を設定し、この値を使って num_ticks_poc_diff_one_minus1 を設定します(H.265 の 7.4.3.1 節および E.3.1 節を参照してください)。tick_rate も同時に設定されていなければ無視されます。
crop_left crop_right crop_top crop_bottom
SPS でコンフォーマンスウィンドウのクロップオフセットを設定します。ストリームがすでにクロップされている場合、これらの値が現在の値を置き換えます。
これらのフィールドはピクセル単位で設定します。クロマがサブサンプリングされている場合、表現できないサイズがある点に注意してください(H.265 の 7.4.3.2.1 節)。
width height
クロップ後の幅と高さを設定します。
level
VPS および SPS にレベルを設定します。H.265 の A.4 節および表 A.6、A.7 を参照してください。
引数はレベル名(たとえば ‘5.1’)、general_level_idc 値(たとえばレベル 5.1 に対する ‘153’)、または入力ストリームの特性からレベルを推測するようフィルタに指示する特別な名前 ‘auto’ のいずれかでなければなりません。
2.18 hevc_mp4toannexb
HEVC/H.265 ビットストリームを長さプレフィックス方式からスタートコードプレフィックス方式(ITU-T H.265 仕様の Annex B で定義)に変換します。
これは一部のストリーミング形式、典型的には MPEG-2 トランスポートストリーム形式(muxer mpegts)で必要となります。
たとえば HEVC ストリームを含む MP4 ファイルを ffmpeg で mpegts 形式にリマックスするには、次のコマンドを使えます。
ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts
このフィルタは MPEG-TS(muxer mpegts)と raw HEVC/H.265(muxer h265 または hevc)の出力形式では自動的に挿入される点に注意してください。
2.19 imxdump
MOV に収まり、Final Cut Pro デコーダで使えるようにビットストリームを変更します。このフィルタは mpeg2video codec にのみ適用され、適切な -tag:v を指定した Final Cut Pro 7 以降ではおそらく不要です。
たとえば 30 MB/秒の NTSC IMX を MOV にリマックスするには次のようにします。
ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
2.20 mjpeg2jpeg
MJPEG/AVI1 パケットを完全な JPEG/JFIF パケットに変換します。
MJPEG は、各映像フレームが本質的に JPEG 画像である映像 codec です。個々のフレームは無損失で抽出できます。たとえば次のようにします。
ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
残念ながら、これらのチャンクはデコードに必要な DHT セグメントを欠いているため、不完全な JPEG 画像です。http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml から引用します。
Avery Lee は 2001 年に rec.video.desktop ニュースグループでこう述べています。「MJPEG、少なくとも MJPG という fourcc を持つ AVI 内の MJPEG は、固定された――そして省略された――ハフマンテーブルを使う制限付きの JPEG である。その JPEG は YCbCr 色空間でなければならず、4:2:2 でなければならず、算術符号化やプログレッシブではなく基本的なハフマン符号化を使わなければならない。……確かに MJPEG フレームを抽出して通常の JPEG デコーダでデコードできるが、その前に DHT セグメントを先頭に付け加えなければならない。さもないとデコーダはデータをどう展開すればよいか分からない。必要となる正確なテーブルは OpenDML 仕様に記載されている。」
このビットストリームフィルタは、MJPEG ストリームから抽出されたフレーム(AVI1 ヘッダー ID を持ち DHT セグメントを欠くもの)のヘッダーにパッチを当て、完全な JPEG 画像を生成します。
ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
exiftran -i -9 frame*.jpg
ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
2.21 mjpegadump
Quicktime でのデコードを可能にするため、ビットストリームに MJPEG A ヘッダーを追加します。
2.22 mov2textsub
MOV 字幕から表示可能なテキストファイルを抽出し、各字幕パケットからメタデータヘッダーを取り除きます。
text2movsub フィルタも参照してください。
2.23 mpeg2_metadata
MPEG-2 ストリームに埋め込まれたメタデータを変更します。
display_aspect_ratio
ストリームの表示アスペクト比を設定します。
次の固定値がサポートされます。
4/3 16/9 221/100
それ以外の値を指定すると、代わりに正方形ピクセルがシグナリングされます(H.262 の 6.3.3 節および表 6-3 を参照してください)。
frame_rate
ストリームのフレームレートを設定します。これは既知の値のテーブルと小さな乗数・除数を組み合わせて構成されます。指定した値が正確に表現できない場合は、最も近い表現可能な値が代わりに使われます(H.262 の 6.3.3 節および表 6-4 を参照してください)。
video_format
ストリームの映像フォーマットを設定します(H.262 の 6.3.6 節および表 6-6 を参照してください)。
colour_primaries transfer_characteristics matrix_coefficients
ストリームの色記述を設定します(H.262 の 6.3.6 節および表 6-7、6-8、6-9 を参照してください)。
2.24 mpeg4_unpack_bframes
DivX 形式のパックされた B フレームをアンパックします。
DivX 形式のパックされた B フレームは有効な MPEG-4 ではなく、欠陥のある Video for Windows サブシステムへの回避策に過ぎませんでした。これらは多くの容量を消費し、わずかな AV 同期の問題を引き起こすことがあり、デコードにより多くの CPU 能力を必要とし(プレイヤーが 2,0,2,0 というパケットあたりのフレーム構成を補うためのデコード済みピクチャキューを持っていない限り)、mp4 や mpeg-ps/ts のような標準的なコンテナにコピーすると問題を起こします。MPEG-4 デコーダはこれらをデコードできないことがあるからで、有効な MPEG-4 ではないためです。
たとえば DivX 形式のパックされた B フレームを持つ MPEG-4 ストリームを含む AVI ファイルを ffmpeg で修正するには、次のコマンドを使えます。
ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
2.25 noise
コンテナを壊さずにパケットの内容を破損させる、あるいは単にパケットを破棄します。ファジングや、エラー耐性・コンシールメントのテストに使えます。
パラメータ。
amount
パケットごとに評価され、そのパケット内のバイトをどのくらいの頻度で変更するかを決める式を受け付けます。0 未満の値は可変の頻度になります。既定値は 0 で、変更を行いません。ただし amount も drop も指定されていない場合は、amount は -1 に設定されます。受け付ける変数については以下を参照してください。
drop
パケットごとに評価され、そのパケットを破棄するかどうかを決める式を受け付けます。正の値に評価されるとパケットが破棄されます。負の値に評価されると、値の大きさにおおよそ反比例する確率で破棄されます。既定値は 0 で、破棄を行いません。受け付ける変数については以下を参照してください。
dropamount
非負の整数を受け付け、その値におおよそ反比例する確率で破棄するように割り当てます。既定値は 0 で、破棄を行いません。このオプションは後方互換性のために残されており、同じ大きさの負の値を drop に設定するのと等価です。すなわち dropamount=4 は drop=-4 と同じです。drop も指定されている場合は無視されます。
amount と drop はどちらも次の変数を含む式を受け付けます。
‘n’
パケットのインデックス。0 から始まります。
‘tb’
パケットタイムスタンプのタイムベース。
‘pts’
パケットの表示タイムスタンプ(presentation timestamp)。
‘dts’
パケットのデコードタイムスタンプ(decoding timestamp)。
‘nopts’
AV_NOPTS_VALUE を表す定数。
‘startpts’
ストリームで最初に現れた AV_NOPTS_VALUE 以外の PTS。
‘startdts’
ストリームで最初に現れた AV_NOPTS_VALUE 以外の DTS。
‘duration’ ‘d’
パケットの継続時間(タイムベース単位)。
‘pos’
入力におけるパケットの位置。不明または未設定の場合は -1 になることがあります。
‘size’
パケットのサイズ(バイト単位)。
‘key’
パケットがキーフレームとしてマークされているかどうか。
‘state’
疑似乱数の整数。主にパケットペイロードの内容から導出されます。
2.25.1 例
すべてのバイトに変更を適用しますが、パケットは一切破棄しません。
ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
タイムスタンプ 30 秒以降で、キーフレームとしてマークされていないすべての映像パケットを破棄しますが、残りのパケットは一切変更しません。
ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(pts*tb\,30)*not(key)' output.mkv
10 秒ごとに 1 秒分の音声を破棄し、残りにランダムなノイズを加えます。
ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(pts*tb\,10)\,9\,10)' output.mkv
2.26 null
このビットストリームフィルタはパケットをそのまま通過させます。
2.27 pcm_rechunk
PCM 音声を、パケットあたり固定数のサンプル、または 1 秒あたり固定のパケットレートに再パケット化します。これは (ffmpeg-filters)asetnsamples 音声フィルタ に似ていますが、音声フレームではなく音声パケットに対して動作します。
nb_out_samples, n
各出力音声パケットあたりのサンプル数を設定します。この数は_各チャンネルあたり_のサンプル数を意図しています。既定値は 1024 です。
pad, p
1 に設定すると、フィルタは最後の音声パケットを無音でパディングし、前のパケットと同じ数(frame_rate を参照、おおよそ同じ数になる場合もあります)のサンプルを含むようにします。既定値は 1 です。
frame_rate, r
このオプションを使うと、フィルタはパケットあたり固定数のサンプルではなく、1 秒あたり固定数のパケットを出力するようになります。音声のサンプリングレートがフレームレートで割り切れない場合、サンプル数は一定にならず、各パケットができるだけフレーム境界の近くで始まるようにわずかに変動します。このオプションを使うと nb_out_samples より優先されます。
frame_rate オプションを使えば、NTSC フレームレート向けの 48kHz 音声でよく知られた 1602-1601-1602-1601-1602 のパターンを生成できます。
ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc -
2.28 pgs_frame_merge
「end of display set」セグメントで終わる一連の PGS Subtitle セグメントを 1 つのパケットにマージします。
これは PGS 字幕をサポートする一部のコンテナ(muxer matroska)で必要となります。
2.29 prores_metadata
prores ストリームに埋め込まれた色プロパティのメタデータを変更します。
color_primaries
カラープライマリを設定します。利用できる値。
‘auto’
同じカラープライマリのプロパティを保持します(既定値)。
‘unknown’ ‘bt709’ ‘bt470bg’
BT601 625
‘smpte170m’
BT601 525
‘bt2020’ ‘smpte431’
DCI P3
‘smpte432’
P3 D65
transfer_characteristics
色のトランスファー特性を設定します。利用できる値。
‘auto’
同じトランスファー特性のプロパティを保持します(既定値)。
‘unknown’ ‘bt709’
BT 601, BT 709, BT 2020
‘smpte2084’
SMPTE ST 2084
‘arib-std-b67’
ARIB STD-B67
matrix_coefficients
マトリクス係数を設定します。利用できる値。
‘auto’
同じ色空間のプロパティを保持します(既定値)。
‘unknown’ ‘bt709’ ‘smpte170m’
BT 601
‘bt2020nc’
ファイルの各フレームに Rec709 色空間を設定します。
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov
ファイルの各フレームに Hybrid Log-Gamma パラメータを設定します。
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov
2.30 remove_extra
パケットから extradata を削除します。
次のパラメータを受け付けます。
freq
どのフレームタイプから extradata を削除するかを設定します。
‘k’
非キーフレームからのみ extradata を削除します。
‘keyframe’
キーフレームからのみ extradata を削除します。
‘e, all’
すべてのフレームから extradata を削除します。
2.31 setts
パケットに PTS と DTS を設定します。
次のパラメータを受け付けます。
ts pts dts
PTS、DTS、またはその両方の式を設定します。
duration
継続時間の式を設定します。
time_base
出力タイムベースを設定します。
prescale
式を評価する前に、時間フィールドをユーザー設定の出力タイムベースに変換するかどうかを設定します。既定値は 0 です。
式は eval API を通じて評価され、次の定数を含めることができます。
N
入力パケットのカウント。0 から始まります。
TS
ts または dts オプションの場合は入力のデマックスタイムスタンプ、pts オプションの場合は表示タイムスタンプ。
POS
ファイル内のパケットの元の位置。現在のパケットで未定義の場合は undefined です。
DTS
入力のデマックスタイムスタンプ。
PTS
入力の表示タイムスタンプ。
DURATION
入力の継続時間。
STARTDTS
最初のパケットの DTS。
STARTPTS
最初のパケットの PTS。
PREV_INDTS
1 つ前の入力 DTS。
PREV_INPTS
1 つ前の入力 PTS。
PREV_INDURATION
1 つ前の入力の継続時間。
PREV_OUTDTS
1 つ前の出力 DTS。
PREV_OUTPTS
1 つ前の出力 PTS。
PREV_OUTDURATION
1 つ前の出力の継続時間。
NEXT_DTS
次の入力 DTS。
NEXT_PTS
次の入力 PTS。
NEXT_DURATION
次の入力の継続時間。
TB
時間フィールドが表される単位となるタイムベース。prescale が有効ならユーザー設定の出力タイムベース、そうでなければ入力タイムベース。
TB_OUT
出力タイムベース。
SR
パケットが属するストリームのサンプリングレート。
NOPTS
AV_NOPTS_VALUE 定数。
たとえば PTS を DTS と等しく設定するには(B フレームが関与する場合は推奨しない)次のようにします。
ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv
2.32 showinfo
パケットの基本情報をログ出力します。主にテスト、デバッグ、開発に有用です。
2.33 smpte436m_to_eia608
SMPTE_436M_ANC データストリームを EIA_608 ストリームに変換し、CTA-708 CDP VANC パケットからクローズドキャプションを抽出して、それ以外のすべてのデータを無視します。
2.34 text2movsub
テキスト字幕を(mov_text codec で使われる)メタデータヘッダー付きの MOV 字幕に変換します。
mov2textsub フィルタも参照してください。
2.35 trace_headers
符号化ストリームヘッダー内のすべての構文要素(個々の符号化ブロックのレベルより上のすべて)を含むトレース出力をログに記録します。低レベルのストリームの問題をデバッグするのに有用です。
AV1、H.264、H.265、(M)JPEG、MPEG-2、VP9 をサポートしますが、ビルドによってはこれらの一部しか利用できないことがあります。
2.36 truehd_core
TrueHD ストリームからコアを抽出し、ATMOS データを取り除きます。
2.37 vp9_metadata
VP9 ストリームに埋め込まれたメタデータを変更します。
color_space
フレームヘッダーの色空間の値を設定します。RGB に設定されたフレームは暗黙的に PC レンジに設定される点、および RGB はプロファイル 0 と 2 と互換性がない点に注意してください。
‘unknown’ ‘bt601’ ‘bt709’ ‘smpte170’ ‘smpte240’ ‘bt2020’ ‘rgb’ color_range
フレームヘッダーのカラーレンジの値を設定します。色空間によって課される値があれば、この値より優先される点に注意してください。
‘tv’ ‘pc’
2.38 vp9_superframe
VP9 の不可視(alt-ref)フレームを VP9 スーパーフレームに統合し直します。これにより、可視フレームから alt-ref フレームが分離されてしまった、分割・セグメント化された VP9 ストリームのマージを修正します。
2.39 vp9_superframe_split
VP9 スーパーフレームを単一フレームに分割します。
2.40 vp9_raw_reorder
正しいタイムスタンプを持つが順序が乱れている可能性のある VP9 ストリームに対して、追加の show-existing-frame パケットを挿入して順序を補正します。
3 関連項目
ffmpeg, ffplay, ffprobe, libavcodec
4 作者
FFmpeg の開発者。
作者の詳細については、プロジェクトの Git 履歴(https://git.ffmpeg.org/ffmpeg)を参照してください。たとえば FFmpeg のソースディレクトリで git log コマンドを実行するか、オンラインリポジトリ https://git.ffmpeg.org/ffmpeg を閲覧します。
特定のコンポーネントのメンテナは、ソースコードツリー内の MAINTAINERS ファイルに記載されています。
ホスティングは telepoint.bg の提供によるものです。