背景
經常上土豆 youku的朋友可能會發現播放的視頻格式大多是flv格式的 那麼我們先來掃盲下flv
FLV 是FLASH VIDEO的簡稱,FLV流媒體格式是隨著Flash MX的推出發展而來的視頻格式。由於它形成的文件極小、加載速度極快,使得網絡觀看視頻文件成為可能,它的出現有效地解決了視頻文件導入Flash後,使導出的SWF文件體積龐大,不能在網絡上很好的使用等缺點。
更多參考百科 http://baike.baidu.com/view/364757.htm
但是用戶手上的資源未必都是flv格式,所以需要格式轉換。這裡介紹2款工具
FFmpeg是一個開源免費跨平台的視頻和音頻流方案,屬於自由軟件,采用LGPL或GPL許可證(依據你選擇的組件)。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec裡很多codec都是從頭開發的。
更多參考百科 http://baike.baidu.com/view/856526.htm
mencoder 是一款命令行方式的視頻處理軟件,mencoder支持幾乎所有的格式的視頻轉換,可以將任意格式轉換到任意格式,轉換功能可以說是相當強大。目前市面上流行的格式轉換器,都是基於mencoder開發的GUI,比如暴風轉碼,格式工廠等。可以說轉換器能辦到的,mencoder都能辦到,但mencoder能辦到的,轉換器就不一定能辦到了。
更多參考百科 http://baike.baidu.com/view/3353694.htm
不過FFmpeg和在mencoder在應用領域還是有些區別
網摘:
1,在實際的使用當中,ffmpeg 在 Redhat與Suse Linux 下面都運行正常,但是我在Suse Linux 10 上面壓縮rm與 rmvb 視頻時,壓出來的片子聲音不正常。在其他參數都完全一樣的情況下使用Redhat 壓縮,居然是正常的。看來 Suse 對企業應用比較好,但是對多媒體的應用(偏向個人方面)還是 Redhat 比較好一些。
2,ffmpeg 也可以壓縮視頻,不過,效果可是比mencoder 差好些。所以,基本上我只使用 ffmpeg 來抓取視頻中的圖片。可以使用 ffmpeg-php 這個開源項目程序來抓取任何一幀的圖片,這樣,我們就可以很方便地大致了解這個視頻的內容了。
3,ffmpeg 壓縮一個 wmv 文件,可能使用不到一分鐘,但是 mencoder 卻壓縮了好幾分鐘,由於 mencoder 需要計算更多東西,所以,需要花更多的時間。
4,mencoder 支持的視頻格式非常多,如常見的 wmv,avi,mpg,rm,rmvb,mov,3gp,mp4 等,大約有上百種,不過,我還無法一一測試,估計也是沒有問題的。而ffmpeg 不支持 rm與rmvb 格式。
5,做為視頻壓縮,對機器的要求是比較高的,對系統資源的占用比較大,主要是對CPU與磁盤IO要求高。前兩天壓縮一個視頻,使用 寶德 PR2700D 用了4分鐘,使用寶德 PR4800 用了12分鐘,使用一台 Dell 2950 上面的 Vmware 虛擬機使用了大約8分鐘。綜合來看,最好是CPU強一些,內存不要小於2GB,磁盤的IO要快一些。
實踐
上述2款工具都有對應的win平台版本 那麼我們只需要用.net啟動軟件進程就可以了 很簡單 需要花功夫的是對工具各種復雜參數的把握
先上個簡單的demo
我們選舉一個很簡單的視頻 windows自帶的示例視頻 可以在目錄C:\WINDOWS\clock.avi找到
每秒換一個數字
ffmpeg 壓縮一個 視頻 文件,可能使用不到一分鐘,但是 mencoder 卻壓縮了好幾分鐘,由於 mencoder 需要計算更多東西,所以,需要花更多的時間。ffmpeg 也可以壓縮視頻,不過,效果可是比mencoder 差好些。並且ffmpeg對","wmv", "rmvb", "rm" 的效果不是很好,所以考慮的性能以及功能,"asf", "avi", "mpg", "3gp", "mov" 類型和截圖功能使用ffmepg,"wmv", "rmvb", "rm"類型使用mencoder實現
所以我們這裡用ffmpeg來轉換
到輸出目錄中確認下我們轉換的視頻是否可用
我們再試試截圖功能
我們截取2秒後和4秒後的 按照視頻進度 應該截取到3和5 這2個數字
查看本欄目
OK 貌似很順利
下面給出具體的參數配置
ffmpeng
使用: ffmpeg [[infile options] -i infile]... {[outfile options] outfile}... -L 查看許可證 -h 顯示說明 -version 顯示版本 -formats 顯示可用的格式,編解碼器,協議... -f fmt 輸出格式 -i filename 輸入文件名稱 -y 覆蓋輸出文件 -t duration 設定錄音時間 -fs limit_size 設置限制文件大小 -ss time_off 設置開始時間偏移 -itsoffset time_off 設置輸入時間偏移 -title string 設置標題 -timestamp time 設定時間戳記 -author string 設置作者 -copyright string 設置版權 -comment string 設置評論 -album string 設置相冊 -v verbose 控制總額日志 -target type 指定的目標文件類型 ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...) -dframes number 設置數據幀的記錄 -scodec codec 強制字幕編碼器 ('copy' to copy stream) -newsubtitle 添加一個新的字幕流,以目前的輸出流 -slang code 設置ISO 639語言代碼(3 字母)目前字幕高級視頻設置: -vframes number 設置視頻幀記錄 -r rate 設置幀比率(Hz value, fraction or abbreviation) -s size 設置幀大小 (WxH or abbreviation) -aspect aspect 設置的長寬比 (4:3, 16:9 or 1.3333, 1.7777) -croptop size 設置頂端作頻率的大小 (in pixels) -cropbottom size 設置底端作頻率的大小 (in pixels) -cropleft size 設置左端作頻率的大小 (in pixels) -cropright size 設置右端作頻率的大小(in pixels) -padtop size 設置頂端頻率的大小 (in pixels) -padbottom size 設置底部頻率的大小(以像素) -padleft size 設置左頻率的大小(以像素) -padright size 設置右頻率的大小(以像素) -padcolor color 設置顏色的頻率(十六進制000000通過ffffff ) -vn 禁用視頻 -vcodec codec 強制視頻編碼器 ('copy' to copy stream) -sameq 使用相同視頻質量作為源(implies VBR) -pass n 選擇通過數量(1 or 2) -passlogfile file 選擇兩個通過日志文件名稱 -newvideo 添加一個新的視頻流,以目前的輸出高級視頻流選項: -pix_fmt format 設置像素格式 -intra 使用內部幀 -vdt n 放棄起增點 -qscale q 使用固定的視頻量化規模(VBR) -qdiff q 最大值之間的差異量化表(VBR) -rc_eq equation 設置速率控制方程 -rc_override override 速率控制特定間隔覆蓋 -me method 設置運動估計方法 -me_threshold 運動估計起增點 -strict strictness 如何嚴格按照標准 -deinterlace 反交錯圖片 -psnr 計算的PSNR壓縮幀 -vstats 轉儲視頻編碼統計文件 -vhook module 插入視頻處理模塊 -intra_matrix matrix 指定內部矩陣系數 -inter_matrix matrix 指定跨矩陣系數 -top top=1/bottom=0/auto=-1 場首要 -dc precision 內直流精度 -vtag fourcc/tag 強制視頻四字符代碼/標記 -qphist 顯示 QP 柱形統計圖 -vbsf bitstream filter 流過濾器的音頻選項: -aframes number 設置音頻幀記錄 -ab bitrate 設置音頻比特率(在kb的速率/秒) -aq quality 設定質量的音頻質量(編解碼器的具體) -ar rate 設定音頻采樣率(赫茲) -ac channels 指定數目的音頻通道 -an 禁用音頻 -acodec codec 強制音頻編碼 ('copy' to copy stream) -vol volume 改變聲音大小 (256=normal) -newaudio 增加一個新的音頻流到當前輸出流 -alang code 設置ISO 639語言代碼(3 字母)目前字幕高級音頻設置: -atag fourcc/tag 強制音頻四字符代碼/標記 -absf bitstream filter 過濾比特流子標題選項 -scodec codec 強制子標題編碼('copy' to copy stream) -newsubtitle 增加一個新的子標題流到當前輸出流 -slang code 設置ISO 639語言代碼(3 字母)目前字幕音頻流/視頻抓取設置: -vd device 設置音頻抓取設備 -vc channel 設置視頻抓取頻道(DV1394 only) -tvstd standard 設置電視標准 (NTSC, PAL (SECAM)) -ad device 設置音頻設備 -grab format 設置抓取用的格式 -gd device 設置高級抓取設備選項: -map file:stream[:syncfile:syncstream] 設置輸入數據流 -map_meta_data outfile:infile 設置中繼數據信息從輸入文件到輸出文件 -benchmark 添加基准時間 -dump 轉儲每個輸入數據包 -hex 當轉儲數據包時,也轉儲載重量 -re 在本幀讀入。比率 -loop_input 回路(目前只有工程與圖片) -loop_output 多少次循環的輸出格式,支持循環( 0循環永遠) -threads count 線程計數 -vsync 視頻同步方法 -async 音頻同步方式 -vglobal 全球視頻頭存儲類型 -copyts 復制時間戳 -shortest 最快完成輸入編碼 -dts_delta_threshold轉換過程中數據包的大小, 即數據緩沖區的大小按照本意, 數據緩沖區越大轉換速度越快, 但這與系統的運行狀態有關 -ps size 設置數據包大小 -muxdelay seconds 設定最高解復用器-解碼延遲 -muxpreload seconds 設置初始解復用器-解碼延遲
附demo 隨筆之作 不工整比較丑陋就不直接貼項目了 未加密 有興趣的同學直接反編譯看吧
demo下載 http://files.cnblogs.com/dubing/MaoyaVideo.rar
ffmpeng和mencoder的工具在網上搜一下 然後按照程序裡的目錄存放就可以了