問題タブ [yuv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
video - フラグメントシェーダーによる YUV 変換
Nvidia のシェーダー言語で記述されたフラグメント シェーダーを介して、YUV から RGB への変換を実装しました。(Y、U、および V は、フラグメント シェーダーのマルチ テクスチャリングを介して結合される個別のテクスチャに格納されます)。OpenGL では問題なく動作しますが、Direct3D では出力イメージを正しく表示できません。YUV 変換を行う機会を得る前に、Direct3D が Y、U、および V サンプルを何らかの形で変更しているのではないかと疑い始めています。フラグメント シェーダーが実行される前に、Direct3D がテクスチャに格納されている値を変更するかどうか、およびそれらを無効にする方法を知っている人はいますか?
directshow - 自動 YUV -> カスタム デコーダー用 DirectShow の RGB
ネットで何時間も検索した後、私はこれに対する解決策を見つけるのに非常に必死です. YV12およびYUY2カラーモデルを出力するDirectShowでOGG Theoraデコーダーを起動して実行しました。
ここで、この出力用の RGB ピクセル操作フィルターを作成し、それをビデオ レンダラーに処理したいと考えています。thisと thisによると、それは本当に簡単で透過的であるべきですが、そうではありません。
たとえば、CheckInputType()
このチェックで実装しました:
そして、Theora と私のデコーダーの間にその MSYUV を挿入し、私のために仕事をしてくれることを期待します (つまり、RGB に変換します)。問題は、(GraphEdit アプリケーションで) 毎回エラーが発生することです。そして、入力としてYV12であると100%確信しています(デバッガーでチェック)。私が考えることができる唯一の説明は、AVI デコンプレッサについての言及ですが、それに関するそれ以上の情報はありません。
- この自動機能を利用するには、AVI コンテナを使用する必要があるということですか?
- 奇妙なことに、たとえば WMV ビデオ (出力に YUV を含む) で機能しますが、この OGG デコーダーだけが問題を抱えています。では、おそらく、この OGG デコーダーが何を見逃しているのかが問題になるでしょうか?
MSYUV フィルターがカラー スペース コンバーターとして機能しないのは残念です。つまり、GraphEdit で表示して直接使用できます...
これに関するヒントをいただければ幸いです。最後の手段として、独自の YV12 -> RGB コンバーターをプログラミングします。
pcm - リップシンクを測定する YUV/PCM ビジュアライザー
エンコーダーからの未加工のビデオと未加工のオーディオの 2 つのダンプ ファイルがあり、「リップシンク」を測定できるようにしたいと考えています。ハンマーが金床を叩くビデオを想像してみてください。フレームごとに移動して、ハンマーが最終的に金床に当たったときに、オーディオ トラックの振幅にスパイクがあることを確認したいと思います。
すべてが高速で行われるため、音声だけを聞くことはできず、時間領域で波形を確認する必要があります。
ビデオとオーディオの両方を表示できるツールはありますか?
webcam - すべての Web カメラが YUY2 を使用していますか?
Web カメラからの生データが YUY2 の形式であることに気付きました。実際、この「生データ」は AVICAP コールバックの入力であり、これが Web カメラからの実際のデータであると思います。
とにかく、すべての Web カメラは YUY2 形式を使用していますか、それとも別の形式も想定する必要がありますか?
cocoa - CocoaOpenGLプログラムで生のYUVフレームを表示する方法
私は、サンプルの生のYUVファイルを取得してCocoaOpenGLプログラムに表示するプログラムを作成するタスクを割り当てられました。
私は自分の仕事のインターンであり、どのように始めればよいのかほとんど、あるいはまったくわかりません。YUVに関するウィキペディアと記事を読んでいますが、生のYUVファイルを開き、データを抽出してRGBに変換し、ビューウィンドウに表示する方法に関する適切なソースコードが見つかりませんでした。
基本的に、タスクの次の側面について支援が必要です-サンプルYUVファイルからYUVデータを抽出する方法-YUVデータをRGB色空間に変換する方法-OpenGLでRGB色空間を表示する方法。(これは時間の経過とともに理解できると思いますが、最初の2つのポイントについては本当に助けが必要です)
使用するクラスを教えてください。または、YUVグラフィック/ビデオディスプレイについて学ぶことができる場所を教えてください。
cocoa - CocoaでYUVファイル形式を見つける
未加工の YUV ファイル形式を取得しました。この時点でわかっているのは、クリップの解像度が 176x144 であることだけです。
Y pla は 176x144=25344 バイトで、UV プランはその半分です。ここで、YUV についていくつか読みましたが、Y プレーンと US プレーンの格納方法に応じて、さまざまな形式が存在します。
では、Cocoa で何らかのチェックを実行して生の YUV ファイル形式を見つけるにはどうすればよいでしょうか。YUV フレームに情報を抽出できるファイル ヘッダーはありますか?
みんなに前もって感謝します
objective-c - YUV を OpenGL で表示する
NV12 形式の未加工の YUV ファイルを表示できません。
選択したフレームを表示できますが、まだ主に白黒で、ピンクと緑の特定の色合いがあります。
ここに私の出力がどのように見えるかがあります
とにかく、これが私のプログラムの仕組みです。(これは cocoa/objective-c で行われますが、構文ではなく、プログラムのアルゴリズムに関する専門家のアドバイスが必要です。)
プログラムの実行前に、YUV ファイルは「test.yuv」という名前のバイナリ ファイルに保存されます。ファイルは NV12 形式です。つまり、Y プランが最初に保存され、次に UV プランがインターレースされます。多くのテストを行ったため、ファイルの抽出に問題はありません。
開始時に、バイナリ/8 バイト/バイト/文字を Y、U、V の float 値に変換するルックアップ テーブルを作成します。
Y平面の場合、これは私のコードです
U プレーン ルックアップ テーブル
そしてVルックアップテーブル
この時点の後、Y および UV プランを抽出し、それらを yBuffer および uvBuffer の 2 つのバッファーに格納します。
この時点で、YUV データを変換して、「frameImage」という RGB バッファ配列に格納しようとしています。
次に、OpenGLで画像を描画しようとしました
基本的に、これはナットシェルの私のプログラムです。基本的に、バイナリ YUV ファイルを読み取り、すべてのデータを char 配列バッファーに格納します。次に、これらの値を対応する YUV float 値に変換します。
ここでエラーが発生する可能性があります。Y ルックアップ テーブルでは Y 平面を [0,1] に標準化し、U 平面では [-0.435,0.436] の間の値を標準化し、V 平面では標準化しました。 [-0.615,0.615] の間です。ウィキペディアによると、これらはYUV値の範囲であるため、これを行いました。
また、YUV から RGB への式は、ウィキペディアと同じ式です。他にもいろいろな計算式を試しましたが、これがフレームの大まかな概観を示す唯一の計算式です。私のプログラムが YUV フレーム データを正しく表示しない理由を推測する人もいるかもしれません。私の標準化技術と関係があると思いますが、私には問題ないようです。
私は多くのテストを行いましたが、ルックアップ テーブルが原因でエラーが発生していることを 100% 確信しています。私の設定式は正しくないと思います。
これを読んでいるすべての人への注意。フレーム データを正しく抽出できなかったため、長い間、フレームが正しく表示されませんでした。
私が最初にプログラミングを始めたとき、たとえば 30 フレームのクリップでは、30 の Y 平面データすべてが最初にデータ ファイルに書き込まれ、次に UV 平面データが続くという印象を受けました。
試行錯誤して分かったのは、YUV データ ファイル、具体的には NV12 の場合、データ ファイルは次のように格納されるということでした。
Y(1) UV(1) Y(2) UV(2) ... ...
@nschmidt
コードをあなたが提案したものに変更しました
これが私が得た結果です
ここにコンソールからの印刷行があります。変換されてframeImage配列に格納されているY、U、V、およびRGB値の値を出力しています
YUV:[0.658824,-0.022227,-0.045824] RGBFinal:[0.606593,0.694201,0.613655]
YUV:[0.643137,-0.022227,-0.045824] RGBFinal:[0.590906,0.678514,0.597969]
YUV:[0.607843,-0.022227,-0.045824] RGBFinal:[0.555612,0.643220,0.562675]
YUV:[0.592157,-0.022227,-0.045824] RGBFinal:[0.539926,0.627534,0.546988]
YUV:[0.643137,0.025647,0.151941] RGBFinal:[0.816324,0.544799,0.695255]
YUV:[0.662745,0.025647,0.151941] RGBFinal:[0.835932,0.564406,0.714863]
YUV:[0.690196,0.025647,0.151941] RGBFinal:[0.863383,0.591857,0.742314]
2009 年 7 月 13 日更新
nschmidt さんからのアドバイスのおかげで、問題は最終的に解決されました。私の YUV ファイルは実際には YUV 4:1:1 形式であることがわかりました。当初、YUV NV12 形式であると言われました。とにかく、私の結果をあなたと共有したいと思います。
ここに出力があります
デコード用の私のコードは次のとおりです
基本的に、生ファイルの抽出には NSData を使用しました。文字配列バッファに格納されます。YUV から RGB への変換には、上記の式を使用し、その後、値を [0:255] にクランプしました。次に、表示用に OpenGL で 2DTexture を使用しました。
したがって、将来 YUV を RGB に変換する場合は、上記の式を使用してください。以前の投稿の YUV から RGB への変換式を使用している場合は、[0:1] の間でクランプされる RGB の値から GL_Float にテクスチャを表示する必要があります。
objective-c - YUVデータをCGContextに書き込む
YUVフレームデータをCGContextに書き込むにはどうすればよいですか?
opengl - OpenGL 色空間変換
フラグメント シェーダーを使用せずにハードウェア ベースの YUV から RGB 色空間への変換を行うために、YUV 色空間でテクスチャを作成する方法を知っている人はいますか? 私は NVidia 9400 を使用していますが、このトリックを実行しているように見える明らかな GL 拡張機能は見当たりません。フラグメント シェーダーの使用例を見つけましたが、現在取り組んでいるプロジェクトは OpenGL 1.1 しかサポートしておらず、それを 2.0 に変換して必要なすべての回帰テストを実行する時間がありません。これも Linux をターゲットにしています。他のプラットフォームでは MESA 拡張機能を使用していますが、Nvidia カードでは機能しません。
actionscript-3 - ActionScript で RGB->YUV 変換を実行する方法は?
ActionScript で RGB->YUV 変換を実行する方法は?
図書館?ツッツ?記事?