天天看點

開源好代碼 音視訊

VirtualDub

一、簡介

開源好代碼 音視訊

圖1VirtualDub主界面

VirtualDub是一款開源的音視訊捕獲、處理軟體。VirtualDub也可稱為一款多媒體編輯軟體,因為它包含了多媒體輸入、編輯、處理、輸出等各個環節,但是作者并未将它定位為一款多媒體編輯軟體(參見官網:http://www.virtualdub.org/),事實上VirtualDub在音視訊編輯上的确沒有Adobe Premiere等軟體那麼專業。VirtualDub的特點是,在音視訊捕獲和處理上的功能非常強大,而且處理速度非常快。

VirtualDub的亮點是音視訊捕獲和處理,但其在多媒體編輯整個流程上的功能子產品是full的。下圖2是VirtualDub多媒體資料處理的一個流程。從圖2可以看出,視訊自上而下的處理流程包括:視訊回放或者捕獲,統計層,音視訊重同步,捕獲參數的調節,視訊處理,視訊顯示,視訊壓縮,流選擇,寫入磁盤等。音頻的處理流程也類似。

開源好代碼 音視訊

圖2VirtualDub處理流程

二、源碼擷取途徑

VirtualDub官網:

http://www.virtualdub.org

下載下傳位址:

http://virtualdub.sourceforge.net/

技術論壇:

http://forums.virtualdub.org/

三、使用指南

1.VirtualDub編譯指南

支援Windows平台

編譯工具ms visual studio 2005 + yasm.exe

從sourcforge下載下傳的VirtualDub可以在vs2005上順暢編譯。

四、典型應用

直接改造VirtualDub源碼工程的應用比較窄,而VirtualDub中高效率的音視訊處理和捕獲子產品可以有很廣泛的應用,下面就介紹VirtualDub音視訊處理和轉換具備的功能。

1. 視訊處理

VirtualDub中的視訊處理包括以下功能:

視訊處理子產品 描述
resize 調整大小
blur 模糊
Brightness/contrast 調整亮度和對比度
deinterlace 去隔行效應
emboss 浮雕
flip 翻轉
Convolution 變換
grayscale 求取灰階
HSV adjust 調整色調、飽和度、亮度
Invert 反色
logo 添加logo圖像
rotate 任意角度旋轉
sharpen 銳化
Smoother 平滑
threshold 根據門檻值轉換成黑白圖
warp 扭曲

2. 視訊色彩空間轉換

VirtualDub支援以下色彩空間之間的互轉:

RGB555,RGB565, RGB24, RGB32,

UYVY(4:2:2), YUY2(4:2:2), YV12(4:2:0), YV16(4:2:2),YVU9(4:1:0), Y8(灰階)

3. 音頻處理

VirtualDub中的音頻處理包括以下功能:

音頻處理子產品
Stereo split 分離一個聲道的資料
Gain 調整音強
Highpass 高通濾波
lowpass 低通濾波
mix 混音多路音頻
resample 調整采樣率
timstretch 調整音頻段的占用時長

五、相關源碼

在視訊處理方面,除了VirtualDub,avisynth也包含了功能非常全面的視訊處理濾鏡。Avisynth官方網址:http://www.avisynth.org/。後期還會具體介紹Avisynth工程及其應用。

How to Compile mpc

一、測試環境

所用mpc版本:2006.12.5 exported from svn

OS: windows xp sp2

Visual studio 2005 professional (VC8)

二、安裝所需的SDK

1、DirectX 9 SDK

測試時所用的版本為:

DirectX SDK9.0c October 2006 

+DirectX 

SDK

Extras2005,2 版

DirectX SDK 9.0c October2006 

版下載下傳位址:

http://www.microsoft.com/downloads/details.aspx?FamilyId=D625324C-59B4-4951-849E-640B508DC442&displaylang=en

DirectX 

Extras2005,2 版 下載下傳位址

http://download.microsoft.com/download/d/9/1/d91c44b9-fbac-4e8e-bee1-4a75777923ec/dxsdk_feb2005_extras.exe

NOTE:DirectX 

Extras包含directshow sdk,具體内容可參考:

http://blog.csdn.net/sunshine1314/archive/2006/12/13/1440797.aspx

2、Windows Media Format SDK 9

下載下傳位址:

http://download.microsoft.com/download/3/0/4/30451651-9e47-4313-89a3-5bb1db003c26/WMFormatSDK.exe

三、編譯環境設定

1、DirectX 9BaseClasses編譯生成

<DXSDK>\Samples\C++\DirectShow\BaseClasses

VS2005生成:

Debug_Unicode, Release_Unicode 兩個版本。

為了正确編譯,需修改以下檔案:

(a) ctlutil.h

D:\DXSDK\Samples\C++\DirectShow\BaseClasses\ctlutil.h

修改如下:

  //operator=(LONG); //modified by peterlee

   COARefTime& operator=(LONG);

(b) wxdebug.cpp

d:\DXSDK\Samples\C++\DirectShow\BaseClasses\wxdebug.cpp

       //static g_dwLastRefresh = 0;

       static DWORD g_dwLastRefresh = 0; //lspmodify

(c) winutil.cpp

d:\DXSDK\Samples\C++\DirectShow\BaseClasses\winutil.cpp

   UINT Count; //lspmodify

   for (Count =0;Count < Result;Count++) { //lspmodify

(d) outputq.cpp

d:\DXSDK\Samples\C++\DirectShow\BaseClasses\outputq.cpp

long iDone; //lspmodify

for (iDone = 0; //lspmodify

2、vs2005環境設定

在vs2005下,選擇菜單 Tools -> Options,左欄選擇Projects andSolutions -> VC++ Directories

- include:

<DXSDK>\Include

<DXSDK>\Samples\C++\Common\Include

<WMSDK>\WMFSDK9\include

...

- lib:

<DXSDK>\lib

<DXSDK>\Samples\C++\Common\Src

<DXSDK>\Samples\C++\DirectShow\BaseClasses\Debug_Unicode

<DXSDK>\Samples\C++\DirectShow\BaseClasses\Release_Unicode

<WMSDK>\WMFSDK9\lib

2、頭檔案修改

(a) winnt.h

d:\Program Files\Microsoft Visual Studio8\VC\PlatformSDK\include\winnt.h

在該檔案頭部添加:

#define POINTER_64 __ptr64 

// add by peterlee

(b) vmr9.h

D:\DXSDK\Include\vmr9.h

      MixerPref9_RenderTargetRGB     = 0x1000,

      MixerPref9_RenderTargetYUV     = 0x00002000, //lsp add

四、編譯步驟

1. deccs

2. dsutil

3. ui

4. subpic

5. subtitles

6. filters (for mpc only build those configurations whichoutput a lib, the rest outputs stand-alone filters)

7. apps\mplayerc

需要修改的内容:

1、subtitles

guliverkli\src\subtitles\CCDecoder.cpp

'','!','"','#','$','%','&','\'','(',')','?','+',',','-','.','/',//lsp

将 '? 全局替換成 '?' 。

2、filters

(a) mp4Splitter project

将guliverkli\src\filters\parser\mp4splitter\AP4\Update\v0.6.3\Bento4_0.6.3-001.7z解壓後,将source檔案夾拷貝到guliverkli\src\filters\parser\mp4splitter\AP4\source

(b) FLVSplitter.h

guliverkli\src\filters\parser\FLVSplitter\FLVSplitter.h

//#include "VP62.h" // comment this out if you don't haveVP62.cpp/h

同時将VP62.cpp從工程中删除。

(b) Icons.h

d:\我的開發\mpcplus\guliverkli\include\qt\Icons.h

   kAppleExtrasFolderIcon     = FOUR_CHAR_CODE('aex?), //lspmodify

3、apps\mplayerc

(a) mplayerc project

Link input選項:

将RadGtSplitterRU.lib删除,

增加:

ResizableLibRU.lib

CmdUIRU.lib

decssRU.lib

TreePropSheetRU.lib

sizecbarRU.lib

(b)

将<DXSDK>\Samples\C++\DirectShow\BaseClasses\Release_Unicode下STRMBASE.lib拷貝一份為strmbaseRU.lib

最後,若一切順利的話,将會在mplayerc工程目錄下生成mplayerc.exe檔案,運作該檔案即可播放各類影音檔案了(假設機器上已經安裝過相應的解碼filter了)。

後記:

綜上觀之,MPC的編譯過程中對很多SDK源碼檔案進行了小改動,其中最大的症結在于筆者所安裝的directshowsdk比較老(但是筆者沒有找到比February 2005更加新的),對vs2005的支援不好,因為vs2005和vc6,vs2003相比,對c/c++代碼的要求比較嚴格。

the original MPC project:

http://sourceforge.net/projects/guliverkli/

2006.5月後,mpc工程基本上就停止更新了。

注:mpc全稱meida playerclassic,是一個萬能播放器核心引擎,目前流行的萬能播放器,如暴風影音,kmp,klc等,或多或少都采用mpc的核心。mpc是gabest建立和主力維護開發的,gabest同時是著名字幕插件vobsub的作者。

sourceforege上最新發現的mpc active工程

http://sourceforge.net/projects/guliverkli2/

該工程是基于最新的原mpc工程(應該是2006.5月版),主要是對mpc的程式問題進行修補,功能上的增加比較少。主要維護者:clsid2

Mpc是一個非常流行的開源播放器,國外的K-LiteCodec,國内的幻想影音、終極解碼、完美解碼等播放工具都捆綁了mpc播放器程式。另外,暴風、kmplayer等播放器程式也都或多或少地參考及使用了mpc中的功能和代碼。Mpc開源工程開始于2003年,是一款較早的開源萬能播放器程式,基于directshow架構,隻要有可用的解碼filter,mpc可以支援任意的媒體格式。Mpc的作者gabest,同時也是著名的外挂字幕插件vobsub的作者。

遺憾的是Mpc工程在2006年04月停止了更新,同時所幸的是有兩個開源工程在mpc的基礎上繼續更新,一個是mpc2,主要是clsid2在維護,主要是修正mpc原工程中的一些bug,不添加新功能;另一個mpc-homecinema比較強了,在mpc的基礎上,添加了Antitearing,抖動測試,字幕同步,ShuttlePN31遠端控制支援,OSD螢幕顯示,vistaReady等不少實用的功能。

開源好代碼 音視訊

Mpc主界面截圖

1. mpc原工程gabest

https://guliverkli.svn.sourceforge.net/svnroot/guliverkli

gabest 2006.04停止更新

2.mpc2(clsid2)

https://guliverkli2.svn.sourceforge.net/svnroot/guliverkli2

3.mpc-hc

mpc-home cinema Registered : 2006-06-21 12:10

http://tibrium.neuf.fr/

http://sourceforge.net/project/showfiles.php?group_id=170561

https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk

OS: windows平台

編譯平台:vs2003, vs2005 orvs2008

另外需要安裝directX9.0sdk 及windows media formatsdk9

關于mpc的具體編譯方法參見《How to Compilempc》:

http://blog.csdn.net/sunshine1314/archive/2006/12/13/1442103.aspx

二、典型應用

Mpc最常見的應用是:在windows平台上建構多格式支援的媒體播放程式。另外,用mpc建構針對自定義格式的播放程式也是很方面的。

另外,mpc工程中除了包含播放器主程式,還包含了不少開源的filter,特别是splitterfilter,如mp3, mpeg, mp4, mov, flv,real等splitter。利用mpc的工程有很多功能完善的filter基類,對于建構自主的splitter,decoder等filter非常友善。

三、更多資料

如果要在非windows平台上建構多格式支援的媒體播放程式,可以使用另外兩個開源工程,vlc和mplayer。具體内容見本站的相應文章。

MediaInfo 用來分析視訊和音頻檔案的編碼和内容資訊。

MediaInfo可以獲得多媒體檔案的哪些資訊?

内容資訊:标題,作者,專輯名,音軌号,日期,總時間……

視訊:編碼器,長寬比,幀頻率,比特率……  

音頻:編碼器,采樣率,聲道數,語言,比特率……  

文本:語言和字幕  

段落:段落數,清單  

MediaInfo支援哪些檔案格式?

視訊:MKV, OGM, AVI,DivX, WMV, QuickTime, Real, MPEG-1, MPEG-2, MPEG-4, DVD (VOB)...(編碼器:DivX, XviD,MSMPEG4, ASP, H.264, AVC...)  

音頻:OGG, MP3, WAV,RA, AC3, DTS, AAC, M4A, AU, AIFF...  

字幕:SRT, SSA, ASS,SAMI...  

MediaInfo有哪些主要功能和特點?

支援衆多視訊和音頻檔案格式 

多種檢視方式:文本,表格,樹形圖,網頁……  

自定義檢視方式  

資訊導出:文本,CSV,HTML……  

三種釋出版本:圖形界面,指令行,DLL(動态連結庫)  

與Windows資料總管整合:拖放,右鍵菜單  

國際化:有多種界面語言供選擇 (軟體界面)輕松實作本地化 (需要志願者翻譯語言檔案)

開源好代碼 音視訊

MediaInfo主界面截圖

MediaInfo英文首頁:

http://mediainfo.sourceforge.net/

MediaInfo中文首頁:

http://mediainfo.sourceforge.net/zh-CN

MediaInfo開發者首頁:

http://sourceforge.net/projects/mediainfo

源碼svn下載下傳位址:

https://mediainfo.svn.sourceforge.net/svnroot/mediainfo

1. MediaInfo編譯指南

支援Windows和Linux平台

推薦使用ms visual studio2005。

  • MSVC : Microsoft Visual C++ 9 (aka 2005) (for Visual Studio 7(aka 2002) or 8 (aka 2003), you can edit .sln and .xxproj to becompatible. - .sln : "...Format Version 9.00" to 7.00 - .xxproj :"Version="8.00" or "Version="7.10" to 7.00 This is not alwaystested, but you should easily be able to adapt them for yourcompiler)
  • BCB : Borland C++ Builder 6
  • DevCpp : Dev-C++ (Dev-Cpp is an IDE for MinGW) (I am working onthis release, not stable)
  • MinGW : MinGW on Windows (I am working on this release, notstable)
  • GCC : Linux GCC (I am working on this release, notstable)

2.MediaInfo SDK

MediaInfo除了有GUI和CMD兩種使用方法,還可以在程式中使用MediaInfo庫。

MediaInfo庫有靜态連結和動态連結兩種方式,MediaInfoSDK的相關官方資料如下:

  • Read this first (supported languages, versioning,conventions)
  • Different ways of using the library
  • How to begin quickly with MediaInfo
  • More information about the programminginterface
  • The Doxygen documentation (full C++ APIinterface)

MediaInfo的典型應用是使用其DLL庫,用來提取媒體檔案的資訊。其特點是,支援的格式全、提取的資訊豐富。當然,MediaInfo本身是開源的,其DLL庫可以進行二次開發,可以擴充自定義格式,增加自定義功能。對于工程使用,MediaInfo子產品和其它功能可以獨立,使用上非常便捷,是一個值得推薦的開源工程。