国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

MPEG-2音視頻編輯軟件的實現(xiàn)方案

2009-08-13 06:18陳志峰田裕鵬王珊珊
現(xiàn)代電子技術 2009年10期
關鍵詞:宏塊音視頻字節(jié)

陳志峰 田裕鵬 王珊珊

摘 要:MPEG-2文件標準出現(xiàn)得比較早,MPEG-2作為DVD標準,現(xiàn)存的許多視頻資源中就保留了很多這種格式的文件。如何對現(xiàn)有資源文件進行整理再編輯,成為一個現(xiàn)實應用中常見的問題。在此提出兩種針對MPEG-2文件的剪輯方案,分別基于MPEG-2格式標準字節(jié)流分析和DirectShow的DES技術兩方面說明了視頻文件的編輯方法,并從上述兩方面著手,既指出了各自的實現(xiàn)細節(jié),又將這兩種方法進行比較,分析它們各自的優(yōu)缺點,最后指出DirectShow技術在音視頻編輯應用方面有它獨到的優(yōu)勢。綜合當前主流的音視頻編輯軟件實現(xiàn)方案,為音視頻編輯應用指出實踐的方法。

關鍵詞:MPEG-2;視頻編輯;Directshow;DES;時間線

中圖分類號:TP311文獻標識碼:A

文章編號:1004-373X(2009)10-100-04

Implementation of MPEG-2 Audio and Video Edit Software

CHEN Zhifeng,TIAN Yupeng,WANG Shanshan

(College of Information Science and Technology,Nanjing University of Aeronautics and Astronautics,Nanjing,210016,China)

Abstract:MPEG-2 format appears much more earlier.MPEG-2 is used as DVD standard and many media files use this format.How to edit these resources becomes a common problem.This article lists two ways to edit MPEG-2 format files:one is based on analyzing MPEG-2 file format through packet stream,and the other is based on directshow′s DES technology.This article first points out some details of each way,and then compares them,points out each characteristic,at last conclude that directshow technology has unique advantage.This article combines common ways of implementation of audio and video edit software,and shows a practice way to it.

Keywords:MPEG-2;video edit;Directshow;DES;timeline

MPEG是運動圖像專家組(Moving Picture Experts Group)的簡稱,其任務是制定世界通用的視音頻編碼標準。MPEG組織于1994年推出MPEG-2壓縮標準,用以實現(xiàn)視/音頻服務與應用互操作的可能性。MPEG-2標準是針對標準數(shù)字電視和高清晰度電視在各種應用下的壓縮方案和系統(tǒng)層的詳細規(guī)定,標準的正式規(guī)范定義在ISO/IEC13818中。MPEG-2特別適用于廣播級數(shù)字電視的編碼和傳送,被認定為SDTV和HDTV的編碼標準。

MPEG-2圖像壓縮的原理是利用圖像中的兩種特性:空間相關性和時間相關性。這兩種相關性使得圖像中存在大量的冗余信息。通過去除冗余信息,只保留少量非相關信息進行傳輸,可以大大節(jié)省傳輸頻帶,而接收方利用這些非相關信息,按照一定解碼算法,可以在保證一定的圖像質(zhì)量的前提下重建原始圖像。

1 MPEG-2編碼方法

MPEG-2視頻流可分為視頻序列層、圖像組層、圖像層、宏塊條層、宏塊層和像塊層共6個層次。各層之間的作用與關系如下:

(1) 視頻序列層(Sequence):一系列圖像組構成一個視頻序列。包含圖像尺寸、寬高比、圖像速率等信息。

(2) 圖像組層(GOP):由相互關聯(lián)的一組I,B,P幀組成,I幀為第一幀。GOP頭包括時間信息。

(3) 圖像層(Picture):一系列像條可以構成一幅圖像,圖像分為I,B,P三類,包括圖像編碼類型和時間參考信息。

(4) 宏塊條層(Slice):一連串的宏塊構成一個宏塊條,包括一定數(shù)量的宏塊,其順序與掃描順序一致。

(5) 宏塊層(MacroBlock):在4∶2∶2取樣中,一個宏塊由4個亮度像塊,2個Cr像塊和2個Cb像塊構成;另外還有4∶2∶0,4∶4∶4的取樣方式。MPEG-2定義3種宏塊結構,代表構成一個宏塊的亮點像塊和色差像塊的數(shù)量關系。

(6) 像塊層(Block):由8×8個像素點構成的DCT變化基本單元。

MPEG-2的編碼圖像被分為三類,分別稱為I幀,P幀和B幀。I幀圖像采用幀內(nèi)編碼方式,只利用單幀圖像內(nèi)的空間相關性,而沒有利用連續(xù)幀之間的時間相關性。P幀和B幀圖像采用幀間編碼方式,同時利用了空間和時間上的相關性。P幀圖像只采用前向時間預測,可以提高壓縮效率和圖像質(zhì)量。P幀圖像中可以包含幀內(nèi)編碼的部分,即P幀中的每一個宏塊可以是前向預測,也可以是幀內(nèi)編碼。B幀圖像采用雙向時間預測,可以大大提高壓縮倍數(shù)。

2 基于MPEG-2視頻流的剪輯方案

2.1 MPEG-2視頻流的構成

MPEG-2視頻流分為程序流和傳輸流兩種編碼方式。通常用于存儲的視頻文件都是由程序流構成的。程序流由組首部、系統(tǒng)首部和PES分組構成,程序流的構成如圖1所示。

組以一個32位(0x00-00-01-BA)碼字開始。組首部包含系統(tǒng)參考時的(SCR)數(shù)據(jù),表明了程序流中最后一個解碼單元到達解碼器的預定時間。系統(tǒng)首部僅存在于第一個圖像組中。PES分組由分組首部與分組數(shù)據(jù)組成。分組的頭部包含有分組長度、時間戳PTS,DTS等關鍵信息。

2.2 剪切點的選擇

一個視頻序列由一個或多個圖像組連接而成。一個圖像組內(nèi)的編碼序列可能是 I1 B2 B3 P4 B5 B6 P7 B8 B9 I10,而輸出的解碼序列是I1 P4 B2 B3 P7 B5 B6 I10 B8 B9。因此,若當前選取的剪切點在一個圖像組內(nèi)部,則牽涉到源視頻序列的解碼再編碼過程。一個簡便的方法是將剪切點的起始位置移至一個圖像組的起始處,也就是尋找一個I幀作為程序的切入點。因此一對起終點的選擇方法如下:

(1) 從當前文件之處讀取4個字節(jié),與圖組頭關鍵字group_start_code(0x00-00-01-b3)或序列頭關鍵字(0x00-00-01-ba)進行比較,若相同,則記為合適的剪切點。

(2) 若不相同且當前點為剪切的起點,則從文件中向上讀取一個字節(jié),重復(1)的過程,直到找到一個合適的切入點。

(3) 若不相同且當前點為剪切的終點,則從文件中向下讀取一個字節(jié),重復(1)的過程,直到找到一個合適的切入點。

經(jīng)過如上的過程,就能夠找到一系列的起終點,使得在每一對起終點的區(qū)間內(nèi)包含完整的圖像信息,可以獨立地從現(xiàn)有幀序列中得到所有的視頻信息。避免了因幀之間存在依賴關系,導致圖像不能正確解碼而生成的馬賽克與拖幀現(xiàn)象。

2.3 時間戳的修正

得到圖像的信息后,由于已經(jīng)將不需要的圖像信息丟棄,剪輯下來的圖像信息已經(jīng)不能用原有的時間標記回放,所以要修正保留下來的圖像的時間戳。

PTS,DTS,SCR被用于解碼器中的同步操作。其中PTS(Presentation Timestamp)是一個33位的字節(jié)流。表明此分組中第一個訪問單元在系統(tǒng)目標解碼器中的預定顯示時間;DTS(Decoding Time Stamp)也是一個33位的字節(jié)流,表示在分組中開始的第一個訪問單元預計在系統(tǒng)目標解碼器中的解碼時間;SCR(System Clock Reference)也是一個33位的字節(jié)流,表示系統(tǒng)目標解碼器SCR域最后字節(jié)到達所需要的時間,編碼器用數(shù)據(jù)碼率和90 kHz的時鐘頻率把SCR字節(jié)域轉(zhuǎn)換為SCR值。

將剪切前視頻流首部的時間標志(SCR0,PTS0,DTS0)提取出來,替換剪切后第一段文件相對應的數(shù)據(jù),依次修改該段文件中的所有SCR,PTS,DTS,并記下最后一組SCR1,PTS1,DTS1,將它們與SCR0,PTS0,DTS0對應相加,作為剪切后第二段文件的起始SCR,PTS,DTS。重復此過程,直到修改完所有的時間戳標記位。

最后,先將源文件的第一個分組中的系統(tǒng)首部等相關信息提取出來,拼接到剪切后的文件頭部,再給剪切后的文件尾加上結束碼字(0x00-00-01-b9)。

經(jīng)過以上的過程,一段MPEG-2文件的剪切過程完成。

3 基于DirectShow技術的剪輯方案

3.1 DirectShow簡介

DirectX軟件開發(fā)包是微軟公司提供的在Windows操作平臺上開發(fā)高性能圖形、聲音、輸入、輸出和網(wǎng)絡游戲的一套編程接口。DirectX被定義為“硬件設備無關性”,可以用與設備無關的方法提供設備相關的高性能。

DirectShow是DirectX中的一套組件,用來處理各種格式媒體文件的回放、音視頻采集等多媒體應用。DirectShow的設計初衷是盡量要讓應用程序開發(fā)人員從復雜的數(shù)據(jù)傳輸、硬件差異、同步性等工作中解脫出來,總體應用框架和底層工作由DirectShow來完成。DirectShow的構成如圖2所示。

3.2 非線性編輯DES

DES(DirectShow Editing Services)是一套基于DirectShow核心框架的編程接口,它的出現(xiàn)簡化了視頻編輯任務。DES的系統(tǒng)結構如圖3所示。

基于時間線的模型如圖4所示。

3.3 實現(xiàn)方法

運用DirectShow的DES方法,實現(xiàn)方案如下:

(1) 首先選定待剪切文件上的起點與終點。以時間為標記,記為startpoint,endpoint。

(2) 為目標文件生成一個時間線對象(TimeLine):

IAMTimeline*pTL=NULL;

CoCreatelnstance(CLSID_IAMTimeline,NULL,CLSCTX_INPROC_SERVER,IID_IAMTimeline,(void* *)&pTL;);

接下來要將時間線上的視頻組和音頻組的信息填寫完整。

(3) 為時間線對像生成一個組,以視頻組為例,首先生成一個視頻組(video group):

IAMTimelineGroup *pVideoGroup=NULL;

IAMTimelineObj *pVideoGroupObj=NULL;

pTL->CreateEmptyNode(&pVideoGroupObj;,TIMELINE_MAJOR_TYPE_GROUP);

pGroupObj->Querylnterface(IID_IAMTimelineGroup,(void **)&pVideoGroup;);

組是由軌道組成的,所以接下來要為視頻組添加軌道(Track):

pVideoComp->VTracklnsBefore(pVideoTrackObj,-1);

pVideoTrackObj->Querylnterface(IID_IAMTimelineTrack,(void **)&pVideoTrack;)

(4) 為軌道添加視頻時間點和文件信息:

首先,設置時間線上的時間,這個時間是源文件中的時間點在剪切后的文件中出現(xiàn)的時間:

pVideoSrcObj->SetStartStop(startpoint1,endpoint1);

接下來要設置源媒體的時間,這個時間就是想得到的源媒體文件中的視頻信息出現(xiàn)的時間:

pVideoSrcObj->SetMediaTimes(startpoint.endpoint);

還要設置源媒體文件的名字:

pVideoSrcObj->SetMediaName(源媒體文件名)

將信息加入的軌道中:

pVideoTrack->SrcAdd(pVideoSrcObj);

(5) 把時間線對象放入DirectShow回放控制引擎中:

IRenderEngine *pRenderEngine = NULL;

CoCreatelnstance(CLSID_RenderEngine,NULL,CLSCTX_INPROC_SERVER,IID_IRenderEngine,(void**)&pRenderEngine;);

pRender->SetTimelineObject(pTL);

pRenderEngine->ConnectFrontEnd( );

(6) 為時間線對象指定輸出信息的壓縮方法。DirectShow默認只支持AVI格式的輸出,因此,要指定一個自己定義的輸出格式,這里選擇一個MPEG-2的壓縮器:

IGraphBuilder *pGraph=NULL;

IMediaControl *pControl=NULL;

pRender->GetFilterGraph(&pGraph;);

AddFilterByCLSID(pGraph,LSID_VIDEO_ENCODER,L"MPE-2",&pVideoEncoder;);

long NumGroups;

pTL->GetGroupCount(&NumGroups;);

IPin *pPin;

for (i=0;i

if (pRenderEngine->GetGroupOutputPin(i,&pPin;)==S_OK){

ConnectFilters(pGraph,pPin,pVideoEncoder,

TRUE);

}

}

(7) 為時間線對象指定輸出文件:

AddFilterByCLSID(pGraph,LSID_VIDEO_WRITER,Writer' ',&pfilewriter;);

ConnectFilters(pGraph,pVideoEncoder,pMux,TRUE);

ConnectFilters(pGraph,pMux,pfilewriter,TRUE);

IFileSinkFilter *pSin= 0;

pfilewriter->QueryInterface(IID_IFileSinkFilter,(void**)&pSink;);

pSink->SetFileName(剪切后的文件名,NULL);

(8) 啟動回放功能:

pGraph->QueryInterface(IID_IMediaControl,(void **)&pControl;);

pControl->Run();

回放時,DirectShow會把輸出的數(shù)據(jù)以MPEG-2的形式輸出到指定的文件中去。

最后,當時間線對象的數(shù)據(jù)流回放完畢后,所生成的就是剪輯完畢的文件了。

4 結 語

通過對比上述兩種實現(xiàn)方案,可以得出如下結論:

(1) 基于解析MPEG-2文件視頻文件的剪輯方案需要對MPEG-2格式內(nèi)容進行深入的了解,程序的設計與實現(xiàn)的復雜度很高,而通過DirectShow技術則大大簡化了這種復雜性。

(2) DirectShow本身的開放性框架使得它可以處理更多更復雜的媒體內(nèi)容,通過給它接上不同的目標輸出控制單元,可以處理更多格式類型媒體文件。

(3) 通過DirectShow框架,設計人員可以從繁雜的背景知識的學習中解脫出來,從而更加專注于視頻的應用處理中,這無疑使它更容易為應用人員所掌握。

參考文獻

[1]陸其明.DirectShow開發(fā)指南[M].北京:清華大學出版社,2003.

[2]Microsoft Corporation.DirectX 9.0 Programmerps Reference[CP/DK].2002.

[3]余兆明.MPEG標準及其應用[M].北京:北京郵電大學出版社,2002.

[4]陸其明.DirectShow 實務精選[M].北京:科學出版社,2004.

[5]張勇,羅靜.基于DirectShow的多媒體文件音視頻的重新壓縮[J].現(xiàn)代電視技術,2005(5):87-91.

[6]楊欣穎.非線性視頻編輯技術在多媒體課件制作中的處理與應用[J].文教資料,2006(21):183-184.

[7]胡春華,曹元大,張磊.基于DirectShow的視頻流媒體存儲系統(tǒng)的設計與實現(xiàn)[J].計算機工程與設計,2003(11):31-33.

[8]胡海峰,陳喜,張文淵,等.DirectShow非線性音頻-視頻編輯應用的實現(xiàn)[J].微計算機應用,2004,25(1):58-63.

[9]徐燃,潘接林.DirectShow技術在音頻格式轉(zhuǎn)換及音視頻分離方面的應用[J].計算機應用,2005(Z1):269-272.

[10]豐偉偉.DirectShow播放視頻和MP3[J].電腦編程技巧與維護,2006(12):15-17.

猜你喜歡
宏塊音視頻字節(jié)
No.8 字節(jié)跳動將推出獨立出口電商APP
3KB深圳市一禾音視頻科技有限公司
No.10 “字節(jié)跳動手機”要來了?
WIFI音視頻信號傳輸?shù)年P鍵問題探究
簡談MC7字節(jié)碼
高速公路整合移動音視頻系統(tǒng)應用
基于選擇特征宏塊的快速視頻穩(wěn)像
Roland專業(yè)音視頻新技術研討會在上海召開
基于宏塊合并的H.264模式選擇算法
一種適合硬件實現(xiàn)的低復雜度MAD預測算法
广西| 南宫市| 休宁县| 睢宁县| 边坝县| 马山县| 万年县| 洛南县| 土默特右旗| 扬州市| 英山县| 新津县| 西乌| 平阳县| 从化市| 石门县| 泰兴市| 棋牌| 景东| 环江| 夏河县| 城市| 开江县| 阿城市| 阳原县| 茂名市| 桓仁| 内黄县| 仙游县| 南江县| 慈溪市| 都匀市| 南陵县| 长寿区| 汉沽区| 昭觉县| 南华县| 措勤县| 南充市| 林周县| 自贡市|