在ASP.Net中實現flv視頻轉換的代碼

來源:互聯網
上載者:User

實際上是利用.Net中的Process對象來實現的。
string str=@"d:\test.avi d:\test_allen.flv";
RunFFMpeg(str);

//運行FFMpeg的視頻解碼,
public void RunFFMpeg(string strCmd)
{
//建立並啟動一個新進程
Process p = new Process();
//設定進程啟動資訊屬性StartInfo,這是ProcessStartInfo類,包括了一些屬性和方法:
p.StartInfo.FileName = "ffmpeg.exe"; //程式名
p.StartInfo.Arguments = " -i " + strCmd; //執行參數
p.Start();
}

//運行Cmd.exe執行Dos 命令,並返回執行結果
public string RunCmd(string command)
{
//建立並啟動一個對進程
Process p = new Process();

//Process類有一個StartInfo屬性,這是ProcessStartInfo類,包括了一些屬性和方法,例如:
p.StartInfo.FileName = "cmd.exe"; //程式名
p.StartInfo.Arguments = " /c " + command; //執行參數
p.StartInfo.UseShellExecute = false; //關閉Shell的使用
p.StartInfo.RedirectStandardInput = true; //重新導向標準輸入
p.StartInfo.RedirectStandardOutput = true; //重新導向標準輸出
p.StartInfo.RedirectStandardError = true; //重新導向錯誤輸出
p.StartInfo.CreateNoWindow = true; //設定不顯示視窗

p.Start();
//p.StandardInput.WriteLine(command); //也可以用這種方式輸入要執行的命令
//p.StandardInput.WriteLine("exit"); //不過要記得加上Exit要不然下一行程式執行的時候會當機

//必須建立可以自動轉換完成以後,結束進程的代碼
return p.StandardOutput.ReadToEnd(); //從輸出流取得命令執行結果
}

------------------------------------
另一種方法: 用MEncoder轉換視頻檔案為Flv

mencoder 轉換視頻注意事項

1、下載 mencoder.exe 和 mplayer.exe
2、將mencoder.exe 所在檔案夾,加入環境變數Path裡面 ,如C:\mplayer
3、微軟鍵+R,輸入cmd,命令列打入如下文法
mencoder d:\test.avi -o d:\testflv.flv -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=100:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -vf scale=512:-3 -ofps 12 -srate 22050

文法說明:
mencoder d:\test.avi -o d:\testflv.flv //將D:\test.avi 輸出到 d:\testflv.flv, 參數 -o 代表輸出路徑
-of lavf //參數 -of :輸出檔案的格式,flv檔案是屬於lavf格式
-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames //lavf格式的參數設定,對於轉換flv格式,最好加上這個長句。意思是不用bframes。

-oac mp3lame //輸出音頻編碼器,這裡用的mp3lame
-lameopts abr:br=56 //是專門針對mp3lame的參數設定,abr:br=56,是設定音頻位元速率為56

-ovc lavc //輸出視頻編碼器

//視頻編碼器的設定:
-lavcopts

vcodec=flv: //指定視頻編碼器為flv
vbitrate=500: //指定視頻位元速率為500 ,低品質為150kb/s,中等品質為400kb/s,高品質為700kb/s
mbd=2: //宏模組選擇演算法,值為0~2預設為0,值越大轉換越緩慢,但在品質和檔案大小方面有好處
mv0: //編譯每個宏模組並選擇最好的一個,當mbd=0時無效;
trell: //會稍微增加品質,mbd>0時效果更明顯;
v4mv: //量子化網格搜尋,對每8×8block找到最佳化編碼
cbp: //只能和trell一期使用,評估失真的映像塊編碼;
last_pred=3: //與上一幀相比的移動數量預測,值為0~99,1~3比較合適,大於3時對品質的提高已經無關緊要,但卻會降低速度;
dia=4: //移動搜尋範圍,值為-99~6,對於快速轉換,-1是個不錯的值,如果不是很重視速度,可以考慮2~4;
cmp=6: //值為1~2000,預設為0,設定用於全象素移動預算的比較函數
vb_strategy=1 //對動作很大的情境會有協助,對有些視頻,設定vmax_b_frames會有損品質,加上vb_strategy=1會好點。

//mencoder的參數
-vf scale=512:-3 //-vf表示視頻格式scale是縮放,512:-3表示強制將寬度設定為512,高度寫為-3表示保持高寬比,也可以設定為-1或-2,
-ofps 12 /*輸出視頻的幀頻,一般,用於flash播放的視訊框架頻高了沒有意義,反而會增加視頻檔案大小,但如果ofps設定的不合適,
比如源視訊框架頻不是ofps的整數倍,可能會導致轉換後的視頻、音頻不同步,
似乎可以將這一參數改為-noskip來解決這一問題;*/

-srate 22050 //音頻採樣率一般為22050或44100。

----------------------------------------------------------

Mencoder中文參考手冊地址

http://www.mplayerhq.hu/DOCS/HTML/zh_CN/

----------------------------------------------------------

參數說明:

-srate 32000 : //聲音採樣率,22050hz
-af channels=2:2:1:0:1:1 //右聲道
-af channels=2:2:0:0:0:1 //左聲道
-stereo 0 //立體聲
-oac mp3lame : //輸出音頻使用mp3編碼
-lameopts mode=2:cbr:br=32 : //碼率br=32 kbit
-ovc xvid -xvidencopts bitrate=200 : //以xvid方式編碼,碼率200kbps (經實驗,目前divx比xvid要快,在使用vhq功能時會稍稍影響速度)

-vf scale=480:-3 -sws 9 : //變換至480像素寬,高度按比例縮放

"C:\dance.avi" -o "C:\dance.XviD.avi" //源檔案地址 -o到 輸出檔案地址

2> 2.txt : //編碼日誌記錄地址

--------------------參數選擇分析------------------------

18fps:這是以前通過多次測試得來的,一般電視劇和動畫片15fps就夠用了。如果情境變換不是很大,13fps就能保證播放流暢。降低fps值可以使壓縮速度更快,對於電影,特別是動作片,要保證流暢無馬賽克,就要提高fps,最大24就夠了

選擇18fps足以應付大部分,性價比高

音頻採樣率32KHz:從錄音裝置的得來的靈感(以下品質說明為比喻,前面的參數時原有的)

32KHz - 32Kbps - mono比電話音好些
44KHz - 64Kbps - J-Stereo 收音機品質
44KHz -128Kbps - J-Stereo 通行的MP3標準品質
44KHz -192Kbps - Stereo接近CD品質

經過多次實驗(以上是區間範圍,自己可以根據需要選擇)
壓片最省空間 - 使用32KHz - 32Kbps - mono,可以保證內容;
品質要求不高 - 可用32KHz - 128Kbps - mono 性價比比較高;
空間大高品質 - 44KHz -192Kbps - Stereo對大SD卡使用者。

視頻採樣率bitrate=150:

80 - 最小空間佔用率,品質最差 轉換速度稍快 (與最低音頻配合,大小可1min=1M)
122 - 對底配置機器的小卡使用者性價比較高(換面變化快回有馬賽克)
150 - 滿足底配置機器對畫質的基本要求(對非動作片比較完美)
248 - 大卡使用者的經濟選擇 (品質較好)
350 - 大卡高配置的機器 (經濟的體現機器優勢)
更高- 使用者自己試吧

總的來說,輸出檔案的大小受視頻採樣率、音頻採樣率影響效果顯著,畫面尺寸、fps值也影響大小。怎樣設定參數要看你的個人實際需要與機器配置。

另外,還有很多不知道的參數,請大家找找看。

比如:pess2、pess3、動態FPS、螢幕截取、時間區間設定等

------------------------------------------------------------------

關於音量大小:

carlwang 寫道:個人習慣是不用耳機的,天熱帶著不舒服,所以聲音我一向偏大。
我的經驗如果片源是DVDrip,一般在5以上,如果是rmvb一般2就夠了,再大就有爆音了。

-oac mp3lame -lameopts mode=2:cbr:br=64:vol=2 大家來試試看吧

------------------------------------------------------------------------

轉換結束,會顯示
Pos: 226.8s 297f (100%) 48fps Trem: 0min 5mb a-v:-0.009 [142:56]
這裡邊的內容,小括弧裡應該是轉換的進度,中括弧裡的內容很重要,142表示視頻位元速率,56表示音頻位元速率(位元速率這個詞不知道用的對不對......)

轉換結束,會顯示2行文字:
Video stream: 142.564 kbit/s (17820 B/s) size: 4046677 bytes 227.080 secs 2700 frames
Audio stream: 56.938 kbit/s (7117 B/s) size: 1616197 bytes 227.082 secs
這2行資訊我想大家都能明白,其中我一直關注的是那個142.564kbit/s,

用過flash8內建轉換工具的應該知道進階設定裡有個選項是最大資料速率,
當選中中等畫質的時候,是400kb/s,而低品質也是150kb/s,也就是說,用那句命令轉換的視頻,其畫質都不如品質的,那麼,品質怎麼樣呢?

看一下命令:
mencoder "D:\music.wmv" -o "D:\output.flv" -of lavf -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=150:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -srate 22050

分析:
-ovc > 大概是output video codec的縮寫,制定輸出視頻編碼,選用的lavc,什麼意思?說是用了libavcodec的編碼器;

-lavcopts > 是lavc的options選項設定

要設定視頻編碼的參數了!
codec=flv > 說的是用的flv編碼器,這個咱不理;
vbitrate=150 > video bit rate!視頻資料速率!就是它了!原來我設的是150啊!

改成vbitrate=1000,再試試看!
結果,和前一次一模一樣......

冷靜下來,去往上看了一下官方文檔,這個參數是最大資料速率,最大嘛,你設多大都一樣啊,看來不是靠它來控製品質。

結論,設定品質有2種途徑:
1、設定-lavcopts,看這樣一句命令:
-lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1

在-lavcopts裡dia=4:cmp=6:vb_strategy=1這3條
dia越大品質越高,如果需要快速編碼,設定為-1,設為4時已經很有利於品質了;
cmp越大品質越高,預設值0,是最快速的,一般設到3,設為6已經只會細微提高品質了,但速度會慢
vb_strategy,大概是1或者0,預設值可能為0,我這裡設為1,會對編碼有協助,這個參數我自己沒有過多推敲,可能並不影響品質......

2、加-sws選項,看下面的命令:
-sws 3
只是加一個3進去,轉換後的效果和前面一種方法大致相同,視頻資料速率都是422.5kb/s左右,解釋一下
-sws就是用來設定品質的,預設值為2,那麼,為什麼不用這種簡單的方式呢?我個人認為,用前面一種方法有利於找到一個速度和品質的平衡點,畢竟變化的範圍比較大。

個人見解:
如此視頻格式的轉換,最好使用用戶端轉換,轉換好了再傳到服務端,因此需要做用戶端的一個視頻上傳小軟體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.