フィルターの機能は主に、元のオーディオおよびビデオ データを処理してさまざまな効果を実現することです。ウォーターマークのオーバーレイ、ビデオの反転やズームなど。
次の図は、通常のトランスコーディング プロセスを示しています。フィルターはデコードとエンコードの途中にあり、点線はオプションであることを示しています。
コマンドを使用して、ffmpeg でサポートされているフィルターを表示します。
ffmpeg -フィルター
フィルターの詳細パラメーターを表示する
ffmpeg -h フィルター=パッド
上図はパッドフィルターの機能と必要なパラメーターを示しています。
ffmpeg のフィルターは次のように分類できます。
- ソースフィルターのみの出力
- オーディオフィルター オーディオフィルター
- ビデオフィルター ビデオフィルター
- マルチメディアフィルター複合フィルター
- シンクフィルターのみ入力
ここでは、2 つの特別なフィルター、 bufferとbuffersinkについて説明する必要があります。
(1) バッファ: フィルタ バッファはフィルタ グラフ内のソースを表し、元のデータはこのフィルタ ノードに入力されます。フィルタが提供する関数 (av_buffersrc_add_frame など) を呼び出すことで、フィルタリング対象のフレームをフィルタリング プロセスに送信できます。フィルター インスタンスを作成するときは、入力フレームの形式に関する必要なパラメーターをいくつか指定する必要があります (time_base、画像の幅と高さ、画像のピクセル形式など)。
(2) バッファシンク: 特別なフィルタ。フィルタ バッファシンクはフィルタ グラフ内の出力ノードを表し、処理されたデータはこのフィルタ ノードから出力されます。フィルタが提供する関数(av_buffersink_get_frameなど)を呼び出すことで、フィルタリング処理によりフィルタリングされた後のフレームを提供することができる。
ソース フィルターとシンク フィルターを除き、他のすべてのフィルターには少なくとも 1 つの入力と少なくとも 1 つの出力があります。
また、単純に単純なフィルターと複雑なフィルターに分けることもできます。
単純なフィルター: 入力と出力が 1 つだけ、コマンド ラインで -vf (ビデオ フィルター)、 -af (オーディオ フィルター)を使用します。
複雑なフィルター: 複数の入力と出力を使用するには、 コマンドラインで-lavfiまたは-filter_complexを使用します。
以下の図に、公式の filtergrpah の例を示します。
このフィルター グラフでは、4 つのフィルターを使用していることがわかります。
1.分割フィルターを使用して、入力ストリームを 2 つのストリーム出力 (main と tmp という名前の 1 つ) にコピーします。
2.クロップフィルターを使用して tmp ストリームをクロップします。
3. vflip を使用してtmp ストリームを垂直方向に反転します
4.オーバーレイを使用してtmp ストリームをメイン ストリームに重ね合わせる
コマンドラインを使用して次のように表現できます。
ffmpeg -i INPUT -vf 'split [main][tmp]; [tmp] クロップ=iw:ih/2:0:0,vflip [フリップ]; [メイン][フリップ] オーバーレイ=0:H/2' 出力
同じパスのフィルターはカンマ (「,」) で区切られ、異なるパスのフィルターはセミコロン (「;」) で区切られます。
フィルターの構文
フィルターの構文
フィルタ名=パラメータ名1=パラメータ値1:パラメータ名2=パラメータ値2
filter_name: はフィルタの名前であり、必須です。パラメータはオプションで、「:」または「+」で区切られます。パラメータ名はあってもなくても構いません。
例えば:
ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[ v]' v.avi
ビデオの Y、U、V コンポーネントを抽出するこのフィルターには、[y][u][v] の 3 つの出力があります。抽出後、異なる出力を異なるファイルに保存します。
オーディオまたはビデオ入力のないフィルターはソースフィルターと呼ばれます
オーディオとビデオ出力のないフィルターはシンクフィルターと呼ばれます
フィルターチェーンの構文
フィルター1、フィルター2、....
これは、カンマで区切られた複数のフィルターの組み合わせであり、各フィルターは前のフィルターの入力と出力になります。
ffmpeg -i audio.aac -filter_complex "aresample=async=16000,alay=316397,volume=1.0" -acodec libfdk_aac -y Output.mp4
ここでは 3 つのフィルターが使用されており、それぞれサンプル、ディレイ、ボリュームでフィルターチェーンを形成しています。
フィルターグラフの文法
フィルターチェーン 1;フィルターチェーン 2;...
複数のフィルターチェーンをセミコロン「;」で区切って組み合わせたものです。
ffmpeg -i INPUT -filter_complex "split [main][tmp]; [tmp] Crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
ここでは 3 つのフィルターチェーンが使用されています。
Split [main][tmp]; // フィルタは 1 つだけ、つまり分割され、デフォルトの入力、つまり INPUT のデコードされたフレームがあります。
出力は 2 つあり、[main]、[tmp] で識別されます。
[tmp] Crop=iw:ih/2:0:0, vflip [flip] // Crop と vflip という 2 つのフィルターで構成され、1 つは入力 [tmp]、1 つは出力 [flip] です。
[main][flip] overlay=0:H/2 // これは、2 つの入力、つまりデフォルトの出力である [main][flip] を備えたフィルター、つまりオーバーレイで構成されます。
共通フィルター
- スケール: ビデオ/画像のスケーリング
- オーバーレイ: ビデオ/画像のオーバーレイ
- クロップ: ビデオ/画像のクロップ
- トリム:ビデオクリップをインターセプトします
- 回転: ビデオを任意の角度で回転します
- ムービー: サードパーティのビデオと写真をロードします
- yadif:インターレース解除
- パッド:ビデオのパディング
- ドローテキスト: テキストを追加する