【发布时间】:2021-11-29 18:11:32
【问题描述】:
我有一个名为 buf 的字节数组,其中包含从帧缓冲区获得的 YUV I420 格式的单个视频帧。对于每个视频帧,我还有以下信息:
Size (e.g. 320x180)
Stride Y (e.g. 384)
Stride U (e.g. 384)
Stride V (e.g. 384)
Plane offset Y (e.g. 0)
Plane offset U (e.g. 69120)
Plane offset V (e.g. 69312)
在一个文件中连接多个视频帧,并将其与大小信息一起传递给 VLC 或 FFmpeg 中的原始视频解码器只会产生乱码,所以我认为 buf 中的字节应该使用上述信息重新排序以产生可播放输出,但我对使用视频完全陌生,所以这可能是错误的。
大小、步幅和偏移量信息应该以何种顺序与buf 中的字节组合以生成可以在视频播放器中原始播放的字节流?
示例:
【问题讨论】:
-
您可以发布/上传一些示例数据(完整框架)吗?平面偏移看起来不对。 U和V之间只有192,这是不对的。步幅略大于宽度对我来说意味着有填充。
-
@ChristophRackwitz 当然,我已经添加了一个完整框架的链接。我必须承认在十六进制编辑器中查看它看起来很奇怪,但这是我从帧缓冲区中得到的?
-
imgur.com/a/x4Ik5Gq 这是被解释为一个灰度流的 yuv 文件,384 宽。 352 像素宽的可用数据。数据看起来很奇怪。我还不能推测。 U 和 V 行 似乎也是交错的。如果是 U 然后是 V,我们会看到堆叠的两张平面图片,而不是并排的图片。如果它们是按样本交错的,我们会看到一张带有一些纹理的图片。一种奇怪的格式。数据从何而来?
-
this 建议这种格式可以称为
M420。无论如何,奇怪,但可解码。 -
imgur.com/a/x4Ik5Gq 上的第二张图片看起来是否合理,颜色是否正确?可用数据确实是 320x180
标签: c image image-processing video yuv