【问题标题】:How to find out resolution and count of frames in YUV 4:2:0 file?如何找出 YUV 4:2:0 文件中的分辨率和帧数?
【发布时间】:2013-10-30 08:57:19
【问题描述】:

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

【问题讨论】:

    标签: yuv


    【解决方案1】:

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

    ----------------------
    |     Y      | Cb|Cr |
    ----------------------
    

    地点:

    Y = width x height pixels (bytes)
    Cb = Y / 4 pixels (bytes)
    Cr = Y / 4 pixels (bytes)
    
    Total num pixels (bytes) = width * height * 3 / 2
    

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

    如您所见,每个色度值在 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
    

    不!

    QCIF吗?

    In [8]: 45619200 / float(176*144*3/2)
    Out[8]: 1200.0
    

    可能……

    是到岸价吗?

    In [9]: 45619200 / float(352*288*3/2)
    Out[9]: 300.0
    

    可能……

    找出答案的唯一方法是尝试显示它。

    让我们试试 QCIF

    看起来不太对劲。让我们试试CIF

    Bingo!

    【讨论】:

    • 根据您的注释:总像素数(字节)= 宽度 * 高度 * 3 / 2 您可以计算 widthHeight = frameSize * 2 / 3; 然后您可以检查匹配的常见尺寸。或者选择 4:3 的常见纵横比。 宽度 = 宽度高度 / 3;高度 = 宽度高度 / 4;检查=宽度*高度; ASSERT(check == widthHeight); 当然,还有其他纵横比需要检查。例如 16:9 用于高清。
    • 你是绝对正确的。我对这个答案的想法只是提供一些基本的见解来启动 OP。你可以花一辈子的时间研究 YCbCr-data 的各个方面 :-)
    • 回复:终生 - 是的。这个 OP 大约是 4:2:0,如果你说的是 4:2:2 或 YCbCr 的任何其他变体,一切都会改变。如果您在同地交谈,转换为其他颜色格式 (RGB) 甚至会发生变化。您的答案是 YCbCr 4:2:0 的绝佳入门读物。那些需要其他血腥细节的人正在阅读厚厚的书籍。 ;-D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2020-02-01
    • 2021-03-26
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多