程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .Net中玩轉視頻

.Net中玩轉視頻

編輯:關於.NET

背景

經常上土豆 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的工具在網上搜一下 然後按照程序裡的目錄存放就可以了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved