音视频工程师(初步)(一)音视频的基本概念

1. 前言

本文是音视频工程师系列的第一篇文章。

学习音视频的过程中发现,网络上高质量的音视频技术博客不是很多。具有代表性的是

  • 雷神的 雷霄骅的CSDN博客

因为笔者是一名普通的软件开发人员,一向不喜欢高高在上或者晦涩难懂的理论,我们向来喜欢通俗易懂的东西。我认为知识的本身也应该是通俗易懂的东西。知识用晦涩难懂的东西描述出来,是对人类进步的阻碍,是知识垄断。

音视频的很多标准都是国外制定的,而且很多音视频开发基础库也是国外的,国内外技术差距是存在的。

笔者希望此系列教程能够以工程实现为出发点和落脚点,简化理论知识,化繁为简地解析音视频技术,为音视频技术的发展,为各位读者成长为音视频工程师贡献一点微不足道的力量。

2. 音视频数据内容信息分类

音视频数据内容从本质上讲,分为两种:

  1. 音视频数据:存储音视频本身想要传达的信息,即声音和图像。
  2. 音视频参数:存储音视频的控制参数。例如采样率,帧率等信息,是处理音视频数据时必不可少的信息。

3. 格式

封装格式(容器)

音视频内容包含了音视频数据和音视频参数两种信息,这两种信息打包放在一个文件中采用的格式,就叫做封装格式,也叫容器。个人觉得叫封装格式更容易理解。

目前,人们已经发明了很多种视频文件格式。当然发明这些格式并不是一拍大腿想起来的,而是在特定的使用场景下,对应的视频格式,可以更高效地存储和处理音视频数据。

由于封装格式在开发中基本上都是由库来处理,不需要我们自己封装和解析,所以可以先不做细致了解。在初学阶段的首要任务是把握音视频的整体工作框架,某些技术细节可以先放一放,后面再研究。这也是笔者建议的学习方法:学习精力分配要遵循二八定律,大部分领域中,只有大约20%的知识最重要,在这20%上面我们要花80%的时间,剩下80%不是那么重要的,只需要花20%的时间即可。

编码格式(压缩)

不经过压缩的音视频数据是很大的。例如:

1920x1080的RGB24图像,1秒25帧,不压缩,1小时的视频总大小约为 1920 * 1080 * 3 * 25 * 60 * 60 = 521G。
这种情况下,500G的电脑硬盘,最多只能存1个小时的电影;刷小视频会变得很卡;百度网盘128KB/s的速度下载一部电影需要一两个月…

所以,音视频 必须被压缩后存储或者传输

采用某种编码格式(即压缩格式)对音视频数据进行压缩,压缩后的音视频数据和音视频参数一起按照某种封装格式,被打包放入到音视频文件中,这样就生成了视频文件。

4. 音视频数据基本单位

4.1 采样/抽样

首先要明白采样/抽样的概念。
视频采样是指:以某一速度对物体连续拍照,不断记录物体在某一瞬间的画面。
音频采样是指:以某一速度连续记录声音在某一瞬间的震动幅度。
采样是对原事物的一种反映手段。对于采样后的音视频数据,计算机可以进行播放和加工处理。

4.2 视频帧

每一个时刻拍的那张照片,就叫视频帧,它是视频的基本数据单位。

4.3 PCM音频采样点

每一个时刻获取到的声音振幅,就叫PCM采样点,它是音频的基本数据单位。

了解这些基本够用了,不需要深入地去研究过多的细节。最主要的是要了解,通过采样可以将现实世界的事物反映到计算机中,变成可处理的数据。

5. 音视频参数

既然音视频数据是经过采样得到的,那么我们想要播放音视频数据,就必须用到采样过程中使用到的一些参数,这样音视频数据才能正确的反应原事物的状态。

5.1 音频参数

5.1.1 基本参数

音频有三个基本参数:

  • 采样位数:表示每个采样使用多少个比特位来保存,一般为4、8、16、32位(bit)。采样位数为8 bit时,每个采样点可以表示256个不同的采样值,而采样位数为16 bit时,每个采样点可以表示65536个不同的采样值。采样位数的大小影响声音的质量,采样位数越多,量化后的波形越接近原始声音,声音的质量越高,但是需要的存储空间也越多;位数越少,声音的质量越低,需要的存储空间越少。通常,CD音质的采样位数是16 bit,移动通信是8 bit。

  • 采样频率(Sampling Rate):表示一秒钟采样多少次,常用的采样频率有44100=44.1k,以及44800=44.8k。采样频率必须至少是人可以听到的频率的2倍,这是由奈奎斯特采样定理得到的,采样频率再低的话,原声音中的频率就会丢失。奈奎斯特采样定理是信号与系统这门课中的,不懂的话没关系,不需要做过多了解。

  • 声道数:声道数是指有多少个录音麦克风放在音源的周围录音。声道间是独立、同时进行采样的。大部分音乐是双声道的,播放时用耳机听,会有一定的立体感。

上面三个是最基本的三个参数,只要知道了这三个参数,就可以将声音记录下来,而且可以播放出来。

这三个参数怎么记忆呢?按照从小到大、从少到多的逻辑记忆即可:

  • 先从单个采样点开始,存储一个点所用位数叫采样位数;
  • 一秒钟采样得到的采样点的个数叫采样频率;
  • 同时进行的采样任务的个数叫声道数。

5.1.2 网络参数

为什么要说网络参数呢,由于互联网的发展,音视频成为一种服务,逐渐出现在互联网上。在线看电影,刷短视频,上网课等等都已经成为了一种新的生活方式。把音视频搬到网络上,必然会有一些和网络相关的技术参数,来实现对音视频服务的控制。有如下几种:

  • 码率:单位是 比特每秒,英文是bps(bit per second)。此参数表示播放某音频需要占用多少网络带宽。因为码率是网络环境下的参数,所以要结合网络来理解。网络带宽就是网络速度,单位是bps。咱们家里办的宽带,一般都是百兆千兆的带宽,听着似乎很快,但是由于它的单位是bps,实际上转换成字节(Byte),要除以8,百兆不过12.5MB/s,千兆不过125MB/s每秒。因为文件是以字节为单位衡量的,所以这个速度实际上并不是像听起来那么快。所以,码率是衡量音频在网络上传输时,对网络带宽占用量的一个参数。当网络带宽比较小时,可以选择降低音视频码率,这可以通过降低音频质量来实现;当网络带宽比较大时,可以选择提高音频码率,传输更高质量的音视频。

5.2 视频参数

5.2.1 基本参数

视频有三个基本参数:

  • 像素格式:像素用来保存某一点的颜色,这个颜色可以采用不同的格式存储。常见的有RGB、YUV、HSV等。学习这些格式需要一定的数学运算,我们后面将单独写一篇文章讲解,并计划写一个工具来实现他们之间的转换。
  • 画面分辨率:分辨率是指一帧画面的长宽各有多少像素,一般的写法是宽 * 高,如1920 * 1080。分辨率越高,画面越细腻。
  • 帧率:帧率是指1秒钟播放的帧的个数,帧率越高,画面越流畅,帧率越低,画面越卡顿。

对视频基本参数,也可以采用从小到大的逻辑记忆:

  • 先从最基本的像素开始,存储某颜色的格式叫像素格式。
  • n个像素构成一帧画面,帧的长宽叫做分辨率。
  • n个帧连续播放才能形成视频,帧率是指1秒中播放的帧的个数。

5.2.2 网络参数

视频的网络参数和音频类似,主要有:

  • 码率:解释同音频的码率。需要提及的是,视频的码率等级比音频多一些,因为视频的数据相对于音频数据,大了不止一点点,所以视频码率等级分的也更多。

结语

本文主要是梳理了一下音视频中的必须了解的基本知识。笔者本系列文章的定位是既要精简又要通俗易懂。现代社会每个人都很忙,尽量降低学习成本,才是一个优秀的教程应该做的事情,而不是把简单的东西用一些专业术语和公式把它复杂化。后面的文章会陆续在公众号及网站更新,希望大家多多关注。


附录及参考链接

  • 雷神博客链接:视音频数据处理入门:PCM音频采样数据处理
  • PCM百度百科:https://baike.baidu.com/item/PCM/1568054
  • 音频基础知识—PCM浅析:cloud.tencent.com/developer/article/1802685

本文原创发布于微信公众号Qt未来工程师。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】GitHub客户端操作3--pull Request(拉请求)

一、参考说明 参考文章一:Github上提交代码(pullrequest) 网址: https://jingyan.baidu.com/article/358570f64dcdc2ce4724fc32.html 参考文章二:GitHub——Pull Request 网址:http://blog.csdn.net/u012325167/article/detai…

webstorm 内存溢出怎么弄_webstrom 内存溢出,软件崩溃卡死解决的方法

今天用gulp搭建了一个工程,准备做一个体育h5的项目,其中需要用到sass代码压缩,加版本号等功能.gulpfile.js和package.json都是已经写好的.我用CMD命令窗口cnpm安装node_modules依赖文件.当我安装完毕之后用webstrom打开时,第一件事先把node_modules排除忽略了.如下:然后我去编辑…

躺平也要看,2022年计算机相关考试汇总

1. 全国计算机专业资格考试(软考) 1.1 官网 全国官网:https://www.ruankao.org.cn/,从全国官网首页的底部可以直达各个省区的考试机构报名网站。 1.2 考试安排 软考一年两次。 场次报名时间考试时间上半年 预计报名时间在2月…

【转】GitHub上README.md教程

本文是转载文章,文章的来源:csdn博客 博主:果冻虾仁 文章: GitHub上README写法暨GFM语法解读 博文地址:https://blog.csdn.net/guodongxiaren/article/details/23690801 转载请保留原作者guodongxiaren的原文地址&…

python supervisor flask_supervisor配合uwsgi部署flask应用

这已经是第N次来部署flask应用了, 但是每次都花了不少时间在配置上面, 这里一次性记录下, 备个忘~写在前面其实使用uwsgi来部署flask应用在官网上已经有较为详细的 文档 了, 推荐先读一下.先解决一些问题:为何使用 uwsgi 来部署应用? 方便管理; 较为常见的部署方式; 可配置性较…

设计模式(五)行为型模式

前言 在上一篇结构型模式中,我们以功能为基本单位,研究了一些设计模式,用于实现功能转换、功能组合、功能封装等目的。 我们知道,面向对象编程有两个核心元素:对象、对象间通信协作。从面向对象的角度看,…

51单片机auxr寄存器_51—52系列单片机特殊功能寄存器一览表

P2.1P2.0RSTP3.0/RXDP3.1/TXDXTAL2XTAL1P3.2/INT0P3.3/INT1P3.4/T0P3.5/T1GNDVCCP1.7P1.6P1.5P1.4P1.3P1.2P1.1/AIN1P1.0/AIN0P3.7注:类似的还有Philips公司的87LPC64,20引脚8XC748/750/(751),24引脚8X749(752),28引脚8XC754&…

【转】WPF单位真的与分辨率无关吗?

转载自http://www.cnblogs.com/helloj2ee/archive/2009/04/21/1440709.htm WPF从发布之日起,一直将“分辨率无关(resolution independence)”作为其亮点,声称使用WPF制作的用户界面在轻巧的Ultra-Mobile PC的屏幕上和在50英寸的电视机上都能很好地显示。…

设计模式(六)J2EE 模式

前言 本章设计模式只挑了一些必要的加以讲解,因为有的设计模式过于简单或者根本用不到,可以不做了解。 MVC 模式 使用说明 MVC模式可以说是最有名的设计模式之一。它提出将软件的数据模型Model、视图Visual、控制器Controller三者分开封装&#xff0c…

ubuntu设置始终亮屏_ubuntu设置关闭屏幕和锁定

见链接:http://askubuntu.com/questions/177348/how-do-i-disable-the-screensaver-lockIf you want to wrap your app in a script that takes care of this for you when you launch it (or GUI simply isnt an option), the best command-line solution as of Ub…

【转】世上最简单的vue教程

一、需要了解的基本知识 node.js Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境…

工程师学乐理(一)尝试理解音乐

前言 很早就接触了乐理,但是一直没有学懂,越学问题越多。个人感觉,其中很大的原因是有关教材写得看不懂,用未知的东西描述未知的东西,不知所云。前几年还买了一把吉他,买了课程,断断续续学了几…

【转】Vue.js入门教程(一)从静态页面到前后端分离开发

第一章:基础知识 我能看懂吗? 只要你现在能用htmlcssjs制作一个静态页面,相信我,你100%可以读懂这篇文章。 本文尤其适合那些想要了解前后端分离开发技术,或者刚刚脱离传统MVC开发模式的前端人员。 回想一下&#xf…

vuebaidumap 删除覆盖物_VUE BAIDU MAP覆盖物 - 自定义覆盖物手记

前言覆盖物的最高级就是自定义覆盖物,而往往业务中就必须用自定义覆盖物,因为都用上了地图这么吊的组件了,覆盖物也必须华丽、高度定制。官网Github自定义覆盖物手册效果效果核心其实是三角箭头的阴影,其他都很好说。说起三角的阴…

工程师学乐理(二)音阶及倾向性

前言 阅读本文前,请先阅读《写给理工科人看的乐理》。 本文主要讲音阶。在其他地方能查到的细节,我们这里就不会多说了。本文重点在于梳理音阶背后的逻辑,尝试把技术点串起来讲。 没有逻辑的东西是咱们工程师比较讨厌的,任何大自…

【转】VS工具:实时可视化树

VisuaStudio号称全宇宙最强大的IDE。在VS2015版本中,微软又给广大开发者带来了一个强大的工具:实时可视化树(Live Visual Tree,以下简称可视树)。其实树可视化工具并不是新鲜的东西,在WPF的时候就有了,只是这次微软集成…

cad2014点击工具栏闪退_cad2012闪退,点工具栏闪退但用快捷键画图不闪退

2017-08-10 回答cad快捷键l直线;pl多段线;u回车ctrlz后退;d修改,调整;rec矩形;c圆;tr修剪;o偏移;xl放射线;x分解;co复制;m移动&#x…

工程师学乐理(三)音程调式与和弦

前言 阅读本文前,请先阅读《写给理工科人看的乐理》。 上一篇我们讲了音阶及其倾向性,主要是为了领悟其中的逻辑与原理,限于篇幅,只是点到为止,没有展开讲解。本篇我们将更加深入地去研究音阶间的关系,即…

【转】WPF 入门《常用控件》

1.GroupBox 注意: GroupBox仍然需要布局容器来放置元素。如: StackPanel面板 1 2 3 4 5 6 7 <GroupBox Header"select number?"> <StackPanel> <RadioButton>one</RadioButton> <RadioButton>two</…

python输入直角三角形a、b、输出斜边c_编写一个程序,输入直角三角形两条直角边a和b的长度,利用勾股定理计算斜边c的长度。要求结果保留2位...

你好&#xff0c;我们采用C的计算机语言&#xff0c;让用户输入两条边长&#xff0c;计算出第三边长度&#xff0c;并控制两位小数点输出。以下是程序&#xff1b;#include #include #include using namespace std;int main(){double a, b, c;cout << "请输入边长a;…