在ASP.Net中实现flv视频转换的代码_实用技巧

实际上是利用.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,那么,为什么不用这种简单的方式呢?我个人认为,用前面一种方法有利于找到一个速度和品质的平衡点,毕竟变化的范围比较大。 

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

时间: 2024-10-24 18:42:42

在ASP.Net中实现flv视频转换的代码_实用技巧的相关文章

asp.net中控制反转的理解(文字+代码)_实用技巧

对IOC的解释为:"Inversion of control is a common characteristic of frameworks, so saying that these lightweight containers are special because they use inversion of control is like saying my car is special because it has wheels." 我想对这一概念执行 一个个人的阐述,以方便

在Asp.net中使用JQuery插件之jTip代码_实用技巧

默认支持两个参数: width宽度,default value :250px link 要link的URL对应的Source code是: 复制代码 代码如下: var params = parseQuery( queryString ); if(params['width'] === undefined){params['width'] = 250}; if(params['link'] !== undefined){ $('#' + linkId).bind('click',function

在asp.NET 中使用SMTP发送邮件的实现代码_实用技巧

核心代码: 复制代码 代码如下: public class Mail { #region 邮件参数 static public string accountName = System.Configuration.ConfigurationManager.AppSettings["SmtpAccountName"]; static public string password = System.Configuration.ConfigurationManager.AppSettings[

Asp.Net中的字符串和HTML十进制编码转换实现代码_实用技巧

Asp.Net将字符串转为区码位编码,或者将区码位编码字符串转为对应的字符串内容. 数字;这种编码其实就是将单个字符转为对应的区码位(数字),然后区码位前缀加上"",后缀加上";"组成,对于这种编码的字符串,浏览器会自动解析为对应的字符. Asp.Net字符串和编码转换源代码和测试代码如下: using System; using System.Text.RegularExpressions; public partial class purchase_proper

asp.net中GridView编辑,更新,合计用法示例_实用技巧

本文实例讲述了asp.net中GridView编辑,更新,合计用法.分享给大家供大家参考,具体如下: 前台代码: <asp:GridView ID="tabgv" runat="server" DataKeyNames="ysId" ShowFooter="True" OnRowDataBound="GridView1_RowDataBound" OnRowCreated="GridView

asp.net5中的用户认证与授权(1)_实用技巧

就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview. asp.net5中,关于用户的认证和授权提供了非常丰富的功能,如果结合ef7的话,可以自动生成相关的数据库表,调用也很方便. 但是,要理解这么一大堆关于认证授权的类,或者想按照自己项目的特定要求对认证授权进行定制,确实很头疼.为了解决这个问题,需要从根本上理解认证和授权的机制,不过这不是个简单的事情,一些概念也比较抽象,

ASP.NET中实现jQuery Validation-Engine的Ajax验证_实用技巧

见下图: 验证的例子:http://www.position-relative.net/creation/formValidator/ 官方地址: http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/ 这个插件支持大部分的浏览器,但由于有使用到了css3的阴影和圆角样式,所以在IE浏览器下无法看到圆角和阴影效果(IE 9 支持圆角效果). 本文主要内容是

asp.net中Table生成Excel表格的方法_实用技巧

本文实例讲述了asp.net中Table生成Excel表格的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/19

ASP.NET中URL Rewrite的具体实现方法_实用技巧

之前觉得这个话题已经被谈滥了.URL Rewrite早已经被广大开发人员所接受,网上关于URL Rewrite的组件和文章也层出不穷,但是总是让我感觉意犹未尽,于是最终还是忍不住提笔写了这系列文章.这些文章不会谈论URL Rewrite的价值与意义,而只会谈论纯技术的内容.文章中也不会有详尽地实现分析,而是结合了我的经验,从应用角度来讲解这个话题.您已经知道的,您还不知道的,别处已经讲过的,或者还没有讲过的,希望这系列文章的"旧事重提"不会让您觉得沉闷,并且能让您了解ASP.NET中U