如何在YUV 4:2:0文件中找出分辨率和帧数?

Mar*_*riy 6 yuv

如果我知道图像中有多少像素(亮度样本),如何找出YUV 4:2:0文件中的分辨率和帧数?

Fre*_*ihl 20

YUV 4:2:0平面看起来像这样:

----------------------
|     Y      | Cb|Cr |
----------------------
Run Code Online (Sandbox Code Playgroud)

哪里:

Y = width x height pixels (bytes)
Cb = Y / 4 pixels (bytes)
Cr = Y / 4 pixels (bytes)

Total num pixels (bytes) = width * height * 3 / 2
Run Code Online (Sandbox Code Playgroud)

这是像素放置在4:2:0子采样中的方式:

420

如您所见,每个色度值在4个亮度像素之间共享.

基本上,您唯一能做的就是查看哪些帧大小均匀地划分总文件大小.

作为一个例子,考虑经典的forman-clip,你可以从http://trace.eas.asu.edu/yuv/foreman/foreman_cif.7z下载

该剪辑的大小是45619200字节.如何从中获得尺寸和帧数?尝试不同的决议!

SDTV吗?

In [7]: 45619200 / float(720*576*3/2)
Out[7]: 73.33333333333333
Run Code Online (Sandbox Code Playgroud)

不!

QCIF吗?

In [8]: 45619200 / float(176*144*3/2)
Out[8]: 1200.0
Run Code Online (Sandbox Code Playgroud)

可能...

这是CIF吗?

In [9]: 45619200 / float(352*288*3/2)
Out[9]: 300.0
Run Code Online (Sandbox Code Playgroud)

可能...

找出方法的唯一方法是尝试显示它.

我们来试试QCIF吧

拧

看起来不对劲.让我们尝试CIF

对

答对了!

  • 根据您的注释:**总像素数(字节)= 宽度 * 高度 * 3 / 2** 您可以计算 **宽度高度 = 帧大小 * 2 / 3;** 然后您可以检查匹配的常见尺寸。或者采用常见的长宽比 4:3。**宽度=宽度高度/3;高度=宽度高度/4;检查=宽度*高度;ASSERT(check == widthHeight);** 当然,还有其他宽高比需要检查。例如,16:9 为高清。 (2认同)