2

タイトルはほとんどそれを言います。シンプルなビデオエディタを作ろうと思っていたのですが、いろいろなエフェクトやフィルターなどの「ロジスティクス」がよくわかりませんでした。外部プログラムが画像に何らかの効果を適用できるようにしたいとしましょう。それは必然的に実行されるプログラムである必要がありますか、それともビデオエディタが解析でき、本質的にOpenGLに「渡す」ことができるOpenGL命令のセットである必要がありますか。技術的にはそれはプログラムですが、効果を適用するためだけに本格的な二次プログラムを作成するよりもエレガントで標準化されているようです。たぶんもっと良い方法がありますか?

編集:答えの人に感謝します。ただし、フォローアップは次のとおりです。他のビデオエディタはこれをどのように実装しますか?私が尋ねる理由は、上記の点で答えがかなり否定的であるように思われるためです。それで、私はそれがプロのアプリケーションによってどのように行われるのか疑問に思いました。

4

5 に答える 5

3

それは必然的に実行されるプログラムである必要がありますか、それともビデオエディタが解析でき、本質的にOpenGLに「渡す」ことができるOpenGL命令のセットである必要がありますか。

この問題に取り組むにはいくつかの方法があります(「カスタムエフェクトを作成する機能を備えたビデオエディタを作成する」)。

  1. エディターサポートプラグインを作成し、新しいビデオエフェクトプラグインを作成するためのAPIを提供します。MacromediaDirectorはこのように機能しました。新しいエフェクトは、プラグインライブラリ(プラットフォームによってはdll / .so)として実装する必要があります。
  2. ビデオエフェクトを作成するためにOpenGLバインディングを使用してスクリプト言語をアプリケーションに埋め込み、アプリケーションの内部状態と対話するための基本的な機能を提供します。これにより、エフェクトの開発が速くなりますが、特定の操作ではパフォーマンスが大幅に低下します。「Blender」(3Dエディター)はこのように機能し、Mayaは同様のフレームワークを提供します(私は思います)。基本的に、これは#1ですが、スクリプト言語として実装されています。
  3. エディターにGLSLシェーダーをロードさせます。これにより、いくつかの効果をかなり迅速に作成できますが、それ以外はお勧めできません。GLSLにはかなりの量の「パワー」(関数/数学)がありますが、GLSLだけでは、必要なものを作成することはできません。アプリケーションとはまったく対話できません(純粋なGLSLはテクスチャやフレームバッファーなどを作成できないため、何かをより面白くする能力が制限されます)。ほとんどの場合、作成できるのはある種のフィルターだけで、それ以上は作成できません。#1と#2は、エンドユーザーに「力」を与えます。
  4. ノードベースのエフェクトエディタを実装します。つまり、特定の操作を表す、ユーザーがドラッグできるノードのいくつかのタイプがあり、それらには入力/出力があり、ユーザーはそれらを接続できます。Blender 3DとUDK(Unreal Development Kit)にはそのような機能があります。.kkreiger(サイトがダウンしている、グーグルで検索)も同様のテクニックを使って96kbの一人称シューティングゲームを作ったと思います。これは非常に強力ですが、スクリプト言語を介してそのようなノードグラフを作成する方法も提供しない限り、プログラマーはマウスでグラフィカルエンティティをドラッグすることを嫌う可能性が非常に高くなります(AviSynthには似たようなものがありましたが、まったく似ていませんでした)。これは#1または#2と同じくらい強力ですが、追加の開発時間がかかります。

それを除けば、効果を上げるための「言語に依存しない」方法はありません。エフェクトプラグインをアプリケーションと相互作用させるために既存の言語を使用するか、エフェクトを記述するために独自の「言語」を作成する必要があります。これに対処する唯一の言語に依存しない方法は、プログラマーを雇い、どのような効果が欲しいかを彼に伝えることです。しかし、繰り返しになりますが、それには自然言語が必要です。

于 2012-01-08T00:55:48.033 に答える
3

外部プログラムが画像に何らかの効果を適用できるようにしたいとしましょう。それは必然的に実行されるプログラムである必要がありますか、それともビデオエディタが解析でき、本質的にOpenGLに「渡す」ことができるOpenGL命令のセットである必要がありますか。

どちらも機能します。ただし、OpenGL標準自体には、「OpenGL命令」や「オペコード」のようなものはありません。しかし、少なくとも間接GLXを備えたX11ベースのシステムでは、GLXが実際にオペコードを定義するため、これは可能です。また、間接的である場合、複数のXクライアントが同じコンテキストで動作する可能性があります。残念ながら、OpenGL3(すべての操作にオペコードが定義されているわけではないため、OpenGL-3では間接的に不可能)が必要な場合があるため、または直接コンテキストが必要な場合があるため、ほとんどの場合、そのオプションはありません。 GLXを使用しないでください。

したがって、次のオプションは、OpenGL用のある種のコマンド/インタプリタプロンプトを他のプロセスに提供することです。怠け者の場合は、PythonOpenGLバインディングと一緒にPythonインタープリターをプログラムに埋め込むことをお勧めします。これらは現在アクティブなコンテキストで動作し、他のプログラムが実際にPythonスクリプトを送信して処理を実行できるようにします。

最後になりましたが、RPCインターフェイスを介してOpenGLを提供できます。

または、いくつかのプラグインシステムを提供します。ここで、いくつかのDLLをロードします。

于 2012-01-08T00:45:41.103 に答える
1

もちろんですが、基本的には自分の言語を作成するのと同じです。何らかのテキストインターフェイスを介してユーザーからOpenGLの「指示」を受け入れ(または、何らかの方法でGUIとしてまとめたい場合)、それらの「指示」を解析すると、基盤となる実装は、アプリケーションの言語に関係なく、これらの指示を実行します。で書かれている。

于 2012-01-07T22:34:31.647 に答える
0

簡単な答えはノーです。あなたが探しているのは、基盤となるテクノロジーに関係なくプレゼンテーションを説明するHCIの男の夢のDSLです。

于 2012-01-07T22:27:41.267 に答える
0

おそらくあなたが望んでいたものではないかもしれませんが、GLSLを見たいと思うかもしれません。GLSLは、グラフィックカードドライバによってネイティブの「グラフィックアセンブリ言語」にコンパイルされるCのような言語です。

于 2012-01-07T23:55:48.127 に答える