问题标签 [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.

0 投票
2 回答
5605 浏览

video - 通过片段着色器进行 YUV 转换

我已经通过用 Nvidia 的着色器语言编写的片段着色器实现了 YUV 到 RGB 的转换。(Y、U 和 V 存储在单独的纹理中,这些纹理通过我的片段着色器中的多纹理组合在一起)。它在 OpenGL 下工作得很好,但在 Direct3D 下我无法让输出图像看起来正确。我开始怀疑 Direct3D 在我有机会进行 YUV 转换之前以某种方式修改了 Y、U 和 V 样本。有谁知道 Direct3D 是否在片段着色器运行之前对存储在纹理中的值进行任何修改以及如何禁用它们>?

0 投票
1 回答
5172 浏览

directshow - 用于自定义解码器的 DirectShow 中的自动 YUV -> RGB

在网上搜索了几个小时后,我非常渴望找到解决方案。我已经在 DirectShow 中启动并运行 OGG Theora 解码器,它输出 YV12 和 YUY2 颜色模型。

现在,我想为此输出制作一个 RGB 像素操作过滤器并将其处理到视频渲染器中。根据thisthis,它应该非常简单和透明,但事实并非如此。

例如,我在CheckInputType()这个检查中实现了:

我希望它在 Theora 和我的解码器之间插入 MSYUV 并为我完成这项工作(即将其转换为 RGB)。问题是我每次都出错(在 GraphEdit 应用程序中)。而且我 100% 确定它是 YV12 作为输入(在调试器中检查)。我能想到的唯一解释是提到了 AVI 解压缩器,但没有关于它的更多信息。

  • 这是否意味着如果我想获得这个自动功能,我必须使用 AVI 容器?
  • 奇怪的是它适用于例如 WMV 视频(在他们的输出上带有 YUV),只有这个 OGG 解码器有问题。所以这可能是一个问题,这个OGG解码器错过了什么?

太糟糕了,MSYUV 过滤器不能用作颜色空间转换器,即在 GraphEdit 中可见且可直接使用...

我很欣赏这方面的任何提示,编程自己的 YV12 -> RGB 转换器我作为最后的手段。

0 投票
1 回答
601 浏览

pcm - YUV/PCM Visualizer 测量唇形同步

我有两个来自编码器的原始视频和原始音频转储文件,我希望能够测量“唇形同步”。想象一下锤子敲击铁砧的视频。我想逐帧查看,当锤子最终击中铁砧时,音轨上的振幅会出现尖峰。

由于一切发生的速度,我不能只听音频,我需要在时域中查看波形。

是否有任何工具可以让我同时看到视频和音频?

0 投票
1 回答
3087 浏览

webcam - 所有的网络摄像头都使用 YUY2 吗?

我注意到来自我的网络摄像头的原始数据来自 YUY2。实际上,这个“原始数据”是 AVICAP 回调的输入,我想这是来自网络摄像头的实际数据。

无论如何,所有网络摄像头都使用 YUY2 格式,还是我也应该期待不同的格式?

0 投票
3 回答
11201 浏览

cocoa - 如何在 Cocoa OpenGL 程序中显示原始 YUV 帧

我被分配了编写一个程序的任务,该程序采用示例原始 YUV 文件并将其显示在 Cocoa OpenGL 程序中。

我是我工作的实习生,我几乎不知道如何开始。我一直在阅读有关 YUV 的维基百科和文章,但我找不到任何关于如何打开原始 YUV 文件、提取数据并将其转换为 RGB 并在视图窗口中显示的好的源代码。

本质上,我需要任务的以下方面的帮助 - 如何从示例 YUV 文件中提取 YUV 数据 - 如何将 YUV 数据转换为 RGB 颜色空间 - 如何在 OpenGL 中显示 RGB 颜色空间。(这个我想我可以随着时间的推移弄清楚,但我真的需要前两点的帮助)

请告诉我要使用的课程,或者指出我可以了解 YUV 图形/视频显示的地方

0 投票
1 回答
1590 浏览

cocoa - 在 Cocoa 中查找 YUV 文件格式

我得到了一个原始的 YUV 文件格式,此时我所知道的是剪辑的分辨率为 176x144。

Y pla 是 176x144=25344 字节,UV 计划是它的一半。现在,我做了一些关于 YUV 的阅读,并且有不同的格式对应于 Y 和 US 飞机的不同存储方式。

现在,如何在 Cocoa 中执行某种检查以查找原始 YUV 文件格式。YUV 框架中是否有一个文件头,我可以在其中提取一些信息?

在此先感谢大家

0 投票
3 回答
11528 浏览

objective-c - 在 OpenGL 中显示 YUV

我无法显示 NV12 格式的原始 YUV 文件。

我可以显示一个选定的框架,但是,它仍然主要是黑白的,带有一定的粉红色和绿色。

这是我的输出的样子 替代文字

无论如何,这就是我的程序的工作方式。(这是在 cocoa/objective-c 中完成的,但我需要您对程序算法而不是语法的专家建议。)

在程序执行之前,YUV 文件存储在名为“test.yuv”的二进制文件中。该文件为 NV12 格式,这意味着首先存储 Y 计划,然后隔行扫描 UV 计划。我的文件提取没有问题,因为我对其进行了很多测试。

在启动期间,我创建了一个查找表,它将二进制/8 位/一个字节/字符转换为受尊重的 Y、U、V 浮点值

对于 Y 平面,这是我的代码

U 平面查找表

和 V 查找表

在此之后,我提取 Y & UV 计划并将它们存储到两个缓冲区中,yBuffer 和 uvBuffer

此时,我尝试转换 YUV 数据并将其存储到一个名为“frameImage”的 RGB 缓冲区数组中

然后我尝试在OpenGL中绘制图像

所以基本上这是我的程序。基本上我读取二进制 YUV 文件,将所有数据存储在 char 数组缓冲区中。然后我将这些值转换为他们尊重的 YUV 浮点值。

这就是我认为可能出现错误的地方:在 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 进行原始文件提取。存储在 char 数组缓冲区中。对于 YUV 到 RGB 的转换,我使用了上面的公式,然后,我将值限制为 [0:255]。然后我在 OpenGL 中使用 2DTexture 进行显示。

因此,如果您将来要将 YUV 转换为 RGB,请使用上面的公式。如果使用前面帖子中的 YUV 到 RGB 转换公式,那么您需要在 GL_Float 中显示纹理,因为 RGB 的值被限制在 [0:1] 之间

0 投票
1 回答
1681 浏览

objective-c - 将 YUV 数据写入 CGContext

如何将 YUV 帧数据写入 CGContext?

0 投票
2 回答
2625 浏览

opengl - OpenGL 色彩空间转换

有谁知道如何使用 YUV 颜色空间创建纹理,以便我们可以在无需使用片段着色器的情况下进行基于硬件的 YUV 到 RGB 颜色空间转换?我使用的是 NVidia 9400,但没有看到明显的 GL 扩展似乎可以解决问题。我找到了如何使用片段着色器的示例,但我目前正在处理的项目仅支持 OpenGL 1.1,我没有时间将其转换为 2.0 并执行所有必要的回归测试。这也是针对 Linux 的。在其他平台上,我一直在使用 MESA 扩展,但它在 Nvidia 卡上不起作用。

0 投票
1 回答
2445 浏览

actionscript-3 - 如何使用 ActionScript 执行 RGB->YUV 转换?

如何使用 ActionScript 执行 RGB->YUV 转换?

库?啧啧?文章?