当图像宽高为奇数时,如何计算 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,需要向上取整,以提高边缘像素精度。但是没有专业的定义,如果大家找到专业定义辛苦贴到评论中。

相关推荐
2601_962284502 天前
uv:终结 Python 虚拟环境管理乱局
python·项目管理·uv·虚拟环境·依赖管理
一直走下去-明4 天前
在 Windows 上安装 uv
windows·uv
<花开花落>5 天前
Python 项目迁移到 uv:经验小结与可复用工作流
python·uv
Hello Mr.Z5 天前
microduck_rl(MuJoCo+PPO+WandB+UV训练机器人)
机器人·uv·rl·ppo·microduck
点心的游戏开发世界8 天前
UnityShaderGraph滚动UV笔记
笔记·uv
长江后浪博客11 天前
陶瓷盘UV喷墨印刷中的Z轴高度测量与防碰撞技术方案
数码相机·uv·陶瓷盘uv打印·uv喷墨印刷·z轴测高·喷头防碰撞·激光位移传感器
大衛說13 天前
02 · 环境搭建:uv 包管理与现代 IDE
ide·uv
咋吃都不胖lyh17 天前
使用 uv 根据 requirements.txt 创建并应用虚拟环境
uv
欧叶冲冲冲20 天前
uv Python 环境管理笔记
笔记·python·uv
hqzing20 天前
几个主流的环境管理器(rustup、uv、nvm、fnm)已经在鸿蒙 PC 上可用
uv