??????????????????????????????????????????????????????????????????????????????????? 視頻編解碼概述
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 幀間預測圖示
?
發展歷程:
常用的音視頻編解碼方式
視訊編碼標準發展 | ||||
年份 | 標準 | 制定組織 | 解除版權保護 | 主要應用 |
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
?
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
·????????關于暴風影音,迅雷看看。