音视频学习之基础概念整理(rgb/yuv,pcm,采样频率,帧率,码率,i帧p帧b帧,dts/pts)
1:常用的视频压缩算法:
MPEG2 ===>MPEG阵营
H264 ===>MPEG阵营
H265 ===>MPEG阵营
AVS ===>中国阵营
VP8 ===>Google阵营
VP9 ===>Google阵营
2:图像表示方法 :
2.1:RGB 红绿蓝
每个像素8bit 色彩:256256256=16,777,216
一个1280*720的照片,用RGB存储,大小:1280×720 * 3 = 2.637 MB
===》照片的大小x时间x帧率
2.2:数字图像 YUV格式 Y(明亮度) U,V(色度)
2.2.1:yuv两种存储方式
两种存储方式:先存储Y (planar)和 Y, U, V交替存储
libyuv :google开源的各种实现yuv和rgb,相互转换,缩放,旋转的库
2.2.2:yuv多种格式及大小计算
yuv存在多种格式:yuv420p, yuv420sp
===》 排列顺序不同。
===》解析不对会出现花屏,绿屏的现象
YUV420P格式表示1280*720的视频帧:
四个Y帧共用一个U,V,多了0.5的一个帧:1280 * 720 * 1 + 1280 * 720 * 0.5 = 1.318MB
3: 码率 帧率 分辨率:
3.1:视频码率,视频帧率,视频分辨率
视频码率:kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高。
视频帧率:fps,通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧。帧率越高,给人的视觉就越流畅。
视频分辨率:分辨率就是我们常说的640x480分辨率、1920x1080分辨率,分辨率影响视频图像的大小。
3.2:I P B帧:
===》I 帧(Intra coded frames):帧数内编码 I帧不需要参考其他画面而生成,解码时仅靠自己就重构完整图像;
===》P 帧(Predicted frames):根据本帧与相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据,同时利用了空间和时间上的相关性。
===》B 帧(Bi-directional predicted frames):B 帧图像采用双向时间预测,可以大大提高压缩倍数。
4:音频相关基础:
4.1:PCM
PCM(Pulse Code Modulation),脉冲编码调制:人耳听到的是模拟信号,PCM是把声音从模拟信号转化为数字信号的技术。
4.2:采样频率/采样精度
采样中完全恢复原始信号波形,采样频率必须至少是信号中最高频率的两倍,
人耳能听到的频率范围是[20H~20kHz],所以采样频率一般为44.1Khz
采样频率:每秒钟采样的点的个数。常用的采样频率有:22000(22kHz): 无线广播。44100(44.1kHz): CD音质。48000(48kHz): 数字电视,DVD。96000(96kHz): 蓝光,高清DVD。192000(192kHz): 蓝光,高清DVD。
采样量化/精度:采样值的精度取决于它用多少位来表示:例如:8位量化可以表示256个不同值,而CD质量的16位量化可以表示65 536个值,范围为[-32768, 32767]。
4.3:通道数,比特率,码率
通道数:单声道,双声道,四声道,5.1声道。
比特率:每秒传输的bit数,单位为:bps(Bit Per Second)没有压缩的音频数据的比特率 = 采样频率 * 采样精度 * 通道数。
码率: 压缩后的音频数据的比特率。常见的码率:96kbps: FM质量128-160kbps:一般质量音频。192kbps: CD质量。256-320Kbps:高质量音频码率越大,压缩效率越低,音质越好,压缩后数据越大。码率 = 音频文件大小/时长。
4.4:帧,帧长
帧:每次编码的采样单元数,比如MP3通常是1152个采样点作为一个编码单元,AAC通常是1024个采样点作为一个编码单元
帧长:每帧播放持续的时间:每帧持续时间(秒) = 每帧采样点数 / 采样频率(HZ)比如:MP3 48k, 1152个采样点,每帧则为 24毫秒 1152/48000= 0.024 秒 = 24毫秒;
4.5:交错模式和非交错模式
交错模式:数字音频信号存储的方式。 ===》如:首先记录帧1的左声道样本和右声道样本,再开始帧2的记录...
非交错模式:首先记录的是一个周期内所有帧的左声道样本,再记录所有右声道样本
4.6:音频压缩原理
数字音频压缩编码:去除声音信号中冗余成分(不能被人耳感知到的信号)的方法,进行尽可能大的压缩,降低数据量20Hz~20KHz范围外的频率,人耳听觉的掩蔽效应中的弱音信号:频谱掩蔽效应和时域掩蔽效应
音频方向编码选型:OPUS,MP3,AAC,AC3和EAC3(杜比公司的方案)
5:音视频的封装:
封装格式(也叫容器):就是将已经编码压缩好的视频流、音频流及字幕按照一定的方案放到一个文件中,便于播放软件播放一般来说,视频文件的后缀名就是它的封装格式。H264/AVC+AAC封装为FLV或MP4是最为流行的模式
常见的视频封装格式:AVI、MKV、MPE、MPG、MPEGMP4、WMV、MOV、3GPM2V、M1V、M4V、OGMRM、RMS、RMM、RMVB、IFOSWF、FLV、F4V、ASF、PMF、XMB、DIVX、PARTDAT、VOB、M2TS、TS、PS
6:DTS,PTS,同步方法:
DTS(Decoding Time Stamp):即解码时间戳,告诉播放器该在什么时候解码这一帧的数据
PTS(Presentation Time Stamp):即显示时间戳,告诉播放器该在什么时候显示这一帧的数据。
同步方法:Audio Master:同步视频到音频Video Master:同步音频到视频External Clock Master:同步音频和视频到外部时钟。
参考免费课程链接:https://ke.qq.com/course/417774?flowToken=1040954
音视频学习之基础概念整理(rgb/yuv,pcm,采样频率,帧率,码率,i帧p帧b帧,dts/pts)相关推荐
- 音视频学习之时间戳相关整理(时间基tbr,tbn,tbc)
1: I帧/P帧/B帧 I帧:I帧(Intra-coded picture, 帧内编码帧,常称为关键帧)包含⼀幅完整的图像信息,属于帧内编码图像,不含运动⽮量,在解码时不需要参考其他帧图像.因此在I帧 ...
- 音视频测试的基础概念
1 SDK SDK,全称Software Development Kit,即软件开发工具包,研发工程师为辅助开发某类软件的相关范例和工具的集合,使用SDK可提高开发效率,更方便简单的接入某个功能,避 ...
- 音视频学习之ffmpeg时间戳相关整理(时间基tbr,tbn,tbc)
1: I帧/P帧/B帧 I帧:I帧(Intra-coded picture, 帧内编码帧,常称为关键帧)包含⼀幅完整的图像信息,属于帧内编码图像,不含运动⽮量,在解码时不需要参考其他帧图像.因此在I帧 ...
- Android音视频开发---0基础入门准备篇
文章目录 0,题记 1,学习路线 2,学习目标 任务列表 基础知识 FFmpeg 3,开始音视频开发必备的技能 1,C语言. 2,Linux. 3,基本的Linux编译执行命令,以及vim操作. 4, ...
- Android音视频学习系列(六) — 掌握视频基础知识并使用OpenGL ES 2.0渲染YUV数据
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- Android音视频学习系列(五) — 掌握音频基础知识并使用AudioTrack、OpenSL ES渲染PCM数据
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- 音视频学习笔记1--音视频基础知识(1)
音视频基础知识 1 音视频开发是什么? 2 音视频数据处理流程 2.1 音视频数据采集 2.2 封装与解封装 2.3 音视频输出 2.4 音视频同步 3 视频中的基础概念 3.1 视频码率 3.2 视 ...
- Android音视频 - 学习路线概览
PS 我们上一个系列 - OpenGL ES 暂告一段落,如果你对相机滤镜感兴趣,可以参看之前的文章. 从本篇开始呢,开始记录Android音视频的相关知识. 学习路线概览 Android音视频的基础 ...
- android 键编译,Android 音视频学习系列 (四) 一键编译 32/64 位 FFmpeg 4.2.2
前言 2020/5/20 增加了硬件解码编译脚本 编译环境 Centos + NDK20b + FFmpeg4.2.2 + Android-21/16 2020/4/26 更新了编译 64 位脚本 编 ...
- Android音视频学习系列(七) — 从0~1开发一款Android端播放器(支持多协议网络拉流本地文件)
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
最新文章
- C言语教程第五章:函数(1)
- Spring MVC全局异常后返回JSON异常数据
- jdbc mysql 字符集_JDBC对Mysql utf8mb4字符集的处理
- VTK:Utilities之ArrayWriter
- ChaiNext:大盘调整,主流币种还未稳住阻力位
- php和python-PHP和Python如何选择?或许可以考虑这三个问题
- hdu3394--Railway(点的双连通分量)
- Laravel 跨域问题解决
- DocsBuilderGUI 工具使用介绍
- java对接快递单号查询自动识别api接口,调用代码示例
- 2021中国机器人操作系统(ROS)暑期学校-转载
- thinkphp使用ajax、jquery、Mysql实现了简单的客户端通信功能
- UGUI_03_补充之_Image的属性(image type这个属性simple、Sliced、tiled、filled样式详解)
- 冰山理论(理解笔记)
- 观察 :人工智能与伦理道德
- 基于FPGA的电子计算器设计(下)
- NitroSense无法打开(ACER)
- 官方消息:即将开始退钱
- 测试岗/测试开发岗面试真题及参考答案
- IDEA启动Nacos配置SOCKS代理
热门文章
- python中的pandas库如何读数据_Python之Pandas库学习(二):数据读写
- c语言打印long double,C/C++printf输出int、long、longlong、double、longdouble、string等
- android 实现男女按钮选择
- Chrome和edge浏览器书签本地路径以及批量修改书签
- 3dmax 模型导出单位设置问题
- 不确定性管理,更需要领导力
- 【总结】1147- 一文吃透 Webpack 核心原理
- 中兴新支点操作系统上两个方便的小工具
- java suprious wakeup_Java生产消费问题与虚假唤醒(spurious wakeup)
- 树莓派能做什么?如何使用树莓派