Youtube的成功,使得國內的視頻網站如雨後春筍般的冒出來,前不久朋友叫我幫他寫一個將各種視頻格式轉換成flv的程式,這裡就將編寫程式遇到困難和獲得的經驗拿出來和大家分享一下。
1、使用引擎:ffmpeg + Mencoder
2、ffmpeg最新版本的:http://ffdshow.faireal.net/mirror/ffmpeg/
Mencoder新版本的:http://www5.mplayerhq.hu/MPlayer/releases/win32/
3、轉換速度比較:總體上ffmpeg轉換的速度快於Mencoder
4、轉換格式要求:rm、rmvb、rt格式的檔案只能用Mencoder轉換,出於速度考慮我基本上都用ffmpeg轉換,所以Mencoder能轉換的格式我沒有詳細測試(哪個朋友知道,麻煩你告訴我下,我補充上去)。
5、純音頻格式只能用Mencoder進行轉換。如何判斷是否是純音頻格式可以通過使用命令 FFmpeg -i "檔案的完整路徑" 獲得輸出後就可以分析出來。
6、.mov格式的用ffmpeg轉換出來的效果比較差,建議用Mencoder進行轉換,wmv8用ffmpeg經常會有花屏產生建議用Mencoder。
7、視頻按比率輸出的問題:必須先擷取源視頻檔案的寬度和高度(也是通過 FFmpeg -i "檔案的完整路徑" 獲得輸出後就可以分析出來)根據這個高度和寬度的比率來設定輸出檔案的尺寸。
8、可能的痛點:因為這ffmpeg 和 Mencoder都是命令列工具(當然你也可以下載原始碼自己修改成com之類的),在C#只能用Process調用,前面我提過要獲得輸出資訊(擷取視頻相關資訊、擷取當前的轉換進度、擷取什麼時候完成轉換),必須設定process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true;然後必須通過非同步編程的方式擷取Process.StandardOutput和Process.StandardError的值,相關說明可以見(ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDiagnosticsProcessClassStandardOutputTopic.htm)(必須安裝了msdn的才能看)。
本文旨在協助大家少走一些彎路,並不提供實際的解決方案及相關的源碼下載,如需要源碼要付費才行(有意向者可以發送郵件cxbsky#hotmail.com)。
有其他任何問題歡迎大家在本文章發布留言。
參考文章:
http://wf.xplore.cn/read.php/90.htm
百度和google搜尋ffmpeg mencoder也有很多相關網頁