FFmpeg内存对齐简述

目录

引文

行字节数的计算

ffmpeg中的align

ffmpeg中的linesize

内容参考


引文

在ffmpeg的使用过程中有时会发现align这个参数,那么这个参数代表什么意思,不同的值会产生什么影响呢,详见下文。

行字节数的计算

理解内存对齐之前首先要理解行的概念,视频有宽高两个概念,行通常是与宽相关联的。例如一张1280*720的图片,其宽就为1280,但其行却并不一定为1280,行具体为多少要取决于对齐数align是多少,一个行的大小必须是对齐数align的整数倍(类似于C语言的结构体对齐)。假设一张1280*720的图片,如果align为1,则行就为1280;如果align为3,则行为1281,需要在1280的基础上补1个字节。行的字节数计算方法可以概括为: 其中ceil表示向上取整。

其实上面的说法不是很严谨,因为一个像素点不可能只有一个字节,以rgb存储模式为例,一个像素点有rgb三个通道,每个通道占1字节的话,那么一个像素点就会占3个字节,那么在align为1的情况下1280*720的图片在实际存储时每一行的字节数就不是1280了,而是1280*3=3840,所以总大小就为3840*720。

也就是说对齐是根据实际存储字节大小来计算的,我们先要计算出这一行实际占用的字节数,再根据计算出的字节数来计算对齐。例如3*10的图片,每个像素点占2个字节,对齐数align为4,那么行数是多少呢,从条件可知,每行3个像素点,每个像素点占2字节,那么每行就是6字节,而对齐数是4,6不是4的整数倍,因此6需要补2个字节凑成8,8就是4的整数倍了,那么我们就知道每行在内存中实际占用了8个字节,后两个字节是为了对齐补上的,总共有10行,那么这张图片在实际内存中就占用了8*10=80个字节,而不是60个字节了。本来这张图片只需要60个字节,为何要用80个字节来存储呢?这是因为cpu并不能从任意地址开始读取数据,如果不对齐,那么可能需要多次读取才能读到完整数据,因此对齐主要是为了提升性能,典型的空间换取时间。

值得注意的是yuv的计算,以w*h的yuv420p为例,他是分三个平面存储三个分量的,而u和v的计算是一致的,也就是说计算出了u即可得到v;对于y来说,它有w行h列,因此需要计算w行的对齐后字节数再乘以h;对于u来说,它有w/2行h/2列(这是因为每4个y共享一组uv),因此需要计算w/2行的对齐后字节数再乘以h/2;v的计算与u的一模一样,最后将这个三个数相加即可。

ffmpeg中的align

有了上面的基础后,现在就好理解ffmpeg中align参数了。所以一般ffmpeg中的align设为1就表示不对齐的意思,设的为多少就是多少。为0一般就表示默认(ffmpeg提供的方法)。

而之所以ffmpeg要设置这个align对齐数,主要就是为了为了确保解码和播放的正确性和输出的数据符合特定容器的要求。而且对齐还可能影响到性能,特别是在硬件加速的场景下,未对齐的数据访问可能导致额外的延迟或降低效率。

ffmpeg中的linesize

linesize其实就是我们上文提及到的行字节数,在我们解码出数据后,经常会遇到这个linesize,既然我们知道了align的概念,就该明白这个linesize就是为了让你取出真实的数据的。

解码后的数据中可能是经过对齐的,既然有对齐,那就是数据里加多了一些为了对齐而多余的字节,如果我们想最后显示视频数据,那么这些多余的数据势必要进行剔除掉,那么怎么剔除呢,linesize就是来帮你干这事的,有了它,你就可以一行一行比较,然后把每行最后为了对齐而补的字节删除,还原出视频的真实数据

内容参考

本文内容是基于如下博客做的归纳整理,如有侵权,请联系作者

FFmpeg简单分析系列----内存对齐简要说明_ffmpeg align-CSDN博客

相关推荐
潜创微科技2 小时前
沁恒CH9339:USB3.0超高速对拷,两台电脑一根线共享一切
音视频
Cxiaomu2 小时前
从 TRTC Demo 到独立音视频服务:React + TRTC Web SDK 服务化实践
前端·react.js·音视频
EasyGBS6 小时前
政务视频资源汇聚:国标GB28181视频平台EasyGBS在“一网统管”中的定位和落地路径
网络·音视频·政务
蝉蜕日记20 小时前
视频压缩 v1.1.31:高效压缩,无损画质,释放存储空间
音视频·生活·视频编解码·视频·软件需求
lumengabc21 小时前
视频制作流程MP4旁白语音生成裁剪视频压缩python处理ppt转视频M4a格式
音视频
音视频牛哥1 天前
AI浪潮下,实时音视频SDK正在经历怎样的价值重构?
人工智能·音视频·实时音视频·rtmp推流·低延迟rtsp播放器·低延迟rtmp播放器·rtsp转rtmp推流
乐橙开放平台1 天前
明厨亮灶笔记:乐橙轻应用 H5 + 小程序插件,一套 BFF 出两张播放凭证
人工智能·笔记·物联网·小程序·音视频·notepad++
ofoxcoding1 天前
Seedance 2.0 与 Wan 2026 视频生成 API 成本效率深度对比分析
网络·人工智能·ai·音视频
xingyuzhisuan1 天前
星宇智算 AI 视频生成工具九维度全测评与行业对标分析
人工智能·音视频
豌豆学姐1 天前
likeadmin-api 视频生成工作流实战:Seedance 2.0 接口从素材到任务查询
aigc·音视频·api·视频生成·likeadmin-api