シェーダーを使用してMPCでビデオを編集する

タスクがあります:再生中にビデオを「オンザフライ」で変更します -左右の部分を入れ替えます。 反映しない、すなわち、変更しない、すなわち 写真を2つの部分に切り分けて交換します。 もちろん、 AviSynthなどのフレームサーバーを使用してそれを行うことができますが、もはや「オンザフライ」ではありません。ビデオファイルごとにスクリプトを記述する必要があります。 負担をかけずにすばやくやりたい。

イチジクの上? Yandexの機械学習に関する講義コースをより見やすくするため。 講師はプレゼンテーションのポイントをライブで指し、それが何であるかを理解するために、目で常に画面を飛び越えなければなりません。

画像

解決策


Media Player Classicで利用可能なシェーダーツールを使用します。 標準セットには、画像を編集するための既製のシェーダーがいくつかあります-「エンボス」、「グレースケール」、「16-235〜0-255」など。 そこでは必要ないので、新しいシェーダー( HLSL言語の小さなプログラム)を作成します。

sampler s0 : register(s0); float4 main(float2 tex : TEXCOORD0) : COLOR { // swapLine 0.5 = in the middle float swapLine = 1082.0 / 1920.0; tex.x = (tex.x + swapLine) % 1.0; float4 c0 = tex2D(s0, tex); return c0; } 

Shift.hlslという名前で、メディアプレーヤーの\ Shadersフォルダー(たとえば、C:\ Program Files \ MPC-HC \ Shaders)に保存します。 次に、Media Player Classicの設定( オプション/再生/シェーダー )に移動し、新しいシェーダーシェーダーをアクティブなサイズ変更前のシェーダーリストに追加します。

ビデオ処理のこの方法はCPUをロードしません。すべての作業は、いずれにせよ、それが本物でエミュレートされていない場合、グラフィックカードによって行われるためです。

それは何ですか、バリモア?


これは、 texパラメーターを介して渡される座標に応じてポイントの色を出力するピクセルシェーダーです。 変数s0には、ビデオの現在のフレームのテクスチャが含まれています。

新しい水平座標は、現在の座標とswapLineシフトの合計の1を法とする除算の剰余として計算されます。 したがって、ポイントを右側に移動し、寸法を超えたときに左側に再配置します。

最後に、 tex2D(s0、tex)コマンドは、元のフレームの目的の座標を持つポイントの色を返します。

PS


Source: https://habr.com/ru/post/J434856/


All Articles