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子產品和其它功能可以獨立,使用上非常便捷,是一個值得推薦的開源工程。