视频基础知识

news2024/11/24 19:32:43

1.视频比特率

        视频的比特率是指传输过程中单位时间传输的数据量。可以理解为视频的编码采样率。单位是kbps,即每秒千比特。视频比特率是决定视频清晰度的一个重要指标。比特率越高,视频越清晰,但数据量也会越大。比如一部100分钟的电影,如果比特率是700kbps,那么它的文件大小就是410MB。(100分钟=6000秒,然后将6000秒乘以700kb/s的比特率,得到的数据量为4200000kb,换算后约为410MB)当然,视频分辨率越高,要求的比特率就越高。因此,如果想提高视频的清晰度,需要在相同的分辨率下提高比特率。

        采样比特率有两种方式,一种是固定比特率cbr,即每秒采样的数据量是固定的;还有可变比特率vrb,根据每帧视频的复杂程度改变采样。如果视频中有很多快速移动的图片,会提高比特率,以获得更多的这部分图片的采样数据,这样图片会变得更清晰。当图片信息较少时,比特率会适当降低。所以这个编码效率比较高,同时兼顾了视频清晰度和文件大小。是目前主流的比特率采样方式。

例:一段1080P的视频长度为100分钟,大小为1GB,那么该视频的比特率是多少?

100min = 100*60s = 6000s;
1G = 1024M = 1024*1024KB = 1024*1024*1024Bit = 1024*1024*1024*8bit = 8589934592bit;

比特率 = 8589934592/6000s = 1431655b/s = 1.4Mbit/s;

        这个视频的码率大概为1.4Mbit/s, 一般主流视频平台的最高码率在1Mbit左右,比如直播网站斗鱼的高清选项实际播放的视频码率是900Kbit/s(0.9Mbit)。对于时间长度相同的视频,码率越大,视频的大小越大,视频的画质就越清晰(不考虑各种压缩算法的优劣),这是最直观的感觉。码率对于视频是非常重要的。

2.分辨率

        视频分辨率是横坐标上像素数乘以纵坐标上的像素数,可以简单理解为视频的大小。那么为什么分辨率可以决定视频的文件大小和清晰度呢?视频尺寸越大(这里指的是拍摄和录制的视频分辨率),它在画面中需要填充的像素就越多,所以数据量越大,输出的文件就越大,清晰度就越高。

        视频分辨率是指视频成像产品所成图像的大小或尺寸,它的表达式为:“水平像素数垂直像素数”。常见的图像分辨率有QCIF(176×144),CIF(352×288),D1(704×576),720P(1280×720), 1080P(19201080)。摄像机成像的最大分辨率是由CCD或CMOS感光器件决定的。现在有些摄像机支持修改分辨率,是通过摄像机自带软件裁剪原始图像生成的。

3.帧率

        帧率也是影响视频清晰度和大小的因素之一。它是视频中包含的帧数,帧率越高,视频越清晰(帧率达到一定值时影响越小)。当然相应的数据量也会更大。帧率、比特率和分辨率是相互关联的。在帧率和分辨率相同的情况下,比特率越大,视频越清晰,文件越大。在分辨率和比特率不变的情况下,帧率越高,视频会越清晰;但是,在帧率和比特率相同的情况下,分辨率越高,视频会越不清晰。这是因为当视频尺寸变大时,如果对应的编码样本保持不变,只相当于放大了视频。

4.DTSPTS

        DTS(Decoding Time Stamp) : 即解码时间戳,是解码器进行解码时相对于SCR(系统参考时间)的时间戳。它主要标识读入内存的bit流在什么时候开始送入解码器中进行解码。

        PTS(Presentation Time Stamp) : 即显示时间戳,是显示帧时相对于SCR的时间戳。它主要是度量解码后的视频什么时候被显示出来。

        DTS主要用于视频的解码,在解码阶段使用。PTS主要用于视频的同步和输出,在 display 的时候使用。在没有B帧的情况下,DTS和PTS的输出顺序是一样的。

5.音视频同步

        在媒体流中,除了视频以外,通常还包括音频。音频的播放也有 DTS、PTS 的概念,但是音频没有类似视频中 B 帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的。

        音频视频混合在一起播放,就呈现了通常看到的广义的视频。在音视频一起播放的时候,需要面临怎么去同步它们,以免出现画不对声的情况。

        要实现音视频同步,通常需要选择一个参考时钟,参考时钟上的时间是线性递增的,编码音视频流时依据参考时钟上的时间给每帧数据打上时间戳。在播放时,读取数据帧上的时间戳,同时参考当前参考时钟上的时间来安排播放。时间戳就是PTS。可以选择同步视频到音频、同步音频到视频、同步音频和视频到外部时钟。

6.视频格式和编码格式

        视频格式是一个容器,常见的格式包括百AVI、MPG、WMV、MKV、TS、TP、RMVB、MOV、MP4、3GP、等等。是视频文件的存在形式,也可以来说是封装压缩视频和音频文件的容器。

        编码格式是向这个容器放度入东西的问方法、(视频文件压缩过程中的运算方法)例如可以横放、竖放、侧放,等等。常答见的编码包括H.261、H.263、H.264、MPEG4、MPEG2、mpeg1、xvid、divx、VC-1、wmv1(9、realvideo8)10等等。

H264编码原理以及IBP

H264编码原理

        H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。对于一段变化不大图像画面,可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完整帧的1/10或更小!B帧之后的C帧如果变化不大,可以继续以参考B的方式编码C帧,这样循环下去。这段图像称为一个序列(序列就是有相同特点的一段数据),当某个图像与之前的图像变化很大,无法参考前面的帧来生成,就结束上一个序列,开始下一段序列,也就是对这个图像生成一个完整帧A1,随后的图像就参考A1生成,只写入与A1的差别内容。

        在H264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。H264采用的核心算法是帧内压缩和帧间压缩,帧内压缩是生成I帧的算法,帧间压缩是生成B帧和P帧的算法。

对序列的说明

        在H264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流,以I帧开始,到下一个I帧结束。一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这可获得重新同步机会。IDR图像之后的图像永远不会使用IDR之前图像的数据来解码。

        一个序列就是一段内容差异不太大的图像编码后生成的一串数据流。当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和3、4个P帧。

对三种帧的介绍

        帧内编码帧I帧 ,I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成。I 帧通常是每个GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。

  • 它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输
  • 解码时仅用I帧的数据就可重构完整图像
  • I帧描述了图像背景和运动主体的详情,不需要参考其他画面而生成
  • I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量)
  • I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧
  • I帧不需要考虑运动矢量,所占数据的信息量比较大

        前向预测编码帧P帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧。

  • P帧是I帧后面相隔1~2帧的编码帧
  • P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差)
  • 解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像
  • P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧
  • P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧
  • 由于P帧是参考帧,它可能造成解码错误的扩散,差值传送,P帧的压缩比较高

        双向预测内插编码帧B帧,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;

  • B帧是由前面的I或P帧和后面的P帧来进行预测的
  • B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量
  • B帧是双向预测编码帧,压缩比最高,只反映丙参考帧间运动主体的变化情况,预测比较准确
  • B帧不是参考帧,不会造成解码错误的扩散

        I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧。一般来说,I帧的压缩率是7(跟JPG差不多),P帧是20,B帧可以达到50。可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。

H264的压缩方法

  1. 分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多。
  2. 定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;
  3. 预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;
  4. 数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

7.视频质量评价指标

客观评价Objective

        客观评价是以标准的数学公式计算原视频与解码出的视频之间的差异,当今被广泛使用的评判标准是PSNR,其全称为(Peak Signal to Noise Ratio)原理是利用原视频与有损压缩后产生的损失之间的比例来判断的。公式为:

        其中,MAX为视频使用的信号的最大值,如视频是8比特的话,那MAX就为255。单位是分贝(db),MSE为均方误差(Mean Squared Error)即原始图像与解码后的重建图像之间的误差,误差越小,则表示还原后的质量越好,那PSNR就越大。PSNR的计算仅仅适用于有损压缩,对于无损压缩,因为MSE值将为0,则除式的值将为无穷大,所以对于无损压缩,PSNR是不适用的。

主观评价Subjective

        MOS测试,Mean Opinion Score Test,组织一定数量的人,尽可能地组织不同类型的人,尽量给实验制造随机性,多样性,使实验更具有一般性,可信性。

        进行客观性评价的时候,测试对象坐于显示器前,每位测试对象可以坐得有远近,方向角度有不同,尽量模仿实际生活中的人群,操作者在前方显示器上播放影像,当然,播放也是有规矩的。

        按时间顺序,一共分为两个阶段,一个是左边的前期测试阶段(没有任何标注),另一个是右边的投票阶段(标注有vote),其中,T1,T3时间段均是播放影像的时间,T2,T4均是休息的时候(显示器上显示灰色)。

        在测试中,一共有两种影像,一个是原始影像,没有失真的,一个是测试影像,带有失真的,上图中第一个T1和第二个T1播放同一种影像,第一个T3和第二个T3播放同一种影像,到底是原始影像还是测试影像,随机!测试者无法提前得知。等过完前面的前期测试阶段后,在Vote阶段,被测试者们就需要对影像进行打分了(即Vote),打分的图一般采用DSCQS方式评分图。

        上面就是DSCQS打分图,27,28,29,30,31是视频编号,这里可以对五组(原图+测试)视频进行打分,针对每一对,当进行到Vote阶段的时候,Vote阶段第一个T1过完,在A栏打分,Vote阶段T3过完,给B栏打分。

        打分栏分为五个级别,即Excellent非常好,Good好,Fair一般般,Poor差,Bad很差五个级别,打分的时候,在每个级别对应的区域划线或者打勾即可。实验完成后后由测试者收集进行统计作为主观评判结果。

        当然,主观性测试也是有它的缺点的,一来是要组织这么一群人,人工费少不了,二来,组织人来进行测试不能做到实时进行,只是用已经编码好的影像进行播放来进行测试。

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

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

相关文章

5.4 Bootstrap 下拉菜单(Dropdown)插件

文章目录 Bootstrap 下拉菜单(Dropdown)插件用法在导航栏内在标签页内 选项方法 Bootstrap 下拉菜单(Dropdown)插件 Bootstrap 下拉菜单 这一章讲解了下拉菜单,但是没有涉及到交互部分,本章将具体讲解下拉菜…

(链表) 剑指 Offer 58 - I. 翻转单词顺序 ——【Leetcode每日一题】

❓剑指 Offer 06. 从尾到头打印链表 难度&#xff1a;简单 输入一个链表的头节点&#xff0c;从尾到头反过来返回每个节点的值&#xff08;用数组返回&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,3,2] 输出&#xff1a;[2,3,1] 限制&#xff1a; 0 < 链…

自己实现数据结构,有更好的可操作性

https://leetcode.cn/problems/asteroid-collision/ 就是说&#xff0c;非得用人家写的栈不可么 stl 的 stack&#xff0c;没办法随机访问&#xff0c;用 vector 或者再不济数组&#xff0c;就好了&#xff0c;非要用 stl 的&#xff0c;就导致还得有另一个 vector 维护向左走…

多目标灰狼算法(MOGWO)的Matlab代码详细注释及难点解释(佳点集改进初始种群的MOGWO)

目录 一、外部种群Archive机制 二、领导者选择机制 三、多目标灰狼算法运行步骤 四、MOGWO的Matlab部分代码详细注释 五、MOGWO算法难点解释 5.1 网格与膨胀因子 5.2 轮盘赌方法选择每个超立方体概率 为了将灰狼算法应用于多目标优化问题,在灰狼算法中引入外部种群Archi…

Spring MVC -- 返回数据(静态页面+非静态页面+JSON对象+请求转发与请求重定向)

目录 1. 返回静态页面 2. 返回非静态页面 2.1 ResponseBody 返回页面内容 2.2 RestController ResponseBody Controller 2.3 示例:实现简单计算的功能 3. 返回JSON对象 3.1 实现登录功能&#xff0c;返回 JSON 对象 4. 请求转发(forward)或请求重定向(redirect) 4.1 请…

Day 63 : 集成学习之 AdaBoosting (1. 带权数据集)

63.1 AdaBoosting基本算法&#xff1a;先从初始训练集训练一个弱学习器&#xff0c;在根据弱学习器的表现对训练样本进行权重调整&#xff0c;经过若干轮之后&#xff0c;将得到一组分类器&#xff0c;将数据输入这组分类器后会得到一个综合且准确的的分类结果。“三个臭皮匠&a…

评论管理功能

后端 bp.get("/comment/list") def comment_list():comments CommentModel.query.order_by(CommentModel.create_time.desc()).all()comment_list []for comment in comments:comment_dict comment.to_dict()comment_list.append(comment_dict)return restful.ok…

Python模块requests基本用法

简介 Python 的 requests 模块是一个流行的第三方库&#xff0c;用于发送HTTP请求。它提供了一组简洁且易于使用的API&#xff0c;使得在Python中进行网络通信变得更加简单和灵活。 目录 1. 基本概念 1.1. HTTP 协议 1.2. GET 请求 1.3. POST 请求 1.4. get 和 post 的区别…

uniapp 小程序 评分组件

效果图&#xff1a; 1、组件&#xff1a;starsRating.vue <template><view class"stars"><image click"btnStars1" class"starsicon" :src"starsObject[0]" mode"widthFix"></image><image c…

Stream API将对象中的某一字段取出转换为list或数组

List<DevicePartMaintain> devicePartMaintainList devicePartMaintainMapper.selectDevicePartMaintainByMitId(mitId);所有id转换为List 要使用Stream流获取devicePartMaintainList中所有的id&#xff0c;您可以使用stream()方法将列表转换为流&#xff0c;然后使用…

从C语言到C++_28(红黑树RedBlackTree)概念+插入接口实现

目录 1. 红黑树的引入和简介 2. 红黑树的性质和定义 3. 红黑树的插入 3.1 调整情况一 3.2 调整情况二 3.2.1 调整情况二中的单旋变色 3.2.2 调整情况二中的双旋变色 3.3 调整情况三 3.4 红黑树插入完整代码 4. 红黑树的验证和完整代码 4.1 验证是不是搜索树&#xf…

Pytorch个人学习记录总结 07

目录 神经网络-非线性激活 神经网络-线形层及其他层介绍 神经网络-非线性激活 官方文档地址&#xff1a;torch.nn — PyTorch 2.0 documentation 常用的&#xff1a;Sigmoid、ReLU、LeakyReLU等。 作用&#xff1a;为模型引入非线性特征&#xff0c;这样才能在训练过程中…

【0基础学习python】顺序结构+条件语句+循环结构(文章后面有人生重开模拟器的相关逻辑和简单实现)

1.顺序语句 默认情况下&#xff0c;python的代码执行顺序是按照从上到下的顺序&#xff0c;依次执行的。 print(1) print(2) print(3)执行的结果一定为 1 2 3 &#xff0c;而不会出现 3 2 1 或者 1 3 2等&#xff0c;这种按照顺序执行的代码&#xff0c;我们称为顺序语句。 …

C++第六讲

思维导图 顺序栈定义成模板类 /* ---------------------------------author&#xff1a;YoungZorncreated on 2023/7/22 16:23.--------------------------------- */ #include<iostream>using namespace std;template<typename T> class my_stack { private:T *p…

Unity进阶--声音管理器学习笔记

文章目录 声音管理器 using System.Collections; using System.Collections.Generic; using UnityEngine;public class AudioManager : MyrSingletonBase<AudioManager> {//环境音private AudioSource enPlayer;//音效private AudioSource sePlayer;//音乐private Audio…

IDEA使用AWS CodeWhisperer

IDEA使用AWS CodeWhisperer 首先在IDEA的插件市场中下载AWS Toolkit&#xff1a; 这里我使用的IDEA是2023.1&#xff0c;就是在ToolWindows里把AWS Toolkit面板调出来&#xff1a; 连接&#xff1a; 打开的网页中粘贴上面提过的代码。进入注册流程。 注册完成后返回IDEA&am…

自动驾驶感知系统-毫米波雷达

毫米波雷达就是电磁波&#xff0c;雷达通过发射无线电信号并接收反射信号来测定车辆与物体间的距离&#xff0c;其频率通常介于10~300GHz之间。与厘米波导引头相比&#xff0c;毫米波导引头体积小&#xff0c;质量轻&#xff0c;空间分辨率高&#xff1b;与红外、激光、电视等光…

Vue--插槽

一、插槽-默认插槽 1.作用 让组件内部的一些 结构 支持 自定义 2.需求 将需要多次显示的对话框,封装成一个组件 3.问题 组件的内容部分&#xff0c;不希望写死&#xff0c;希望能使用的时候自定义。怎么办 4.插槽的基本语法 组件内需要定制的结构部分&#xff0c;改用**…

STM32 HAL库定时器输入捕获+更新中断

STM32 HAL库定时器输入捕获更新中断 &#x1f4cd;相关参考&#xff1a;https://www.cnblogs.com/kevin-nancy/p/12569377.html#4621839&#x1f4cc;相关篇《STM32 HAL库定时器输入捕获SlaveMode脉宽测量》 ✨高级定时器的输入捕获功能在脉宽信号测量方面是非常方便的。尤其时…

代码随想录算法训练营第二十一天 | 读PDF复习环节1

读PDF复习环节1 本博客的内容只是做一个大概的记录&#xff0c;整个PDF看下来&#xff0c;内容上是不如代码随想录网站上的文章全面的&#xff0c;并且PDF中有些地方的描述&#xff0c;是很让我疑惑的&#xff0c;在困扰我很久后&#xff0c;无意间发现&#xff0c;其网站上的讲…