開源好代碼 音視頻

VirtualDub

 

一、簡介

 

 

 

1VirtualDub主界面

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

VirtualDub的亮點是音視頻捕獲和處理,但其在多媒體編輯整個流程上的功能模塊是full的。下圖2VirtualDub多媒體數據處理的一個流程。從圖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

調整音頻段的佔用時長

 

 

五、相關源碼

在視頻處理方面,除了VirtualDubavisynth也包含了功能非常全面的視頻處理濾鏡。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 下載地址:
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》:

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

 

二、典型應用

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英文主頁:

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編譯指南

支持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的源碼。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章