FFMPEG のフィルター filter の簡単な紹介

フィルターの機能は主に、元のオーディオおよびビデオ データを処理してさまざまな効果を実現することです。ウォーターマークのオーバーレイ、ビデオの反転やズームなど。

次の図は、通常のトランスコーディング プロセスを示しています。フィルターはデコードとエンコードの途中にあり、点線はオプションであることを示しています。

コマンドを使用して、ffmpeg でサポートされているフィルターを表示します。

ffmpeg -フィルター 

フィルターの詳細パラメーターを表示する

ffmpeg -h フィルター=パッド

 上図はパッドフィルターの機能と必要なパラメーターを示しています。

ffmpeg のフィルターは次のように分類できます。

  1. ソースフィルターのみの出力
  2. オーディオフィルター オーディオフィルター
  3. ビデオフィルター ビデオフィルター
  4. マルチメディアフィルター複合フィルター
  5. シンクフィルターのみ入力

ここでは、2 つの特別なフィルター、 bufferbuffersinkについて説明する必要があります
(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:インターレース解除
  • パッド:ビデオのパディング
  • ドローテキスト: テキストを追加する

おすすめ

転載: blog.csdn.net/yunxiaobaobei/article/details/130442824