视频编解码概述

                                                                                    视频编解码概述

1. 常用的基本知识

基本概念

编解码

  编解码器(codec)指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序。这里指的变换既包括将信号或者数据流进行编码(通常是为了传输、存储或者加密)或者提取得到一个编码流的操作,也包括为了观察或者处理从这个 编码流中恢复适合观察或操作的形式的操作。编解码器经常用在视频会议和流媒体等应用中。(h.261,h.262,h.263,h,264,mpeg1,mpeg2,mpeg4). Rm, Microsoft.

容器

  很多多媒体数据流需要同时包含音频数据和视频数据,这时通常会加入一些用于音频和视频数据同步的元数据,例如字幕。这三种数据流可能会被不同的程序,进程或者硬件处理,但是当它们传输或者存储的时候,这三种数据通常是被封装在一起 的。通常这种封装是通过视频文件格式来实现的,例如常见的*.mpg, *.avi, *.mov, *.mp4, *.rm, *.ogg or *.tta. 这些格式中有些只能使用某些编解码器,而更多可以以容器的方式使用各种编解码器。

    视频是现在电脑中多媒体系统中的重要一环。为了适应储存视频的需要,人们设定了不同的视频文件格式来把视频和音频放在一个文件中,以方便同时回放。视频档实际上都是一个容器里面包裹着不同的轨道,使用的容器的格式关系到视频档的可扩展性。

 

参数介绍

采样率

  采样率(也称为采样速度或者采样频率)定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数叫作采样周期或采样时间,它是采样之间的时间间隔。注意不要将采样率与比特率(bit rate,亦称“位速率”)相混淆。

  采样定理表明采样频率必须大于被采样信号带宽的两倍,另外一种等同的说法是奈奎斯特频率必须大于被采样信号的带宽。如果信号的带宽是 100Hz,那么为了避免混叠现象采样频率必须大于 200Hz。换句话说就是采样频率必须至少是信号中最大频率分量频率的两倍,否则就不能从信号采样中恢复原始信号。

  对于语音采样:

  • 8,000 Hz - 电话所用采样率, 对于人的说话已经足够
  • 11,025 Hz
  • 22,050 Hz - 无线电广播所用采样率
  • 32,000 Hz - miniDV 数码视频 camcorder、DAT (LP mode)所用采样率
  • 44,100 Hz - 音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率
  • 47,250 Hz - Nippon Columbia (Denon)开发的世界上第一个商用 PCM 录音机所用采样率
  • 48,000 Hz - miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率
  • 50,000 Hz - 二十世纪七十年代后期出现的 3M 和 Soundstream 开发的第一款商用数字录音机所用采样率
  • 50,400 Hz - 三菱 X-80 数字录音机所用所用采样率
  • 96,000 或者 192,000 Hz - DVD-Audio、一些 LPCM DVD 音轨、Blu-ray Disc(蓝光盘)音轨、和 HD-DVD (高清晰度 DVD)音轨所用所用采样率
  • 2.8224 MHz - SACD、 索尼 和 飞利浦 联合开发的称为 Direct Stream Digital 的 1 位 sigma-delta modulation 过程所用采样率。

  在模拟视频中,采样率定义为帧频和场频,而不是概念上的像素时钟。图像采样频率是传感器积分周期的循环速度。由于积分周期远远小于重复所需时间,采样频率可能与采样时间的倒数不同。

  • 50 Hz - PAL  视频
  • 60 / 1.001 Hz - NTSC 视频

  当模拟视频转换为数字视频的时候,出现另外一种不同的采样过程,这次是使用像素频率。一些常见的像素采样率有:

  • 13.5 MHz - CCIR 601、D1 video

分辨率

  分辨率,泛指量测或显示系统对细节的分辨能力。此概念可以用时间、空间等领域的量测。日常用语中之分辨率多用于图像的清晰度。分辨率越高代表图像品质越好,越能表现出更多的细节。但相对的,因为纪录的信息越多,文件也就会越大。目 前个人电脑里的图像,可以使用图像处理软件,调整图像的大小、编修照片等。例如 photoshop,或是photoimpact等软件。

 图像分辨率

  用以描述图像细节分辨能力,同样适用于数字图像、胶卷图像、及其他类型图像。常用'线每毫米'、 '线每英吋'等来衡量。通常,“分辨率”被表示成每一个方向上的像素数量,比如640x480等。而在某些情况下,它也可以同时表示成“每英吋像素”(pixels per inch,ppi)以及图形的长度和宽度。比如72ppi,和8x6英吋。

 视频分辨率

各种电视规格分辨率比较视频的画面大小称为“分辨率”。数位视频以像素为度量单位,而类比视频以水平扫瞄线数量为度量单位。标清电视频号分辨率为 720/704/640x480i60(NTSC)或768/720x576i50(PAL/SECAM)。新的高清电视(HDTV)分辨率可达 1920x1080p60,即每条水平扫瞄线有1920个像素,每个画面有1080条扫瞄线,以每秒钟60张画面的速度播放。

画面更新率fps

  Frame rate中文常译为“画面更新率”或“帧率”,是指视频格式每秒钟播放的静态画面数量。典型的画面更新率由早期的每秒6或8张(frame persecond,简称fps),至现今的每秒120张不等。PAL (欧洲,亚洲,澳洲等地的电视广播格式) 与 SECAM (法国,俄国,部分非洲等地的电视广播格式) 规定其更新率为25fps,而NTSC (美国,加拿大,日本等地的电视广播格式) 则规定其更新率为29.97 fps。电影胶卷则是以稍慢的24fps在拍摄,这使得各国电视广播在播映电影时需要一些复杂的转换手续(参考Telecine转换)。要达成最基本的视觉暂留效果大约需要10fps的速度。

 

压缩方法

有损压缩和无损压缩

  在视频压缩中有损(Lossy )和无损(Lossless)的概念与静态图像中基本类似。无损压缩也即压缩前和解压缩后的数据完全一致。多数的无损压缩都采用RLE行程编码算法。有损 压缩意味着解压缩后的数据与压缩前的数据不一致。在压缩的过程中要丢失一些人眼和人耳所不敏感的图像或音频信息,而且丢失的信息不可恢复。几乎所有高压缩的算法都采用有损压缩,这样才能达到低数据率的目标。丢失的数据率与压缩比有关,压缩比越小,丢失的数据越多,解压缩后的效果一般越差。此外,某些有损压 缩算法采用多次重复压缩的方式,这样还会引起额外的数据丢失。

  • 无损格式,例如WAV,PCM,TTA,FLAC,AU,APE,TAK,WavPack(WV)
  • 有损格式,例如MP3,Windows Media Audio(WMA),Ogg Vorbis(OGG),AAC

帧内压缩和帧间压缩

  帧内(Intraframe)压缩也称为空间压缩(Spatialcompression)。当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,这实际上与静态图像压缩类似。帧内一般采用有损压缩算法,由于帧内压缩时各个帧之间没有相互关系,所以压缩后的视频数据仍可以以帧为单位进行编辑。帧内压缩一般达不到很高的压缩。

  采用帧间(Interframe)压缩是基于许多视频或动画的连续前后两帧具有很大的相关性,或者说前后两帧信息变化很小的特点。也即连续的视频其相邻帧之间具有冗余信息,根据这一特性,压缩相邻帧之间的冗余量就可以进一步提高压缩量,减小压缩比。帧间压缩也称为时间压缩 (Temporalcompression),它通过比较时间轴上不同帧之间的数据进行压缩。帧间压缩一般是无损的。帧差值(Frame differencing)算法是一种典型的时间压缩法,它通过比较本帧与相邻帧之间的差异,仅记录本帧与其相邻帧的差值,这样可以大大减少数据量。

对称编码和不对称编码

  对称性(symmetric)是压缩编码的一个关键特征。对称意味着压缩和解压缩占用相同的计算处理能力和时间,对称算法适合于实时压缩和传送视频,如视频会议应用就以采用对称的压缩编码算法为好。而在电子出版和其它多媒体应用中,一般是把视频预先压缩处理好,尔后再播放,因此可以采用不对称 (asymmetric)编码。不对称或非对称意味着压缩时需要花费大量的处理能力和时间,而解压缩时则能较好地实时回放,也即以不同的速度进行压缩和解压缩。一般地说,压缩一段视频的时间比回放(解压缩)该视频的时间要多得多。例如,压缩一段三分钟的视频片断可能需要10多分钟的时间,而该片断实时回放时间只有三分钟。

 

图像格式

见AVS-P16工作草案20120426-r1.pdf 中 P20页。

 

视频与图像RGB/YUV格式详解

计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red)、G(Green)、B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生色彩。这种色彩的表示方法称为RGB色彩空间表示(它也是多媒体计算机技术中用得最多的一种色彩空间表示方法)。

  根据三基色原理,任意一种色光F都可以用不同分量的R、G、B三色相加混合而成。

F = r [ R ] + g [ G ] + b [ B ]

  其中,r、g、b分别为三基色参与混合的系数。当三基色分量都为0(最弱)时混合为黑色光;而当三基色分量都为k(最强)时混合为白色光。调整r、g、b三个系数的值,可以混合出介于黑色光和白色光之间的各种各样的色光。
  那么YUV又从何而来呢?在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD摄像机进行摄像,然后把摄得的彩色图像信号经分色、分别放大校正后得 到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发 送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。
  采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色 电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。

  YUV与RGB相互转换的公式如下(RGB取值范围均为0-255):

Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B

R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U

  在DirectShow中,常见的RGB格式有RGB1、RGB4、RGB8、RGB565、RGB555、RGB24、RGB32、ARGB32等;常 见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、 YUV411、YUV420等。作为视频媒体类型的辅助说明类型(Subtype),它们对应的GUID见表2.3。

表2.3 常见的RGB和YUV格式

      GUID                                       格式描述
MEDIASUBTYPE_RGB1    2色,每个像素用1位表示,需要调色板
MEDIASUBTYPE_RGB4    16色,每个像素用4位表示,需要调色板
MEDIASUBTYPE_RGB8    256色,每个像素用8位表示,需要调色板
MEDIASUBTYPE_RGB565    每个像素用16位表示,RGB分量分别使用5位、6位、5位
MEDIASUBTYPE_RGB555    每个像素用16位表示,RGB分量都使用5位(剩下的1位不用)
MEDIASUBTYPE_RGB24    每个像素用24位表示,RGB分量各使用8位
MEDIASUBTYPE_RGB32    每个像素用32位表示,RGB分量各使用8位(剩下的8位不用)
MEDIASUBTYPE_ARGB32    每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)
MEDIASUBTYPE_YUY2    YUY2格式,以4:2:2方式打包
MEDIASUBTYPE_YUYV    YUYV格式(实际格式与YUY2相同)
MEDIASUBTYPE_YVYU    YVYU格式,以4:2:2方式打包
MEDIASUBTYPE_UYVY    UYVY格式,以4:2:2方式打包
MEDIASUBTYPE_AYUV    带Alpha通道的4:4:4 YUV格式
MEDIASUBTYPE_Y41P    Y41P格式,以4:1:1方式打包
MEDIASUBTYPE_Y411    Y411格式(实际格式与Y41P相同)
MEDIASUBTYPE_Y211    Y211格式
MEDIASUBTYPE_IF09    IF09格式
MEDIASUBTYPE_IYUV    
IYUV格式
MEDIASUBTYPE_YV12    YV12格式
MEDIASUBTYPE_YVU9    YVU9格式

下面分别介绍各种RGB格式。

¨ RGB1、RGB4、RGB8都是调色板类型的RGB格式,在描述这些媒体类型的格式细节时,通常会在BITMAPINFOHEADER数据结构后面跟着一个调色板(定义一系列颜色)。它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。以RGB1(2色位图)为例,比如它的调色板中 定义的两种颜色值依次为0x000000(黑色)和0xFFFFFF(白色),那么图像数据001101010111…(每个像素用1位表示)表示对应各 像素的颜色为:黑黑白白黑白黑白黑白白白…。

¨ RGB565使用16位表示一个像素,这16位中的5位用于R,6位用于G,5位用于B。程序中通常使用一个字(WORD,一个字等于两个字节)来操作一个像素。当读出一个像素后,这个字的各个位意义如下:
     高字节              低字节
R R R R R G G G     G G G B B B B B
可以组合使用屏蔽字和移位操作来得到RGB各分量的值:

#define RGB565_MASK_RED    0xF800
#define RGB565_MASK_GREEN  0x07E0
#define RGB565_MASK_BLUE   0x001F
R = (wPixel & RGB565_MASK_RED) >> 11;   // 取值范围0-31
G = (wPixel & RGB565_MASK_GREEN) >> 5;  // 取值范围0-63
B =  wPixel &RGB565_MASK_BLUE;         // 取值范围0-31

¨ RGB555是另一种16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。使用一个字读出一个像素后,这个字的各个位意义如下:
     高字节            低字节
X R R R R G G       G G G B B B BB       (X表示不用,可以忽略)
可以组合使用屏蔽字和移位操作来得到RGB各分量的值:

#define RGB555_MASK_RED    0x7C00
#define RGB555_MASK_GREEN  0x03E0
#define RGB555_MASK_BLUE   0x001F
R = (wPixel & RGB555_MASK_RED) >> 10;   // 取值范围0-31
G = (wPixel & RGB555_MASK_GREEN) >> 5;  // 取值范围0-31
B =  wPixel &RGB555_MASK_BLUE;         // 取值范围0-31

¨ RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。通常可以使用RGBTRIPLE数据结构来操作一个像素,它的定义为:

typedef struct tagRGBTRIPLE {
  BYTE rgbtBlue;    // 蓝色分量
  BYTE rgbtGreen;   // 绿色分量
  BYTE rgbtRed;     // 红色分量
} RGBTRIPLE;

¨ RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。(ARGB32就是带Alpha通道的RGB32。)注意在内存中RGB各分量的排列顺序为:BGRABGRA BGRA…。通常可以使用RGBQUAD数据结构来操作一个像素,它的定义为:

typedef struct tagRGBQUAD {
  BYTE    rgbBlue;      //蓝色分量
  BYTE    rgbGreen;     // 绿色分量
  BYTE    rgbRed;      // 红色分量
  BYTE    rgbReserved;  // 保留字节(用作Alpha通道或忽略)
} RGBQUAD;

  下面介绍各种YUV格式。YUV格式通常有两大类:打包(packed)格式和平面(planar)格式。前者将YUV分量存放在同一个数组中,通常是几 个相邻的像素组成一个宏像素(macro-pixel);而后者使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。表2.3中的YUY2到 Y211都是打包格式,而IF09到YVU9都是平面格式。(注意:在介绍各种具体格式时,YUV各分量都会带有下标,如Y0、U0、V0表示第一个像素的YUV分量,Y1、U1、V1表示第二个像素的YUV分量,以此类推。)

¨ YUY2(和YUYV)格式为每个像素保留Y分量,而UV分量在水平方向上每两个像素采样一次。一个宏像素为4个字节,实际表示2个像素。(4:2:2的意思为一个宏像素中有4个Y分量、2个U分量和2个V分量。)图像数据中YUV分量排列顺序如下:
Y0 U0 Y1 V0    Y2 U2 Y3 V2 …

¨ YVYU格式跟YUY2类似,只是图像数据中YUV分量的排列顺序有所不同:
Y0 V0 Y1 U0    Y2 V2 Y3 U2 …

¨ UYVY格式跟YUY2类似,只是图像数据中YUV分量的排列顺序有所不同:
U0 Y0 V0 Y1    U2 Y2 V2 Y3 …

¨ AYUV格式带有一个Alpha通道,并且为每个像素都提取YUV分量,图像数据格式如下:
A0 Y0 U0 V0    A1 Y1 U1 V1 …

¨ Y41P(和Y411)格式为每个像素保留Y分量,而UV分量在水平方向上每4个像素采样一次。一个宏像素为12个字节,实际表示8个像素。图像数据中YUV分量排列顺序如下:
U0 Y0 V0 Y1    U4 Y2 V4 Y3    Y4 Y5 Y6Y8 …

¨ Y211格式在水平方向上Y分量每2个像素采样一次,而UV分量每4个像素采样一次。一个宏像素为4个字节,实际表示4个像素。图像数据中YUV分量排列顺序如下:
Y0 U0 Y2 V0    Y4 U4 Y6 V4 …

¨ YVU9格式为每个像素都提取Y分量,而在UV分量的提取时,首先将图像分成若干个4 x 4的宏块,然后每个宏块提取一个U分量和一个V分量。图像数据存储时,首先是整幅图像的Y分量数组,然后就跟着U分量数组,以及V分量数组。IF09格式与YVU9类似。

¨ IYUV格式为每个像素都提取Y分量,而在UV分量的提取时,首先将图像分成若干个2 x 2的宏块,然后每个宏块提取一个U分量和一个V分量。YV12格式与IYUV类似。

¨ YUV411、YUV420格式多见于DV数据中,前者用于NTSC制,后者用于PAL制。YUV411为每个像素都提取Y分量,而UV分量在水平方向上 每4个像素采样一次。YUV420并非V分量采样为0,而是跟YUV411相比,在水平方向上提高一倍色差采样频率,在垂直方向上以U/V间隔的方式减小一半色差采样

 

 

 

图像类型

本部分定义了三种解码图像:

——帧内解码图像(I 帧);

——前向帧间解码图像(P 帧);

——双向帧间解码图像(B 帧)。

 

图像间的顺序

 

如果视频序列中没有B帧,解码顺序与显示顺序相同。如果视频序列中包含B帧,解码顺序与显示顺序不同,解码图像输出显示前应进行图像重排序。图像重排序规则如下:

——当前解码图像是B 帧,输出由此B 帧解码的图像;

——当前解码图像是I 帧或P帧,如果存在前一个I 帧或P 帧的解码图像,输出前一个I 帧或P帧的解码图像。如果不存在前一个I帧或P 帧的解码图像,不输出任何解码图像;

——位流解码完成后,如果缓冲区中还有未输出的解码图像,则输出该图像。

下面举例说明图像重排序:I帧和P帧之间有两个B帧,两个连续的P帧之间也有两个B帧。用图像1I预测图像4P,用图像4P和1I预测图像2B和3B。解码顺序是1I,4P,2B,3B;显示顺序是1I,2B,3B,4P。

编码器输入顺序:

1 2 3 4 5 6 7 8 9 10 11 12 13

I B B P B B P B B I B B P

解码顺序:

1 4 2 3 7 5 6 10 8 9 13 11 12

I P B B P B B I B B P B B

解码器输出,即显示顺序:

1 2 3 4 5 6 7 8 9 10 11 12 13

I B B P B B P B B I B B P

 

I、P 与 B 帧间预测图示

 

发展历程

常用的音视频编解码方式

视讯编码标准发展

年份

标准

制定组织

解除版权保护
(DRM-free)

主要应用

1984

H.120

ITU-T

 

1990

H.261

ITU-T

视讯会议、视讯通话

1993

MPEG-1 第二部份

ISO/IEC

影音光碟(VCD)

1995

H.262/MPEG-2 第二部份

ISO/IEC、ITU-T

DVD影碟(DVD-Video)、蓝光(Blu-Ray)影碟、数位视讯广播(DVB)、SVCD

1996

H.263[6]

ITU-T

 

视讯会议、视讯通话、3G手机视讯(3GP)

1999

MPEG-4 第二部份

ISO/IEC

 

2003

H.264/MPEG-4 AVC[1]

ISO/IEC、ITU-T

蓝光(Blu-Ray)影碟、数位视讯广播(DVB)、iPod视讯、高画质DVD(HD DVD)

 

常见的编解码见下表,在以后会分类论述:

视频codec

ISO/IEC

MJPEG ·Motion JPEG 2000 · MPEG-1 · MPEG-2 (Part 2) ·MPEG-4 (Part 2/ASP ·Part 10/AVC) · HVC

ITU-T

H.120 ·H.261 ·H.262 · H.263 · H.264 · H.265

其它

AMV ·AVS · Bink · CineForm · Cinepak · Dirac · DV · Indeo · Microsoft Video 1 · OMS Video · Pixlet · RealVideo · RTVideo · SheerVideo · Smacker ·Sorenson Video & Sorenson Spark · Theora · VC-1 · VP3 · VP6 · VP7 · VP8 · WMV

音频codec

ISO/IECMPEG

MPEG-1 Layer III (MP3) ·MPEG-1 Layer II · MPEG-1 Layer I · AAC ·HE-AAC ·MPEG-4 ALS · MPEG-4 SLS · MPEG-4 DST

ITU-T

G.711 ·G.718 · G.719 · G.722 · G.722.1 · G.722.2 · G.723 · G.723.1· G.726 · G.728 · G.729 · G.729.1

其它

AC-3 ·AMR · AMR-WB · AMR-WB+ · Apple Lossless · ATRAC · DRA · DTS · FLAC ·GSM-HR ·GSM-FR ·GSM-EFR · iLBC · Monkey's Audio · TTA (True Audio) · MT9 · μ-law · Musepack · Nellymoser · OptimFROG · OSQ  · RealAudio · RTAudio  · SD2  · SHN · SILK · Siren · Speex · TwinVQ · Vorbis · WavPack · WMA

图像压缩

ISO/IEC/ITU-T

JPEG ·JPEG 2000 ·JPEG XR · lossless JPEG · JBIG · JBIG2 · PNG · WBMP

Others

APNG ·BMP ·DjVu ·EXR · GIF · ICER · ILBM · MNG · PCX · PGF · TGA · TIFF

媒体容器

通用

3GP ·ASF · AVI · Bink · BXF · DMF · DPX · EVO · FLV · GXF · M2TS · Matroska · MPEG-PS · MPEG-TS · MP4 · MXF  · Ogg · QuickTime  · RealMedia ·RIFF · Smacker · VOB

只用于音频

AIFF ·AU · WAV

 编码使用的技术:

1.   预测编码:

帧内预测(5种)  图17 8*8 亮度块帧内预测模式 intrapred

131138  132 133  134  130 132 133 133  132

 

帧间预测 运动估计 全搜索法(FS, Full Search)

 钻石搜索法(DS, Diamond Search) FastSubPelBlockMotionSearch_bid

运动插值  get_block_quarter  9.9.2.2 亮度样本插值过程

2.   变换编码: k-l变换,DCT/IDCT,  inv_transform_B8  9.7 反变换

 

锯齿形扫描:图26 88 逆块扫描方法1  图27 88 逆块扫描方法2

 

游程编码:在变换域中,量化后的系数用三个变量表示,即0的个数(称为游程),系数值和最后的位置。如非0系数已经处于最后的位置或其后均为0,则置为1,不然置为0,

经过锯齿形扫描后,得到输入系列:

15,0,0,-3,4,5,0,0,0,0,-7,0,0,0………

  则经过游程编码后值为:

(0,15,0),(2,-3,0),(0,4,0),(0,5,0),(4,-7,1)

 

3.   熵编码:  变长编码   Huffman编码

算术编码  H.264  avs

4.滤波

5.反量化

 1 2 3   4  5 6   7  8  9

 0 0  1   1  1 2   2  2  3

0  0   3  3  3 6  6   6  9

 

 

  实用知识:

1.   msight使用

2.   elecard 使用

3.   ffmpeg  源代码0.6.3 vs2005单步调试

4.   转换  vlc转换,media coder,格式工厂  mp4tools

·        关于暴风影音,迅雷看看。


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

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

相关文章

洛谷 2759 奇怪的函数

【题解】 取个对数然后二分即可。对于一个数x&#xff0c;x^x的位数就是(int)(lg(x)*x1). 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #include<cmath>5 #define LL long long6 #define rg register7 #define N 2000108 using name…

区块链技术怎么构架落地应用?

自从区块链技术火爆起来之后&#xff0c;越来越多的金融机构和金融科技公司宣布探索区块链在金融上的运用&#xff0c;国内区块链技术服务商跟随金融机构的脚步&#xff0c;一方面是基于以太坊智能合约作为底层架构&#xff0c;通过提供中间层工具及协议和应用层的身份验证、证…

JVM中GC Root对象有哪些?

众所周知&#xff0c;我们目前最常用的虚拟机hotspot使用可达性分析来进行垃圾回收&#xff0c;而可达性分析需要依赖GC Root。下面我就来介绍下可以作为GC Root的对象。 &#xff08;一&#xff09;虚拟机栈中引用的对象 虚拟机栈中的引用的对象可以作为GC Root。我们程序在虚…

IPv6 解说 ,与IPv4的同异

见&#xff1a;https://baike.baidu.com/item/IPv6/172297 IPv6 IPv6是Internet Protocol Version 6的缩写&#xff0c;其中Internet Protocol译为“互联网协议”。IPv6是IETF&#xff08;互联网工程任务组&#xff0c;Internet Engineering Task Force&#xff09;设计的用于替…

USACO Training Section 5.1 Fencing the Cows 圈奶牛(凸包)

夫约翰想要建造一个围栏用来围住他的奶牛&#xff0c;可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标&#xff0c;计算最短的能够围住这些点的围栏的长度。 输入 输入数据的第一行包括一个整数 N。N&#xff08;0 < N < 10,…

Linux各发行版本简介

Linux的发行版本可以大体分为两类&#xff0c;一类是商业公司维护的发行版本&#xff0c;一类是社区组织维护的发行版本&#xff0c;前者以著名的Redhat&#xff08;RHEL&#xff09;为代表&#xff0c;后者以Debian为代表。 1、Redhat&#xff0c;应该称为Redhat系列&#xff…

个推应用统计产品(个数)Android集成实践

2019独角兽企业重金招聘Python工程师标准>>> 前段时间&#xff0c;我们公司的产品又双叒叕给我们提了新需求&#xff0c;要求我们把APP相关的数据统计分析一下&#xff0c;这些指标包括但不限于应用每日的新增、活跃、留存率等等&#xff0c;最好每天都能提供数据报…

JVM中安全点safePoint有哪些?

安全点是jvm选来进行GC的线程中断点。线程在执行到安全点后询问GC标志位&#xff0c;若标志位标识将要进行GC&#xff0c;则程序主动中断挂起线程等待GC。安全点的选定基本上是根据"是否具有让程序长时间执行的特征"为标准进行选定的。目前会产生安全点的主要有&…

深入理解 PHP7 中全新的 zval 容器和引用计数机制

深入理解 PHP7 中全新的 zval 容器和引用计数机制 最近在查阅 PHP7 垃圾回收的资料的时候&#xff0c;网上的一些代码示例在本地环境下运行时出现了不同的结果&#xff0c;使我一度非常迷惑。 仔细一想不难发现问题所在&#xff1a;这些文章大多是 PHP5.x 时代的&#xff0c;而…

分布式系统的架构思路

见&#xff1a;http://www.cnblogs.com/chulung/p/5653135.html 一、前言 在计算机领域&#xff0c;当单机性能达到瓶颈时&#xff0c;有两种方式可以解决性能问题&#xff0c;一是堆硬件&#xff0c;进一步提升配置&#xff0c;二是分布式&#xff0c;水平扩展。当然&#xff…

狂赌智能手机 中国互联网巨头深陷零利润困局

编者按&#xff1a;智能手机正在中国普及&#xff0c;互联网企业趋之若鹜。然而&#xff0c;在苹果、三星共享智能手机市场99%利润的大背景下&#xff0c;中国互联网企业要从所剩无几的利润空间里分一杯羹&#xff0c;注定备受煎熬&#xff0c;前路迷茫。 互联网巨头纷纷进入智…

占用较多堆外内存的区域

&#xff08;1&#xff09;Director Memory 主要在nio中会使用&#xff0c;在内存不足时会抛出OOM或者OOM:Direct buffer memory。 &#xff08;2&#xff09;线程堆栈 为每个线程分配的栈空间&#xff0c;用于保存局部变量&#xff0c;执行程序代码。内存不足时可能抛出StackO…

Oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

在Oracle中select into from不可以使用&#xff0c;用create table select代替该功能&#xff01;&#xff01;&#xff01;在Sql Server中可以正常使用。1.INSERT INTO SELECT语句语句形式为&#xff1a;Insert into Table2(field1,field2,...) select value1,value2,... from…

帆软地址栏传参,实例

自动查询&#xff1a; http://help.finereport.com/finereport9.0/doc-view-409.html参数的种类与区别&#xff1a; http://help.finereport.com/doc-view-156基本参数传递&#xff08;视频&#xff09;&#xff1a; http://bbs.fanruan.com/lesson-14.html超级链接-传递多个值…

RMI 说明

见&#xff1a;https://baike.baidu.com/item/RMI/1786244?fraladdin RMI远程方法调用 相关概述 RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象&#xff0c;它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。简单地说&…

李善友:为什么外企人不敢创业

摘要&#xff1a;20年前&#xff0c;人们最骄傲的是进外企&#xff0c;创业意味着找不到工作。而现在相反&#xff0c;你要说自己在外企工作&#xff0c;会被人笑话&#xff0c;令人激动的事儿是去创业。 李善友&#xff1a;中欧创业中心主任创业学兼任教授、酷6网创始人 孙陶然…

JVM对象占用内存计算

大家都知道&#xff0c;jvm中对象实例存储在堆中&#xff0c;对象的引用存储在栈中&#xff0c;而对象的元数据(类型数据)存储在方法区。在我们进行内存优化的过程中经常需要了解每个对象占用的内存大小。接下来我将介绍对象占用内存大小的计算方式。 Java的对象模型 java是面…

绘图基础语法与常用参数

1 # -*- coding: utf-8 -*-2 3 ###############################################################################4 ####################### 正文代码 #######################5 #################################################################…

MyEclipse 皮肤、主题、背景色

第一步&#xff1a;打开myeclipse--->help--->install from site--->Add将路径粘贴在这里。等待安装颜色主题。https://raw.github.com/guari/eclipse-ui-theme/master/com.github.eclipseuitheme.themes.updatesite 第二步&#xff1a;http://eclipsecolorthemes.org…

RPC 远程过程调用协议

RPC&#xff08;Remote Procedure Call Protocol&#xff09;——远程过程调用协议&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。 RPC协议假定某些传输协议的存在&#xff0c;如TCP或UDP&#xff0c;为通信程序之间携…