开源好代码 音视频
VirtualDub
?一、簡(jiǎn)介
?
?
?
圖1VirtualDub主界面
VirtualDub是一款開(kāi)源的音視頻捕獲、處理軟件。VirtualDub也可稱為一款多媒體編輯軟件,因?yàn)樗硕嗝襟w輸入、編輯、處理、輸出等各個(gè)環(huán)節(jié),但是作者并未將它定位為一款多媒體編輯軟件(參見(jiàn)官網(wǎng):http://www.virtualdub.org/),事實(shí)上VirtualDub在音視頻編輯上的確沒(méi)有Adobe Premiere等軟件那么專業(yè)。VirtualDub的特點(diǎn)是,在音視頻捕獲和處理上的功能非常強(qiáng)大,而且處理速度非常快。
VirtualDub的亮點(diǎn)是音視頻捕獲和處理,但其在多媒體編輯整個(gè)流程上的功能模塊是full的。下圖2是VirtualDub多媒體數(shù)據(jù)處理的一個(gè)流程。從圖2可以看出,視頻自上而下的處理流程包括:視頻回放或者捕獲,統(tǒng)計(jì)層,音視頻重同步,捕獲參數(shù)的調(diào)節(jié),視頻處理,視頻顯示,視頻壓縮,流選擇,寫入磁盤等。音頻的處理流程也類似。
?
圖2VirtualDub處理流程
?
二、源碼獲取途徑
VirtualDub官網(wǎng):
http://www.virtualdub.org
下載地址:
http://virtualdub.sourceforge.net/
技術(shù)論壇:
http://forums.virtualdub.org/
?
三、使用指南
1.VirtualDub編譯指南
支持Windows平臺(tái)
編譯工具ms visual studio 2005 + yasm.exe
從sourcforge下載的VirtualDub可以在vs2005上順暢編譯。
?
四、典型應(yīng)用
直接改造VirtualDub源碼工程的應(yīng)用比較窄,而VirtualDub中高效率的音視頻處理和捕獲模塊可以有很廣泛的應(yīng)用,下面就介紹VirtualDub音視頻處理和轉(zhuǎn)換具備的功能。
1. 視頻處理
VirtualDub中的視頻處理包括以下功能:
?
| 視頻處理模塊 | 描述 |
| resize | 調(diào)整大小 |
| blur | 模糊 |
| Brightness/contrast | 調(diào)整亮度和對(duì)比度 |
| deinterlace | 去隔行效應(yīng) |
| emboss | 浮雕 |
| flip | 翻轉(zhuǎn) |
| Convolution | 變換 |
| grayscale | 求取灰度 |
| HSV adjust | 調(diào)整色調(diào)、飽和度、亮度 |
| Invert | 反色 |
| logo | 添加logo圖像 |
| rotate | 任意角度旋轉(zhuǎn) |
| sharpen | 銳化 |
| Smoother | 平滑 |
| threshold | 根據(jù)閾值轉(zhuǎn)換成黑白圖 |
| warp | 扭曲 |
?
?
2. 視頻色彩空間轉(zhuǎn)換
VirtualDub支持以下色彩空間之間的互轉(zhuǎn):
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 | 分離一個(gè)聲道的數(shù)據(jù) |
| Gain | 調(diào)整音強(qiáng) |
| Highpass | 高通濾波 |
| lowpass | 低通濾波 |
| mix | 混音多路音頻 |
| resample | 調(diào)整采樣率 |
| timstretch | 調(diào)整音頻段的占用時(shí)長(zhǎng) |
?
?
五、相關(guān)源碼
在視頻處理方面,除了VirtualDub,avisynth也包含了功能非常全面的視頻處理濾鏡。Avisynth官方網(wǎng)址:http://www.avisynth.org/。后期還會(huì)具體介紹Avisynth工程及其應(yīng)用。
How?to?Compile?mpc
一、測(cè)試環(huán)境 所用mpc版本:2006.12.5 exported from svn OS: windows xp sp2 Visual studio 2005 professional (VC8) 二、安裝所需的SDK 1、DirectX 9 SDK 測(cè)試時(shí)所用的版本為: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?SDK Extras2005,2 版 下載地址http://download.microsoft.com/download/d/9/1/d91c44b9-fbac-4e8e-bee1-4a75777923ec/dxsdk_feb2005_extras.exe NOTE:DirectX?SDK Extras包含directshow sdk,具體內(nèi)容可參考: 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 三、編譯環(huán)境設(shè)置 1、DirectX 9BaseClasses編譯生成 <DXSDK>\Samples\C++\DirectShow\BaseClasses 用VS2005生成: Debug_Unicode, Release_Unicode 兩個(gè)版本。 為了正確編譯,需修改以下文件: (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環(huán)境設(shè)置 在vs2005下,選擇菜單 Tools -> Options,左欄選擇Projects andSolutions -> VC++ Directories - include: <DXSDK>\Include <DXSDK>\Samples\C++\Common\Include <DXSDK>\Samples\C++\DirectShow\BaseClasses <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 需要修改的內(nèi)容: 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 同時(shí)將VP62.cpp從工程中刪除。 (b) Icons.h d:\我的開(kāi)發(fā)\mpcplus\guliverkli\include\qt\Icons.h ??kAppleExtrasFolderIcon?????= FOUR_CHAR_CODE('aex?), //lspmodify 3、apps\mplayerc (a) mplayerc project Link input選項(xiàng): 將RadGtSplitterRU.lib刪除, 增加: ResizableLibRU.lib CmdUIRU.lib decssRU.lib TreePropSheetRU.lib sizecbarRU.lib (b) 將<DXSDK>\Samples\C++\DirectShow\BaseClasses\Release_Unicode下STRMBASE.lib拷貝一份為strmbaseRU.lib 最后,若一切順利的話,將會(huì)在mplayerc工程目錄下生成mplayerc.exe文件,運(yùn)行該文件即可播放各類影音文件了(假設(shè)機(jī)器上已經(jīng)安裝過(guò)相應(yīng)的解碼filter了)。 后記: 綜上觀之,MPC的編譯過(guò)程中對(duì)很多SDK源碼文件進(jìn)行了小改動(dòng),其中最大的癥結(jié)在于筆者所安裝的directshowsdk比較老(但是筆者沒(méi)有找到比February 2005更加新的),對(duì)vs2005的支持不好,因?yàn)関s2005和vc6,vs2003相比,對(duì)c/c++代碼的要求比較嚴(yán)格。
the original MPC project:
http://sourceforge.net/projects/guliverkli/
2006.5月后,mpc工程基本上就停止更新了。
注:mpc全稱meida playerclassic,是一個(gè)萬(wàn)能播放器核心引擎,目前流行的萬(wàn)能播放器,如暴風(fēng)影音,kmp,klc等,或多或少都采用mpc的核心。mpc是gabest創(chuàng)建和主力維護(hù)開(kāi)發(fā)的,gabest同時(shí)是著名字幕插件vobsub的作者。
http://sourceforge.net/projects/guliverkli2/
該工程是基于最新的原mpc工程(應(yīng)該是2006.5月版),主要是對(duì)mpc的程序問(wèn)題進(jìn)行修補(bǔ),功能上的增加比較少。主要維護(hù)者:clsid2
一、簡(jiǎn)介
Mpc是一個(gè)非常流行的開(kāi)源播放器,國(guó)外的K-LiteCodec,國(guó)內(nèi)的幻想影音、終極解碼、完美解碼等播放工具都捆綁了mpc播放器程序。另外,暴風(fēng)、kmplayer等播放器程序也都或多或少地參考及使用了mpc中的功能和代碼。Mpc開(kāi)源工程開(kāi)始于2003年,是一款較早的開(kāi)源萬(wàn)能播放器程序,基于directshow架構(gòu),只要有可用的解碼filter,mpc可以支持任意的媒體格式。Mpc的作者gabest,同時(shí)也是著名的外掛字幕插件vobsub的作者。
遺憾的是Mpc工程在2006年04月停止了更新,同時(shí)所幸的是有兩個(gè)開(kāi)源工程在mpc的基礎(chǔ)上繼續(xù)更新,一個(gè)是mpc2,主要是clsid2在維護(hù),主要是修正mpc原工程中的一些bug,不添加新功能;另一個(gè)mpc-homecinema比較強(qiáng)了,在mpc的基礎(chǔ)上,添加了Antitearing,抖動(dòng)測(cè)試,字幕同步,ShuttlePN31遠(yuǎn)程控制支持,OSD屏幕顯示,vistaReady等不少實(shí)用的功能。
?
Mpc主界面截圖
?
二、源碼獲取途徑
1. mpc原工程gabest
http://sourceforge.net/projects/guliverkli2/
https://guliverkli.svn.sourceforge.net/svnroot/guliverkli
gabest 2006.04停止更新
?
2.mpc2(clsid2)
http://sourceforge.net/projects/guliverkli2/
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平臺(tái)
編譯平臺(tái):vs2003, vs2005 orvs2008
另外需要安裝directX9.0sdk 及windows media formatsdk9
關(guān)于mpc的具體編譯方法參見(jiàn)《How to Compilempc》:
http://blog.csdn.net/sunshine1314/archive/2006/12/13/1442103.aspx
?
二、典型應(yīng)用
Mpc最常見(jiàn)的應(yīng)用是:在windows平臺(tái)上構(gòu)建多格式支持的媒體播放程序。另外,用mpc構(gòu)建針對(duì)自定義格式的播放程序也是很方面的。
另外,mpc工程中除了包含播放器主程序,還包含了不少開(kāi)源的filter,特別是splitterfilter,如mp3, mpeg, mp4, mov, flv,real等splitter。利用mpc的工程有很多功能完善的filter基類,對(duì)于構(gòu)建自主的splitter,decoder等filter非常方便。
?
三、更多資料
如果要在非windows平臺(tái)上構(gòu)建多格式支持的媒體播放程序,可以使用另外兩個(gè)開(kāi)源工程,vlc和mplayer。具體內(nèi)容見(jiàn)本站的相應(yīng)文章。
一、簡(jiǎn)介
MediaInfo 用來(lái)分析視頻和音頻文件的編碼和內(nèi)容信息。
MediaInfo可以獲得多媒體文件的哪些信息?
內(nèi)容信息:標(biāo)題,作者,專輯名,音軌號(hào),日期,總時(shí)間……
視頻:編碼器,長(zhǎng)寬比,幀頻率,比特率…… ?
音頻:編碼器,采樣率,聲道數(shù),語(yǔ)言,比特率…… ?
文本:語(yǔ)言和字幕 ?
段落:段落數(shù),列表 ?
?
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有哪些主要功能和特點(diǎn)?
支持眾多視頻和音頻文件格式?
多種查看方式:文本,表格,樹(shù)形圖,網(wǎng)頁(yè)…… ?
自定義查看方式 ?
信息導(dǎo)出:文本,CSV,HTML…… ?
三種發(fā)布版本:圖形界面,命令行,DLL(動(dòng)態(tài)鏈接庫(kù)) ?
與Windows資源管理器整合:拖放,右鍵菜單 ?
國(guó)際化:有多種界面語(yǔ)言供選擇?(軟件界面)輕松實(shí)現(xiàn)本地化 (需要志愿者翻譯語(yǔ)言文件)
?
MediaInfo主界面截圖
?
二、源碼獲取途徑
MediaInfo英文主頁(yè):
http://mediainfo.sourceforge.net/
MediaInfo中文主頁(yè):
http://mediainfo.sourceforge.net/zh-CN
MediaInfo開(kāi)發(fā)者主頁(yè):
http://sourceforge.net/projects/mediainfo
源碼svn下載地址:
https://mediainfo.svn.sourceforge.net/svnroot/mediainfo
?
三、使用指南
1. MediaInfo編譯指南
支持Windows和Linux平臺(tái)
推薦使用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庫(kù)。
MediaInfo庫(kù)有靜態(tài)鏈接和動(dòng)態(tài)鏈接兩種方式,MediaInfoSDK的相關(guān)官方資料如下:
- 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)
?
二、典型應(yīng)用
MediaInfo的典型應(yīng)用是使用其DLL庫(kù),用來(lái)提取媒體文件的信息。其特點(diǎn)是,支持的格式全、提取的信息豐富。當(dāng)然,MediaInfo本身是開(kāi)源的,其DLL庫(kù)可以進(jìn)行二次開(kāi)發(fā),可以擴(kuò)充自定義格式,增加自定義功能。對(duì)于工程使用,MediaInfo模塊和其它功能可以獨(dú)立,使用上非常便捷,是一個(gè)值得推薦的開(kāi)源工程。
?
三、相關(guān)源碼
關(guān)于媒體信息解析,ffmpeg的libformat是用于媒體文件解析的,是parser的功能,支持格式也非常全,和MediaInfo有想通之處,在使用MediaInfo時(shí)遇到問(wèn)題可以借鑒libformat的源碼。
總結(jié)
- 上一篇: 备用金逾期怎么办
- 下一篇: FFmpeg示例程序合集-批量编译脚本