在ASP.Net中實(shí)現(xiàn)flv視頻轉(zhuǎn)換的代碼
更新時間:2007年09月10日 21:39:44 作者:
實(shí)際上是利用.Net中的Process對象來實(shí)現(xiàn)的。
string str=@"d:\test.avi d:\test_allen.flv";
RunFFMpeg(str);
//運(yùn)行FFMpeg的視頻解碼,
public void RunFFMpeg(string strCmd)
{
//創(chuàng)建并啟動一個新進(jìn)程
Process p = new Process();
//設(shè)置進(jìn)程啟動信息屬性StartInfo,這是ProcessStartInfo類,包括了一些屬性和方法:
p.StartInfo.FileName = "ffmpeg.exe"; //程序名
p.StartInfo.Arguments = " -i " + strCmd; //執(zhí)行參數(shù)
p.Start();
}
//運(yùn)行Cmd.exe執(zhí)行Dos 命令,并返回執(zhí)行結(jié)果
public string RunCmd(string command)
{
//創(chuàng)建并啟動一個對進(jìn)程
Process p = new Process();
//Process類有一個StartInfo屬性,這是ProcessStartInfo類,包括了一些屬性和方法,例如:
p.StartInfo.FileName = "cmd.exe"; //程序名
p.StartInfo.Arguments = " /c " + command; //執(zhí)行參數(shù)
p.StartInfo.UseShellExecute = false; //關(guān)閉Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向標(biāo)準(zhǔn)輸入
p.StartInfo.RedirectStandardOutput = true; //重定向標(biāo)準(zhǔn)輸出
p.StartInfo.RedirectStandardError = true; //重定向錯誤輸出
p.StartInfo.CreateNoWindow = true; //設(shè)置不顯示窗口
p.Start();
//p.StandardInput.WriteLine(command); //也可以用這種方式輸入要執(zhí)行的命令
//p.StandardInput.WriteLine("exit"); //不過要記得加上Exit要不然下一行程式執(zhí)行的時候會當(dāng)機(jī)
//必須創(chuàng)建可以自動轉(zhuǎn)換完成以后,結(jié)束進(jìn)程的代碼
return p.StandardOutput.ReadToEnd(); //從輸出流取得命令執(zhí)行結(jié)果
}
------------------------------------
另一種方法: 用MEncoder轉(zhuǎn)換視頻文件為Flv
mencoder 轉(zhuǎn)換視頻注意事項(xiàng)
1、下載 mencoder.exe 和 mplayer.exe
2、將mencoder.exe 所在文件夾,加入環(huán)境變量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, 參數(shù) -o 代表輸出路徑
-of lavf //參數(shù) -of :輸出文件的格式,flv文件是屬于lavf格式
-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames //lavf格式的參數(shù)設(shè)置,對于轉(zhuǎn)換flv格式,最好加上這個長句。意思是不用bframes。
-oac mp3lame //輸出音頻編碼器,這里用的mp3lame
-lameopts abr:br=56 //是專門針對mp3lame的參數(shù)設(shè)置,abr:br=56,是設(shè)置音頻比特率為56
-ovc lavc //輸出視頻編碼器
//視頻編碼器的設(shè)置:
-lavcopts
vcodec=flv: //指定視頻編碼器為flv
vbitrate=500: //指定視頻比特率為500 ,低品質(zhì)為150kb/s,中等品質(zhì)為400kb/s,高品質(zhì)為700kb/s
mbd=2: //宏模塊選擇算法,值為0~2默認(rèn)為0,值越大轉(zhuǎn)換越緩慢,但在品質(zhì)和文件大小方面有好處
mv0: //編譯每個宏模塊并選擇最好的一個,當(dāng)mbd=0時無效;
trell: //會稍微增加品質(zhì),mbd>0時效果更明顯;
v4mv: //量子化網(wǎng)格搜索,對每8×8block找到最優(yōu)化編碼
cbp: //只能和trell一期使用,評估失真的圖像塊編碼;
last_pred=3: //與上一幀相比的移動數(shù)量預(yù)測,值為0~99,1~3比較合適,大于3時對品質(zhì)的提高已經(jīng)無關(guān)緊要,但卻會降低速度;
dia=4: //移動搜索范圍,值為-99~6,對于快速轉(zhuǎn)換,-1是個不錯的值,如果不是很重視速度,可以考慮2~4;
cmp=6: //值為1~2000,默認(rèn)為0,設(shè)置用于全象素移動預(yù)算的比較函數(shù)
vb_strategy=1 //對動作很大的場景會有幫助,對有些視頻,設(shè)置vmax_b_frames會有損品質(zhì),加上vb_strategy=1會好點(diǎn)。
//mencoder的參數(shù)
-vf scale=512:-3 //-vf表示視頻格式scale是縮放,512:-3表示強(qiáng)制將寬度設(shè)置為512,高度寫為-3表示保持高寬比,也可以設(shè)置為-1或-2,
-ofps 12 /*輸出視頻的幀頻,一般,用于flash播放的視頻幀頻高了沒有意義,反而會增加視頻文件大小,但如果ofps設(shè)置的不合適,
比如源視頻幀頻不是ofps的整數(shù)倍,可能會導(dǎo)致轉(zhuǎn)換后的視頻、音頻不同步,
似乎可以將這一參數(shù)改為-noskip來解決這一問題;*/
-srate 22050 //音頻采樣率一般為22050或44100。
----------------------------------------------------------
Mencoder中文參考手冊地址
http://www.mplayerhq.hu/DOCS/HTML/zh_CN/
----------------------------------------------------------
參數(shù)說明:
-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 (經(jīng)實(shí)驗(yàn),目前divx比xvid要快,在使用vhq功能時會稍稍影響速度)
-vf scale=480:-3 -sws 9 : //變換至480像素寬,高度按比例縮放
"C:\dance.avi" -o "C:\dance.XviD.avi" //源文件地址 -o到 輸出文件地址
2> 2.txt?。骸?/編碼日志記錄地址
--------------------參數(shù)選擇分析------------------------
18fps:這是以前通過多次測試得來的,一般電視劇和動畫片15fps就夠用了。如果場景變換不是很大,13fps就能保證播放流暢。降低fps值可以使壓縮速度更快,對于電影,特別是動作片,要保證流暢無馬賽克,就要提高fps,最大24就夠了
選擇18fps足以應(yīng)付大部分,性價(jià)比高
音頻采樣率32KHz:從錄音設(shè)備的得來的靈感(以下質(zhì)量說明為比喻,前面的參數(shù)時原有的)
32KHz - 32Kbps - mono比電話音好些
44KHz - 64Kbps - J-Stereo 收音機(jī)質(zhì)量
44KHz -128Kbps - J-Stereo 通行的MP3標(biāo)準(zhǔn)質(zhì)量
44KHz -192Kbps - Stereo接近CD質(zhì)量
經(jīng)過多次試驗(yàn)(以上是區(qū)間范圍,自己可以根據(jù)需要選擇)
壓片最省空間 - 使用32KHz - 32Kbps - mono,可以保證內(nèi)容;
質(zhì)量要求不高 - 可用32KHz - 128Kbps - mono 性價(jià)比比較高;
空間大高質(zhì)量 - 44KHz -192Kbps - Stereo對大SD卡用戶。
視頻采樣率bitrate=150:
80 - 最小空間占用率,質(zhì)量最差 轉(zhuǎn)換速度稍快 (與最低音頻配合,大小可1min=1M)
122 - 對底配置機(jī)器的小卡用戶性價(jià)比較高(換面變化快回有馬賽克)
150 - 滿足底配置機(jī)器對畫質(zhì)的基本要求(對非動作片比較完美)
248 - 大卡用戶的經(jīng)濟(jì)選擇 (質(zhì)量較好)
350 - 大卡高配置的機(jī)器 (經(jīng)濟(jì)的體現(xiàn)機(jī)器優(yōu)勢)
更高- 用戶自己試吧
總的來說,輸出文件的大小受視頻采樣率、音頻采樣率影響效果顯著,畫面尺寸、fps值也影響大小。怎樣設(shè)置參數(shù)要看你的個人實(shí)際需要與機(jī)器配置。
另外,還有很多不知道的參數(shù),請大家找找看。
比如:pess2、pess3、動態(tài)FPS、屏幕截取、時間區(qū)間設(shè)置等
------------------------------------------------------------------
關(guān)于音量調(diào)節(jié):
carlwang 寫道:個人習(xí)慣是不用耳機(jī)的,天熱帶著不舒服,所以聲音我一向偏大。
我的經(jīng)驗(yàn)如果片源是DVDrip,一般在5以上,如果是rmvb一般2就夠了,再大就有爆音了。
-oac mp3lame -lameopts mode=2:cbr:br=64:vol=2 大家來試試看吧
------------------------------------------------------------------------
轉(zhuǎn)換結(jié)束,會顯示
Pos: 226.8s 297f (100%) 48fps Trem: 0min 5mb a-v:-0.009 [142:56]
這里邊的內(nèi)容,小括號里應(yīng)該是轉(zhuǎn)換的進(jìn)度,中括號里的內(nèi)容很重要,142表示視頻比特率,56表示音頻比特率(比特率這個詞不知道用的對不對......)
轉(zhuǎn)換結(jié)束,會顯示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行信息我想大家都能明白,其中我一直關(guān)注的是那個142.564kbit/s,
用過flash8自帶轉(zhuǎn)換工具的應(yīng)該知道高級設(shè)置里有個選項(xiàng)是最大數(shù)據(jù)速率,
當(dāng)選中中等畫質(zhì)的時候,是400kb/s,而低品質(zhì)也是150kb/s,也就是說,用那句命令轉(zhuǎn)換的視頻,其畫質(zhì)都不如品質(zhì)的,那么,品質(zhì)怎么樣呢?
看一下命令:
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選項(xiàng)設(shè)置
要設(shè)置視頻編碼的參數(shù)了!
codec=flv > 說的是用的flv編碼器,這個咱不理;
vbitrate=150 > video bit rate!視頻數(shù)據(jù)速率!就是它了!原來我設(shè)的是150啊!
改成vbitrate=1000,再試試看!
結(jié)果,和前一次一模一樣......
冷靜下來,去往上看了一下官方文檔,這個參數(shù)是最大數(shù)據(jù)速率,最大嘛,你設(shè)多大都一樣啊,看來不是靠它來控制品質(zhì)。
結(jié)論,設(shè)置品質(zhì)有2種途徑:
1、設(shè)置-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越大品質(zhì)越高,如果需要快速編碼,設(shè)置為-1,設(shè)為4時已經(jīng)很有利于品質(zhì)了;
cmp越大品質(zhì)越高,默認(rèn)值0,是最快速的,一般設(shè)到3,設(shè)為6已經(jīng)只會細(xì)微提高品質(zhì)了,但速度會慢
vb_strategy,大概是1或者0,默認(rèn)值可能為0,我這里設(shè)為1,會對編碼有幫助,這個參數(shù)我自己沒有過多推敲,可能并不影響品質(zhì)......
2、加-sws選項(xiàng),看下面的命令:
-sws 3
只是加一個3進(jìn)去,轉(zhuǎn)換后的效果和前面一種方法大致相同,視頻數(shù)據(jù)速率都是422.5kb/s左右,解釋一下
-sws就是用來設(shè)置品質(zhì)的,默認(rèn)值為2,那么,為什么不用這種簡單的方式呢?我個人認(rèn)為,用前面一種方法有利于找到一個速度和品質(zhì)的平衡點(diǎn),畢竟變化的范圍比較大。
個人見解:
如此視頻格式的轉(zhuǎn)換,最好使用客戶端轉(zhuǎn)換,轉(zhuǎn)換好了再傳到服務(wù)端,因此需要做客戶端的一個視頻上傳小軟件
string str=@"d:\test.avi d:\test_allen.flv";
RunFFMpeg(str);
//運(yùn)行FFMpeg的視頻解碼,
public void RunFFMpeg(string strCmd)
{
//創(chuàng)建并啟動一個新進(jìn)程
Process p = new Process();
//設(shè)置進(jìn)程啟動信息屬性StartInfo,這是ProcessStartInfo類,包括了一些屬性和方法:
p.StartInfo.FileName = "ffmpeg.exe"; //程序名
p.StartInfo.Arguments = " -i " + strCmd; //執(zhí)行參數(shù)
p.Start();
}
//運(yùn)行Cmd.exe執(zhí)行Dos 命令,并返回執(zhí)行結(jié)果
public string RunCmd(string command)
{
//創(chuàng)建并啟動一個對進(jìn)程
Process p = new Process();
//Process類有一個StartInfo屬性,這是ProcessStartInfo類,包括了一些屬性和方法,例如:
p.StartInfo.FileName = "cmd.exe"; //程序名
p.StartInfo.Arguments = " /c " + command; //執(zhí)行參數(shù)
p.StartInfo.UseShellExecute = false; //關(guān)閉Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向標(biāo)準(zhǔn)輸入
p.StartInfo.RedirectStandardOutput = true; //重定向標(biāo)準(zhǔn)輸出
p.StartInfo.RedirectStandardError = true; //重定向錯誤輸出
p.StartInfo.CreateNoWindow = true; //設(shè)置不顯示窗口
p.Start();
//p.StandardInput.WriteLine(command); //也可以用這種方式輸入要執(zhí)行的命令
//p.StandardInput.WriteLine("exit"); //不過要記得加上Exit要不然下一行程式執(zhí)行的時候會當(dāng)機(jī)
//必須創(chuàng)建可以自動轉(zhuǎn)換完成以后,結(jié)束進(jìn)程的代碼
return p.StandardOutput.ReadToEnd(); //從輸出流取得命令執(zhí)行結(jié)果
}
------------------------------------
另一種方法: 用MEncoder轉(zhuǎn)換視頻文件為Flv
mencoder 轉(zhuǎn)換視頻注意事項(xiàng)
1、下載 mencoder.exe 和 mplayer.exe
2、將mencoder.exe 所在文件夾,加入環(huán)境變量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, 參數(shù) -o 代表輸出路徑
-of lavf //參數(shù) -of :輸出文件的格式,flv文件是屬于lavf格式
-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames //lavf格式的參數(shù)設(shè)置,對于轉(zhuǎn)換flv格式,最好加上這個長句。意思是不用bframes。
-oac mp3lame //輸出音頻編碼器,這里用的mp3lame
-lameopts abr:br=56 //是專門針對mp3lame的參數(shù)設(shè)置,abr:br=56,是設(shè)置音頻比特率為56
-ovc lavc //輸出視頻編碼器
//視頻編碼器的設(shè)置:
-lavcopts
vcodec=flv: //指定視頻編碼器為flv
vbitrate=500: //指定視頻比特率為500 ,低品質(zhì)為150kb/s,中等品質(zhì)為400kb/s,高品質(zhì)為700kb/s
mbd=2: //宏模塊選擇算法,值為0~2默認(rèn)為0,值越大轉(zhuǎn)換越緩慢,但在品質(zhì)和文件大小方面有好處
mv0: //編譯每個宏模塊并選擇最好的一個,當(dāng)mbd=0時無效;
trell: //會稍微增加品質(zhì),mbd>0時效果更明顯;
v4mv: //量子化網(wǎng)格搜索,對每8×8block找到最優(yōu)化編碼
cbp: //只能和trell一期使用,評估失真的圖像塊編碼;
last_pred=3: //與上一幀相比的移動數(shù)量預(yù)測,值為0~99,1~3比較合適,大于3時對品質(zhì)的提高已經(jīng)無關(guān)緊要,但卻會降低速度;
dia=4: //移動搜索范圍,值為-99~6,對于快速轉(zhuǎn)換,-1是個不錯的值,如果不是很重視速度,可以考慮2~4;
cmp=6: //值為1~2000,默認(rèn)為0,設(shè)置用于全象素移動預(yù)算的比較函數(shù)
vb_strategy=1 //對動作很大的場景會有幫助,對有些視頻,設(shè)置vmax_b_frames會有損品質(zhì),加上vb_strategy=1會好點(diǎn)。
//mencoder的參數(shù)
-vf scale=512:-3 //-vf表示視頻格式scale是縮放,512:-3表示強(qiáng)制將寬度設(shè)置為512,高度寫為-3表示保持高寬比,也可以設(shè)置為-1或-2,
-ofps 12 /*輸出視頻的幀頻,一般,用于flash播放的視頻幀頻高了沒有意義,反而會增加視頻文件大小,但如果ofps設(shè)置的不合適,
比如源視頻幀頻不是ofps的整數(shù)倍,可能會導(dǎo)致轉(zhuǎn)換后的視頻、音頻不同步,
似乎可以將這一參數(shù)改為-noskip來解決這一問題;*/
-srate 22050 //音頻采樣率一般為22050或44100。
----------------------------------------------------------
Mencoder中文參考手冊地址
http://www.mplayerhq.hu/DOCS/HTML/zh_CN/
----------------------------------------------------------
參數(shù)說明:
-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 (經(jīng)實(shí)驗(yàn),目前divx比xvid要快,在使用vhq功能時會稍稍影響速度)
-vf scale=480:-3 -sws 9 : //變換至480像素寬,高度按比例縮放
"C:\dance.avi" -o "C:\dance.XviD.avi" //源文件地址 -o到 輸出文件地址
2> 2.txt?。骸?/編碼日志記錄地址
--------------------參數(shù)選擇分析------------------------
18fps:這是以前通過多次測試得來的,一般電視劇和動畫片15fps就夠用了。如果場景變換不是很大,13fps就能保證播放流暢。降低fps值可以使壓縮速度更快,對于電影,特別是動作片,要保證流暢無馬賽克,就要提高fps,最大24就夠了
選擇18fps足以應(yīng)付大部分,性價(jià)比高
音頻采樣率32KHz:從錄音設(shè)備的得來的靈感(以下質(zhì)量說明為比喻,前面的參數(shù)時原有的)
32KHz - 32Kbps - mono比電話音好些
44KHz - 64Kbps - J-Stereo 收音機(jī)質(zhì)量
44KHz -128Kbps - J-Stereo 通行的MP3標(biāo)準(zhǔn)質(zhì)量
44KHz -192Kbps - Stereo接近CD質(zhì)量
經(jīng)過多次試驗(yàn)(以上是區(qū)間范圍,自己可以根據(jù)需要選擇)
壓片最省空間 - 使用32KHz - 32Kbps - mono,可以保證內(nèi)容;
質(zhì)量要求不高 - 可用32KHz - 128Kbps - mono 性價(jià)比比較高;
空間大高質(zhì)量 - 44KHz -192Kbps - Stereo對大SD卡用戶。
視頻采樣率bitrate=150:
80 - 最小空間占用率,質(zhì)量最差 轉(zhuǎn)換速度稍快 (與最低音頻配合,大小可1min=1M)
122 - 對底配置機(jī)器的小卡用戶性價(jià)比較高(換面變化快回有馬賽克)
150 - 滿足底配置機(jī)器對畫質(zhì)的基本要求(對非動作片比較完美)
248 - 大卡用戶的經(jīng)濟(jì)選擇 (質(zhì)量較好)
350 - 大卡高配置的機(jī)器 (經(jīng)濟(jì)的體現(xiàn)機(jī)器優(yōu)勢)
更高- 用戶自己試吧
總的來說,輸出文件的大小受視頻采樣率、音頻采樣率影響效果顯著,畫面尺寸、fps值也影響大小。怎樣設(shè)置參數(shù)要看你的個人實(shí)際需要與機(jī)器配置。
另外,還有很多不知道的參數(shù),請大家找找看。
比如:pess2、pess3、動態(tài)FPS、屏幕截取、時間區(qū)間設(shè)置等
------------------------------------------------------------------
關(guān)于音量調(diào)節(jié):
carlwang 寫道:個人習(xí)慣是不用耳機(jī)的,天熱帶著不舒服,所以聲音我一向偏大。
我的經(jīng)驗(yàn)如果片源是DVDrip,一般在5以上,如果是rmvb一般2就夠了,再大就有爆音了。
-oac mp3lame -lameopts mode=2:cbr:br=64:vol=2 大家來試試看吧
------------------------------------------------------------------------
轉(zhuǎn)換結(jié)束,會顯示
Pos: 226.8s 297f (100%) 48fps Trem: 0min 5mb a-v:-0.009 [142:56]
這里邊的內(nèi)容,小括號里應(yīng)該是轉(zhuǎn)換的進(jìn)度,中括號里的內(nèi)容很重要,142表示視頻比特率,56表示音頻比特率(比特率這個詞不知道用的對不對......)
轉(zhuǎn)換結(jié)束,會顯示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行信息我想大家都能明白,其中我一直關(guān)注的是那個142.564kbit/s,
用過flash8自帶轉(zhuǎn)換工具的應(yīng)該知道高級設(shè)置里有個選項(xiàng)是最大數(shù)據(jù)速率,
當(dāng)選中中等畫質(zhì)的時候,是400kb/s,而低品質(zhì)也是150kb/s,也就是說,用那句命令轉(zhuǎn)換的視頻,其畫質(zhì)都不如品質(zhì)的,那么,品質(zhì)怎么樣呢?
看一下命令:
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選項(xiàng)設(shè)置
要設(shè)置視頻編碼的參數(shù)了!
codec=flv > 說的是用的flv編碼器,這個咱不理;
vbitrate=150 > video bit rate!視頻數(shù)據(jù)速率!就是它了!原來我設(shè)的是150啊!
改成vbitrate=1000,再試試看!
結(jié)果,和前一次一模一樣......
冷靜下來,去往上看了一下官方文檔,這個參數(shù)是最大數(shù)據(jù)速率,最大嘛,你設(shè)多大都一樣啊,看來不是靠它來控制品質(zhì)。
結(jié)論,設(shè)置品質(zhì)有2種途徑:
1、設(shè)置-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越大品質(zhì)越高,如果需要快速編碼,設(shè)置為-1,設(shè)為4時已經(jīng)很有利于品質(zhì)了;
cmp越大品質(zhì)越高,默認(rèn)值0,是最快速的,一般設(shè)到3,設(shè)為6已經(jīng)只會細(xì)微提高品質(zhì)了,但速度會慢
vb_strategy,大概是1或者0,默認(rèn)值可能為0,我這里設(shè)為1,會對編碼有幫助,這個參數(shù)我自己沒有過多推敲,可能并不影響品質(zhì)......
2、加-sws選項(xiàng),看下面的命令:
-sws 3
只是加一個3進(jìn)去,轉(zhuǎn)換后的效果和前面一種方法大致相同,視頻數(shù)據(jù)速率都是422.5kb/s左右,解釋一下
-sws就是用來設(shè)置品質(zhì)的,默認(rèn)值為2,那么,為什么不用這種簡單的方式呢?我個人認(rèn)為,用前面一種方法有利于找到一個速度和品質(zhì)的平衡點(diǎn),畢竟變化的范圍比較大。
個人見解:
如此視頻格式的轉(zhuǎn)換,最好使用客戶端轉(zhuǎn)換,轉(zhuǎn)換好了再傳到服務(wù)端,因此需要做客戶端的一個視頻上傳小軟件
相關(guān)文章
ASP.NET Core中如何利用Csp標(biāo)頭對抗Xss攻擊
這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何利用Csp標(biāo)頭對抗Xss攻擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09ASP.net(c#)用類的思想實(shí)現(xiàn)插入數(shù)據(jù)到ACCESS例子
ASP.net(c#)用類的思想實(shí)現(xiàn)插入數(shù)據(jù)到ACCESS例子...2007-07-07asp.net mvc4 mysql制作簡單分頁組件(部分視圖)
這篇文章主要介紹了asp.net mvc4 mysql制作簡單分頁組件,附部分視圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10ASP.NET MVC中將控制器分離到類庫的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET MVC中將控制器分離到類庫的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2015-06-06ASP.NET MVC+EF在服務(wù)端分頁使用jqGrid以及jquery Datatables的注意事項(xiàng)
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC+EF在服務(wù)端分頁使用jqGrid以及jquery Datatables的注意事項(xiàng),感興趣的小伙伴們可以參考一下2016-06-06