视音频数据的数据源分析

来源:互联网 发布:什么叫网络销售 编辑:程序博客网 时间:2024/04/29 16:56

一、视频数据源分析

一)、视频数据源分析

      数字技术就是用数字编码来描述和表达图像、声音等各种媒体信息。其信息处理的流程是:模拟信息→数字化→压缩编码→存储或传输→解码再现。

     数字化视频的过程.通常被叫做数字化视频采集。模拟信号到数字信号的转换中通常用8 bit来表示.对于专业或广播级的信号转换等级会更高。对于彩色信号,无论是RGB还是YUV方式,只需用24 bit来表示。因此采样频率的高低是决定数字化视频图像质量的重要指标。
    视频采集中计算机的处理设备通常有3种类型,即帧采集卡、动态图像连续采集卡、电视节目接受卡。帧采集卡的工作原理是把偶合视频信号解码成RGB或YUV,RGB或YUV信号经过A/D转换后进入帧存体,帧存体内的数据根据同步信号不断被刷新。帧存体内的数据需要保存时,计算机给出控制信号,帧存体数据不再被刷新.这时计算机可以读出帧存体数据传送到计算机内存或存放到硬盘中。

二)、RGB转YUV

采集到的图像是RGB格式,每一帧图像都分成红、绿、蓝3个通道,RGB三个分量分别用8bit来表示,其取值范围为0--255,然后将其转换成YUV格式进行压缩编码。

1、RGB颜色模型

    颜色模型是用来精确标定和生成各种颜色的一套规则和定义。某种颜色模型所标定的所有颜色就构成了一个颜色空间。颜色空间通常用三维模型表示,空间中的颜色通常使用代表三个参数的三维坐标来指定。理论上绝大部分可见光谱都可用红、绿和蓝 (RGB) 三色光按不同比例和强度的混合来表示。 颜色C=R(红色的百分比)+G(绿色的百分比)+ B(蓝色的百分比)。RGB模型称为相加混色模型,用于光照、视频和显示器。例如,显示器通过红、绿和蓝荧光粉发射光线产生彩色。

2、YUV

YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制采用的颜色空间。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色ccd摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。

主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr4:1:1和 YCbCr 4:4:4。其中YCbCr4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度值(也就是Y值),每 2x2 个点保存一个 Cr 和Cb 值,图像在肉眼中的感觉不会起太大的变化。所以, 原来用 RGB(R,G,B 都是 8bitunsigned) 模型, 1个点需要 8x3=24 bits(如下图第一个图),(全采样后,YUV仍各占8bit)。按4:1:1采样后,而现在平均仅需要 8+(8/4)+(8/4)=12bits(4个点,8*4(Y)+8(U)+8(V)=48bits), 平均每个点占12bits。这样就把图像的数据压缩了一半。

3、YUV与RGB空间的相互转换

由电视原理可知,亮度和色差信号的构成如下:

Y=0.2990R+0.5870G+0.1140B

R-Y=0.7010R-0.5870G-0.1140B

B-Y=-0.2990R-0.5870G+0.8860B

为了使色差信号的动态范围控制在0.5之间,需要进行归一化,对色差信号引入压缩系数。归一化后的色差信号为:

U=-0.1684R-0.3316G+0.5B

V=0.5R-0.4187G-0.0813B

 

4、码电平分配及数字表达式

(1)亮电平信号量化后码电平分配

在对分量信号进行8比特均匀量化时,共分为256个等间隔的量化级。为了防止信号变动造成过载,在256级上端留20级,下端留16级作为信号超越动态范围的保护带。

(2)色差信号量化后码电平分配

色差信号经过归一化处理后,动态范围为-0.5-0.5,让色差零电平对应码电平128,色差信号总共占225个量化级。在256级上端留15级,下端留16级作为信号超越动态范围的保护带。

 

5、色度格式

人眼分辨景物彩色细节的能力很差,只有对黑白细节分辨力的1/3--1/5,因此一般将亮度信号用全带宽传送,而色差信号则用半带宽或1/4带宽传送,以YUV取样格式4:2:0为例来说明,如图2:

图2. 4:2:0格式中亮度信号和色差信号样点位置

UV分量在压缩前甩去3/4的数据量,如图3:



图3. 4:2:0色度取样格式数据量示意图

由于显示屏需要通过RGB触发,所以解压缩后YUV数据需要内插得到原来的数据量,再通过转换公式得到RGB数据。

 

4:2:0格式是指色差信号U,V的取样频率为亮度信号取样频率的四分之一,在水平方向和垂直方向上的取样点数均为Y的一半。

 

6、部分查表法的基本思路

根据RGB到YUV的转换公式,可用查表替代转换算法中的乘法运算。即定义7个1维数组作为查找表(下标从0开始到255,数组元素为转换系数与256个整数的乘积。

void InitLookupTable( )

{

    int i;

    for (i = 0; i< 256;i++) RGBYUV02990[i] =(float)0.2990 * i;

    for (i = 0; i< 256;i++) RGBYUV05870[i] =(float)0.5870 * i;

    for (i = 0; i< 256;i++) RGBYUV01140[i] =(float)0.1140 * i;

    for (i = 0; i< 256;i++) RGBYUV01684[i] =(float)0.1684 * i;

    for (i = 0; i< 256;i++) RGBYUV03316[i] =(float)0.3316 * i;

    for (i = 0; i< 256;i++) RGBYUV04187[i] =(float)0.4187 * i;

    for (i = 0; i< 256;i++) RGBYUV00813[i] =(float)0.0813 * i;

}

在对视频序列中的每一帧或单帧图像进行彩色空间转换时,只需查找对应的表项即可。因此可以节省运算的时间。

 

 

 

RGB to YUV420 
#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#include "rgb2yuv.h"

#defineFALSE           false

#define TRUE       true

int main(int argc, char **argv)

{

     FILE*fp_in=NULL;

     FILE*fp_out=NULL;

 

     unsigned intwidth=256;

     unsigned intheight=256;

     unsignedchar *rgb,*yuv=NULL;

     unsignedchar *y,*u,*v=NULL;

     bool flip =TRUE; 

     int i,j=0;

 

     rgb=(unsignedchar*)malloc(width*height*3);

    y=(unsignedchar*)malloc(width*height);

    u=(unsignedchar*)malloc(width*height/4);

    v=(unsignedchar*)malloc(width*height/4);

 

    fp_in=fopen("down.rgb","rb");

     if(fp_in==NULL)

     {

         printf("can'topen");

          exit(1);

     }

     else

     {

         printf("ok");

     }

    fp_out=fopen("down.yuv","wb");

     if(fp_out==NULL)

     {

         printf("can'topen");

         exit(1);

     }

     else

     {

         printf("ok");

     }

 

     if (rgb ==NULL || y == NULL || u== NULL || v == NULL)

     {

         printf("noenought memory\n");

         exit(1);

     }

    while(fread(rgb,1,width*height*3,fp_in))

     {

        RGB2YUV(width,height, rgb, y, u, v, flip);

          for(i= 0; i < (width*height); i++)

          {

               if(y[i] < 16) y[i] = 16;

               if(y[i] > 235) y[i] = 235;

          }

         

          for(i= 0; i < (width*height/4); i++)

          {

               if(u[i] < 16) u[i] = 16;

               if(u[i] > 240) u[i] = 240;

               

               if(v[i] < 16) v[i] = 16;

               if(v[i] > 240) v[i] = 240;

          }

 

         fwrite(y,1,width*height,fp_out);

         fwrite(u,1,width*height/4,fp_out);

         fwrite(v,1,width*height/4,fp_out);

     }

     free(rgb);

     free(y);

     free(u);

     free(v);

    if((fp_in=fopen("down.rgb","rb"))==NULL)

     {

         printf("error");

     }

     else

     fclose(fp_in);

 

    if((fp_in=fopen("down.yuv","rb"))==NULL)

     {

          printf("error");

     }

     fclose(fp_out);

     return 0;

}

rgb2yuv.h略

 

二、音频数据源分析

 

一)、音频信号采用双极性编码的原因

因为采集到的模拟的声音电信号是双极性信号,为了保持这一特性,故采用双极性编码。

二)、音频信号的数字化

音频信号数字化的三部曲:采样、量化、编码

1)、音频信号的采样频率标准:

音频信号频率上限为20KHz,故采样信号频率fs应大于40KHz以上,考虑到LPF在20KHz处大约衰减10%,为全频带高质量的还原,可以用22KHz的2倍频率作为音频信号的采样频率,但又为了能与电视信号同步,PAL制场频为50Hz,NTSC制场频为60Hz,所以取二者的整倍数,则选用了44.1KHz作为CD声音的采样标准。

2)、量化

     量化过程:对非整数的采样值整数化(四舍五入),即采用四舍五入的方法将样值归到某一最接近的整数,这一过程被称为量化。

     量化级:对满幅度信号所取的量化份数为量化级。份数越多对信号描述的就越细,然而表示信号的bit数也就越多。

          量化级差:量化分度的最小单位称为量化级差,用△表示,它是二进制最低有效位LSB所代表的物理量。

    量化误差(量化噪声):由四舍五入所引起的输入信号样值与量化后输出值的差,叫做量化误差,也称为量化噪声(N)                   音频信号的信噪比:因为音频信号总是双极性的,所以峰值电压Vp=2n-1△,式中n为量化级数的bit数,因此音频信号的信噪比为:

 

 

式中m为由信号统计性质决定的常数。如果用16bit量化且信号为正弦波时(m=3.01)则有

 

我们可以通过提高量化级数即增加比特数来减小量化级差△,从而降低量化噪声,以减少信号的损失。但是bit数过多,将会使数字化后的数据过大,这将会给系统带来一定的困难,考虑到技术的复杂性和商品成本等多方面原因,CD和VCD中的音频采用16 bit量化器,即为216=65536级,理论上的动态范围可达96dB,而信噪比约90dB。

3)、编码:编码就是把已经量化后的采样值用二进制数码表示出来

 

 

三)、音频信号的保存格式

1、MP3格式
MP3的全称是Moving Picture Experts Group Audio Layer III。MP3是利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的file,能够在音质丢失很小的情况下把文件压缩到更小的程度。而且还非常好的保持了原来的音质。
补充:最高比特率320K,高频部分一刀切是他的缺点。音质不高!
2、WMA格式
WMA的全称是Windows Media Audio,是微软力推的一种音频格式。WMA格式是以减少数据流量但保持音质的方法来达到更高的压缩率目的,其压缩率一般可以达到1:18,生成的文件大小只有相应MP3文件的一半。此外,WMA还可以通过DRM(DigitalRightsManagement)方案加入防止拷贝,或者加入限制播放时间和播放次数,甚至是播放机器的限制,可有力地防止盗版。
补充:128kbps为wma最优压缩比,128kbps wma=192kbps mp3
3、WAV格式
WAV格式是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz的采样频率,16位量化位数,因此WAV的音质与CD相差无几,但WAV格式对存储空间需求太大不便于交流和传播。
补充:无损格式,缺点:体积十分大!
4、ASF格式
ASF的全称是Advanced Streaming Format,是微软所制订的一种媒体播放格式,适合在网络上播放。而Windows Media On-Demand Producer则是制作ASF档案的免费软件,让即使是初学者也能很轻易的利用现成的WAV或AVI档案制作ASF文件。

补充:少见的格式
5、AAC格式
AAC实际上是高级音频编码的缩写。AAAC所采用的运算法则与MP3的运算法则有所不同,AAC通过结合其他的功能 来提高编码效率。AAC的音频算法在压缩能力上远远超过了以前的一些压缩算法(比如MP3等)。它还同时支持多达48个音轨、15个低频音轨、更多种采样率和比特率、多种语言的兼容能力、更高的解码效率。总之,AAC可以在比MP3文件缩小30%的前提下提供更好的音质。
补充:目前最好的有损格式之一。有多种编码,faac,nero为常见,比特率最高448kbps。硬件支持方面,高级mp3和现在手机普遍支持。
6、Mp3Pro格式
Mp3Pro是Mp3编码格式的升级版本。在保持相同的音质下同样可以把声音文件的文件量压缩到原有MP3格式的一半大小。而且可以在基本不改变文件大小的情况下改善原先的MP3音乐音质。它能够在用较低的比特率压缩音频文件的情况下,最大程度地保持压缩前的音质。MP3pro可以实现完全的兼容性。经过mp3Pro压缩的文件,扩展名仍旧是.mp3。可以在老的mp3播放器上播放。老的mp3文件可以在新的mp3pro播放器上进行播放。实现了该公司所谓的“向前向后兼容”。
补充:mp3压缩后的格式,可以这么认为
7、VQF格式
VQF格式是由YAMAHA和NTT共同开发的一种音频压缩技术,它的压缩率能够达到1:18,因此相同情况下压缩后VQF的文件体积比MP3小30%~50%,更便利于网上传播,同时音质极佳,接近CD音质(16位44.1kHz立体声)。但VQF未公开技术标准,至今未能流行开来。
补充:少见
8、FLAC格式
FLAC即是Free Lossless Audio Codec的缩写,中文可解为无损音频压缩编码。FLAC是一套著名的自由音频压缩编码,其特点是无损压缩。不同于其他有损压缩编码如MP3 及 AAC,它不会破任何原有的音频资讯,所以可以还原音乐光盘音质。现在它已被很多软件及硬件音频产品所支持。
补充:为无损格式,较ape而言,他体积大点,但是兼容性好,编码速度快,播放器支持更广
9.APE格式
APE是目前流行的数字音乐文件格式之一。与MP3这类有损压缩方式不同,APE是一种无损压缩音频技术
补充:为无损压缩格式,较flac而已,他体积较小。编码速度偏慢。
10.MID格式
MID是midi的简称,是它的扩展名。MIDI是英语Music Instrument Digital Interface 的缩写。

11.OGG格式
Ogg全称应该是OGG Vobis(ogg Vorbis) 是一种新的音频压缩格式,类似于MP3等现有的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的。

Ogg Vorbis文件的扩展名是.OGG。这种文件的设计格式是非常先进的。现在创建的OGG文件可以在未来的任何播放器上播放,因此,这种文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。
补充:目前最好的有损格式之一,MP3部分支持,智能手机装软件部分可以支持,最高比特率500kbps。

总结:
音乐爱好者常见的格式有flac> ape> wav> mp3> aac>ogg>wma
其中压缩比为:aac>ogg>mp3(wma)>ape>flac>wav 同音质)
mp3和wma以192kbps为分界线,192kbps以上mp3好,以下wma好。
最高音质:wav=flac=ape>aac>ogg>mp3>wma (一般网上音乐网下载,非百度搜狗随便下载)
wav=flac=ape=wma>aac>ogg>mp3 其中 wma(有无损,但是少见) wav少见
硬件支持方面:MP3播放器mp3>wma>wav>flac>ape>aac> ogg
手机 mp3>wma>aac wav>flac >ogg>ape
性能(就是综合音质体积编码率):aac>ogg>flac ape>mp3>wav

 

四)、wav格式的保存

wav是一种无损音频文件格式,相对于其他音频格式文件数据是没有经过压缩的,通常文件也相对比较大些。用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,常见的wav文件有两种,分别对应于单声道(11.025kHz采样率,8bit/样值)和双声道(44.1kHz采样率,16bit/样值),对于双声道音频文件,每个采样数据用16bit表示,高八位和低八位分别代表左右两个声道。wav文件分为两个部分,第一部分是wav头文件,第二部分是PCM编码的音频数据部分。

wav文件是以RIFF格式来组织内部结构的,每个文件最前端写入的是RIFF块,每个文件只有一个RIFF块,第一个4字节为块的标志符,如“RIFF”等,指定块的标志ID,第二个4字节用来指定块的数据域大小(包括图4中从“Format”到“data”所有内容的大小),“数据”用来描述具体的声音信号,另外,RIFF块的数据总是以一个指定文件中数据存储格式的四个字符码(称为格式类型)开始,如wav文件有一个“WAVE”的格式类型,如表1:

表1.RIFF块的结构

 

所占字节数

具体内容

块的标志符

4Bytes

“RIFF”

数据大小

4Bytes

36+Subchunk2Size

数据

4Bytes

“WAVE”

RIFF块包含两个子块,这两个子块的ID分别是“fmt”和“data”,其中“fmt”子块由结构PCMWAVEFORMAT所组成,其子块的大小就是sizeof(PCMWAVEFORMAT),数据组成就是PCMWAVEFORMAT结构中的数据,包括诸如通道数,采样率,每个样本点的比特数等信息,“data”子块包括声音数据块的大小以及音频数据信息,如表2。

表2.wav文件的结构

 

所占字节数

具体内容

标志符

4 Bytes

“RIFF”

数据大小

4 Bytes

36+Subchunk2Size

格式类型

4 Bytes

“WAVE”

标志符

4 Bytes

“fmt ”

Sizeof (PCMWAVEFORMAT)

4 Bytes

16(对于PCM)

PCMWAVEFORMAT

16 Bytes

 

标志符

4 Bytes

“data”

声音数据大小

4 Bytes

Subchunk2Size

声音数据

Subchunk2Size

 

非PCM格式的文件会至少多加入一个“fact”块,它用来记录数据(注意是数据而不是文件)解压缩后的大小,这个“fact”块一般加在“data”块的前面。

表3.factchunk的结构

 

所占字节数

具体内容

ID

4Bytes

“fact”

Size

4Bytes

4

Data

4Bytes

解压后的音频数据的大小(Bytes)

 

原创粉丝点击