当图像宽高为奇数时,如何计算 I420 格式的uv分量大小

背景

I420 中 yuv 数据存放在3个 planes 中。

网上一般说 I420 数据大小为 widthheight 1.5

但是当 width 和 height 是奇数时,这个计算公式会有问题。

I420 中 u 和 v 的宽高分别为 y 的一半。

但是当不能整除时,是如何取整呢?向上还是向下,网上一般都没有细说。

求证过程

今天遇到个问题,和这个相关。网上查询和用 ffmpeg 实验了一下。

网上查询

问了 chatgpt

google 结果

https://groups.google.com/a/webmproject.org/g/webm-discuss/c/LaCKpqiDTXM

https://sourceforge.net/p/raw-yuvplayer/bugs/1/

使用 ffmpeg 测试

使用 windows 自动绘图系统,绘制3张 rgb 图片,保存成 bmp 图片。

使用 ffmpeg 命令将图片转化为视频。

使用 ffmpeg 命令将 Mp4 转换为 yuv420p 的 yuv 数据

使用 notepad 打开数据,计算 yuv 的数据长度。

最后计算结果和网络说的一样。

yuv player 播放该 yuv 数据正常

结论

uv 的宽高除以2,需要向上取整,以提高边缘像素精度。但是没有专业的定义,如果大家找到专业定义辛苦贴到评论中。

相关推荐
什么都不会的Tristan12 小时前
UV统计(HyperLogLog技术)
uv
临渊羡鱼的猫8 天前
uv安装方法
uv
黑金IT8 天前
抛弃 Pip,UV安装快20倍
pip·uv
weixin_462446238 天前
用 python -m ensurepip --upgrade 修复 uv / venv 中缺失 pip 的问题
python·pip·uv
MuGuiLin9 天前
Conda 环境管理工具:高效管理 Python 与多版本依赖使用详解
conda·pip·anaconda·uv·虚拟环境·.venv·python版本管理
脾气有点小暴9 天前
uv-drop-down-popup 在 iOS 真机中随屏幕滚动偏移
ios·uniapp·uv
一杯咖啡Miracle9 天前
UV管理python环境,打包项目为docker流程
python·算法·docker·容器·uv
很帅的友人11 天前
cocos creator3.8 箭头的uv 流动shader
uv
schinber15 天前
Python包管理工具全景指南:从pip到现代化工具实战
python·conda·pip·uv
曲幽16 天前
FastAPI入门:从简介到实战,对比Flask帮你选对框架
python·flask·fastapi·web·route·uv·uvicorn·docs