視頻編解碼概述

??????????????????????????????????????????????????????????????????????????????????? 視頻編解碼概述

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

MJPEGMotion JPEG 2000 MPEG-1 MPEG-2 (Part 2)MPEG-4 (Part 2/ASPPart 10/AVC) HVC

ITU-T

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

其它

AMVAVS Bink CineForm Cinepak Dirac DV Indeo Microsoft Video 1 · OMS Video Pixlet RealVideo RTVideo SheerVideo SmackerSorenson 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 AACHE-AACMPEG-4 ALS MPEG-4 SLS MPEG-4 DST

ITU-T

G.711G.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-3AMR AMR-WB AMR-WB+ Apple Lossless ATRAC DRA DTS FLACGSM-HRGSM-FRGSM-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

JPEGJPEG 2000JPEG XR lossless JPEG JBIG JBIG2 PNG WBMP

Others

APNGBMPDjVuEXR GIF ICER ILBM MNG PCX PGF TGA TIFF

媒體容器

通用

3GPASF AVI Bink BXF DMF DPX EVO FLV GXF M2TS · Matroska MPEG-PS MPEG-TS MP4 MXF Ogg QuickTime? · RealMediaRIFF Smacker VOB

只用于音頻

AIFFAU WAV

?編碼使用的技術:

1.???預測編碼:

幀內預測(5種)? 圖17 8?*8 亮度塊幀內預測模式 intrapred

131138? 132?133? 134? 130 132?133 133? 132

?

n? 幀間預測?運動估計 全搜索法(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.pswp.cn/news/451005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451005.shtml
英文地址,請注明出處:http://en.pswp.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;為通信程序之間攜…