1. 程式人生 > >開源好程式碼 音視訊

開源好程式碼 音視訊

VirtualDub

一、簡介

1VirtualDub主介面

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

VirtualDub的亮點是音視訊捕獲和處理,但其在多媒體編輯整個流程上的功能模組是full的。下圖2VirtualDub多媒體資料處理的一個流程。從圖

2可以看出,視訊自上而下的處理流程包括:視訊回放或者捕獲,統計層,音視訊重同步,捕獲引數的調節,視訊處理,視訊顯示,視訊壓縮,流選擇,寫入磁碟等。音訊的處理流程也類似。

2VirtualDub處理流程

二、原始碼獲取途徑

VirtualDub官網:

下載地址:

技術論壇:

三、使用指南

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

調整音訊段的佔用時長

五、相關原始碼

在視訊處理方面,除了VirtualDubavisynth也包含了功能非常全面的視訊處理濾鏡。Avisynth官方網址:。後期還會具體介紹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,2DirectX SDK 9.0c October2006 下載地址: NOTE:DirectX SDK Extras包含directshow sdk,具體內容可參考: http://blog.csdn.net/sunshine1314/archive/2006/12/13/1440797.aspx 2、Windows Media Format SDK 9 下載地址: 三、編譯環境設定 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 <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 需要修改的內容: 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架構,只要有可用的解碼filtermpc可以支援任意的媒體格式。Mpc的作者gabest,同時也是著名的外掛字幕外掛vobsub的作者。

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

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平臺

編譯平臺:vs2003, vs2005 orvs2008

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

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

二、典型應用

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

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

三、更多資料

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

一、簡介

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有哪些主要功能和特點?

支援眾多視訊和音訊檔案格式

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

自定義檢視方式

資訊匯出:文字,CSVHTML……

三種釋出版本:圖形介面,命令列,DLL(動態連結庫)

Windows資源管理器整合:拖放,右鍵選單

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

MediaInfo主介面截圖

二、原始碼獲取途徑

MediaInfo英文主頁:

MediaInfo中文主頁:

MediaInfo開發者主頁:

原始碼svn下載地址:

三、使用指南

1. MediaInfo編譯指南

支援WindowsLinux平臺

推薦使用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除了有GUICMD兩種使用方法,還可以在程式中使用MediaInfo庫。

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

二、典型應用

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

三、相關原始碼

關於媒體資訊解析,ffmpeglibformat是用於媒體檔案解析的,是parser的功能,支援格式也非常全,和MediaInfo有想通之處,在使用MediaInfo時遇到問題可以借鑑libformat的原始碼。