在ASP.Net中实现flv视频转换的代码
在ASP.Net中实现flv视频转换的代码
发布时间:2016-12-29 来源:查字典编辑
摘要:实际上是利用.Net中的Process对象来实现的。stringstr=@"d:test.avid:test_allen.flv";RunF...

实际上是利用.Net中的Process对象来实现的。

stringstr=@"d:test.avid:test_allen.flv";

RunFFMpeg(str);

//运行FFMpeg的视频解码,

publicvoidRunFFMpeg(stringstrCmd)

{

//创建并启动一个新进程

Processp=newProcess();

//设置进程启动信息属性StartInfo,这是ProcessStartInfo类,包括了一些属性和方法:

p.StartInfo.FileName="ffmpeg.exe";//程序名

p.StartInfo.Arguments="-i"+strCmd;//执行参数

p.Start();

}

//运行Cmd.exe执行Dos命令,并返回执行结果

publicstringRunCmd(stringcommand)

{

//创建并启动一个对进程

Processp=newProcess();

//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要不然下一行程式執行的時候會當機

//必须创建可以自动转换完成以后,结束进程的代码

returnp.StandardOutput.ReadToEnd();//從輸出流取得命令執行結果

}

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

另一种方法:用MEncoder转换视频文件为Flv

mencoder转换视频注意事项

1、下载mencoder.exe和mplayer.exe

2、将mencoder.exe所在文件夹,加入环境变量Path里面,如C:mplayer

3、微软键+R,输入cmd,命令行打入如下语法

mencoderd:test.avi-od:testflv.flv-oflavf-lavfoptsi_certify_that_my_video_stream_does_not_use_b_frames-oacmp3lame-lameoptsabr:br=56-ovclavc-lavcoptsvcodec=flv:vbitrate=100:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1-vfscale=512:-3-ofps12-srate22050

语法说明:

mencoderd:test.avi-od:testflv.flv//将D:test.avi输出到d:testflv.flv,参数-o代表输出路径

-oflavf//参数-of:输出文件的格式,flv文件是属于lavf格式

-lavfoptsi_certify_that_my_video_stream_does_not_use_b_frames//lavf格式的参数设置,对于转换flv格式,最好加上这个长句。意思是不用bframes。

-oacmp3lame//输出音频编码器,这里用的mp3lame

-lameoptsabr:br=56//是专门针对mp3lame的参数设置,abr:br=56,是设置音频比特率为56

-ovclavc//输出视频编码器

//视频编码器的设置:

-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的参数

-vfscale=512:-3//-vf表示视频格式scale是缩放,512:-3表示强制将宽度设置为512,高度写为-3表示保持高宽比,也可以设置为-1或-2,

-ofps12/*输出视频的帧频,一般,用于flash播放的视频帧频高了没有意义,反而会增加视频文件大小,但如果ofps设置的不合适,

比如源视频帧频不是ofps的整数倍,可能会导致转换后的视频、音频不同步,

似乎可以将这一参数改为-noskip来解决这一问题;*/

-srate22050//音频采样率一般为22050或44100。

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

Mencoder中文参考手册地址

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

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

参数说明:

-srate32000://声音采样率,22050hz

-afchannels=2:2:1:0:1:1//右声道

-afchannels=2:2:0:0:0:1//左声道

-stereo0//立体声

-oacmp3lame://输出音频使用mp3编码

-lameoptsmode=2:cbr:br=32://码率br=32kbit

-ovcxvid-xvidencoptsbitrate=200://以xvid方式编码,码率200kbps(经实验,目前divx比xvid要快,在使用vhq功能时会稍稍影响速度)

-vfscale=480:-3-sws9://变换至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就够了,再大就有爆音了。

-oacmp3lame-lameoptsmode=2:cbr:br=64:vol=2大家来试试看吧

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

转换结束,会显示

Pos:226.8s297f(100%)48fpsTrem:0min5mba-v:-0.009[142:56]

这里边的内容,小括号里应该是转换的进度,中括号里的内容很重要,142表示视频比特率,56表示音频比特率(比特率这个词不知道用的对不对......)

转换结束,会显示2行文字:

Videostream:142.564kbit/s(17820B/s)size:4046677bytes227.080secs2700frames

Audiostream:56.938kbit/s(7117B/s)size:1616197bytes227.082secs

这2行信息我想大家都能明白,其中我一直关注的是那个142.564kbit/s,

用过flash8自带转换工具的应该知道高级设置里有个选项是最大数据速率,

当选中中等画质的时候,是400kb/s,而低品质也是150kb/s,也就是说,用那句命令转换的视频,其画质都不如品质的,那么,品质怎么样呢?

看一下命令:

mencoder"D:music.wmv"-o"D:output.flv"-oflavf-oacmp3lame-lameoptsabr:br=56-ovclavc-lavcoptsvcodec=flv:vbitrate=150:mbd=2:mv0:trell:v4mv:cbp:last_pred=3-srate22050

分析:

-ovc>大概是outputvideocodec的缩写,制定输出视频编码,选用的lavc,什么意思?说是用了libavcodec的编码器;

-lavcopts>是lavc的options选项设置

要设置视频编码的参数了!

codec=flv>说的是用的flv编码器,这个咱不理;

vbitrate=150>videobitrate!视频数据速率!就是它了!原来我设的是150啊!

改成vbitrate=1000,再试试看!

结果,和前一次一模一样......

冷静下来,去往上看了一下官方文档,这个参数是最大数据速率,最大嘛,你设多大都一样啊,看来不是靠它来控制品质。

结论,设置品质有2种途径:

1、设置-lavcopts,看这样一句命令:

-lavcoptsvcodec=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选项,看下面的命令:

-sws3

只是加一个3进去,转换后的效果和前面一种方法大致相同,视频数据速率都是422.5kb/s左右,解释一下

-sws就是用来设置品质的,默认值为2,那么,为什么不用这种简单的方式呢?我个人认为,用前面一种方法有利于找到一个速度和品质的平衡点,毕竟变化的范围比较大。

个人见解:

如此视频格式的转换,最好使用客户端转换,转换好了再传到服务端,因此需要做客户端的一个视频上传小软件

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新asp.net教程学习
热门asp.net教程学习
编程开发子分类