[转]用Mencoder进行任意视频格式转换成flv
前言:
本文是笔者对Mencoder的一些基本认识,对于初学者,或许可以当作教程来看。如果对Mencoder有很深的研究,欢迎与我交流。qq:151952789。msn:tangyifei830217@hotmail.com。
Mencoder简介:
Mencoder是Mplayer自带的编码工具(Mplayer是Linux下的播放器,开源,支持几乎所有视频格式的播放,现在有windows和Mac版本)。
Mplayer的获得与配置:
Mplayer windows版本下载列表:http://www5.mplayerhq.hu/MPlayer/releases/win32/
列表中会有版本发布日期,可以挑选最新的版本,也可以选择old/去下载老的版本,笔者用的是6月份的版本。下载后解压到某个文件夹中即可。
Codecs下载列表:http://www5.mplayerhq.hu/MPlayer/releases/codecs/
选择windows-all-********.zip(*表示年月日)下载,将zip包中的文件夹下所有文件,包括*.dll、*.acm、*.ax等等全部copy到Mplayer根目录下的codecs文件夹中。
此时最好把Mplayer.exe所在路径,同时也是Mencoder.exe所在路径添加到环境变量path中。
现在可以试试用Mplayer播放视频,比如有个视频位于D:\music\APerfectMatch.wmv,那么可以打开一个cmd窗口,输入mplayer “D:\music\APerfectMatch.wmv”,感受一下来自Linux的播放器吧,可以通过键盘来操纵。
Mencoder转换视频格式:
以将各种格式转换为flv格式为例(flv格式是flash支持的视频格式):
mencoder "E:\test.m2p" -o "E:\output.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=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -vf scale=512:-3 -ofps 12 -srate 22050
在命令行中输入这行代码(注意:windows的命令行是不支持换行的),按回车运行,一段时间之后就可以得到一个.flv文件,播放一下看看品质如何(可以直接用Mplayer播放)。
下图是我这边转换的效果对比,左边是原视频,右边是转换后的视频:
所有人都会觉得,转换后品质下降了很多,确实是这样,同时可以发现转换后的文件由原来的13M变成了1M,如果要提高品质,可以将vbitrate=500改为vbitrate=5000。
转换后的效果对比,左边是原视频,右边是转换后的视频:
品质几乎一样了,但同时,转换文件变成了6M。关于命令中的一些参数,解释一下:
-o "E:\output.flv":是输出文件路径;
-of lavf:是输出文件格式,这里不是flv而是lavf,是因为flv属于libavformat;
-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames:-lavfopts表示对lavf进行一些设置,设置的内容就是i_certify_that_my_video_stream_does_not_use_b_frames,翻译成中文就是:我确定,我的视频不用B frames,对于转换flv格式,最好加上这个参数,否则可能会报错,如图:
-oac mp3lame:oac=output audio codec,输出音频编码器,这里用的mp3lame;
-lameopts abr:br=56:lame options,是专门针对mp3lame的参数设置,abr:br=56,是设置音频比特率为56(比特率:每秒钟输出的音频大小,单位kb/s);
-ovc lavc:ovc=output video codec,输出视频编码器,lavc表示one of libavcodec’s video codec,输出格式为libavformat之一,编码器当然也是libavcodec之一啦,至于libavodec里都有哪些编码器,可以查看Mplayer的官方文档;
-lavcoptsvcodec=flv:vbitrate=500:mbd=2:mv0:v4mv:trell:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1:对lavc进行一些设置,详细介绍如下:
vcodec=flv:指定视频编码器为flv;
vbitrate=500:指定视频比特率为500,这个参数很重要,vbitrate大了可以让视频品质增加,但会让文件变的很大(可以参考flash8自带的转换工具的参数:低品质为150kb/s,中等品质为400kb/s,高品质为700kb/s)。
mbd:宏模块选择算法,值为0~2默认为0,值越大转换越缓慢,但在品质和文件大小方面有好处;
mv0:编译每个宏模块并选择最好的一个,当mbd=0时无效;
v4mv:会稍微增加品质,mbd>0时效果更明显;
trell:量子化网格搜索,对每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会好点。
以上是对-lavcopts的详细解释,接下来继续说明mencoder的参数:
-vf scale=512:-3:-vf表示视频格式,scale是缩放,512:-3表示强制将宽度设置为512,高度写为-3表示保持高宽比,也可以设置为-1或-2,具体表示什么,有兴趣的可以尝试一下。如果要强制转化为统一大小,可以直接写-vf scale=640:480,但笔者个人建议用-3来保持高宽比。-vf里还有expand和crop参数,例如:-vf scale=512:384,expand=512:384:::1,crop=512:384:0:0,expand表示膨胀,crop表示裁剪;
-ofps 12:输出视频的帧频,一般,用于flash播放的视频帧频高了没有没有意义,反而会增加视频文件大小,但如果ofps设置的不合适,比如源视频帧频不是ofps的整数倍,可能会导致转换后的视频、音频不同步,似乎可以将这一参数改为-noskip来解决这一问题;
-srate 22050:音频采样率一般为22050或44100。
对于转换flv格式,lavsopts的设置比较重要,还有很多参数本文没有涉及到,在笔者参考的文献中会有具体的说明,感兴趣的可以去看一下。我对于Mencoder的认识主要也是来源于下面2篇文章,实践的比较少,如果有理解和翻译的失误,再次欢迎与我交流。
参考文献:
《Mplayer官方文档,英文版》http://www.mplayerhq.hu/DOCS/HTML-single/en/MPlayer.html
《Linux Reviews》http://linuxreviews.org/man/mencoder/
posted @ 2008-12-08 17:27 王培 阅读(130) | 评论 (0) | 编辑
c#中调用Ffmpeg转换视频格式的问题 我的目的是调用ffmpeg转化.avs文件为.flv文件,参数这些是没有问题的,我在命令行里面运行可以成功转换视频格式. 现在我把它写成一个函数在程序里面调用,就出问题了:(
public int ConvertVideoToFLV()
{
int re = 999;
Process p = new Process();//建立外部调用线程
p.StartInfo.FileName = @"f:\flv\ffmpeg.rev10464\ffmpeg.exe";//调用外部程序的绝对路径
p.StartInfo.Arguments = "-y -i sss.avs -ab 56 -b 500k programout.flv";//参数(FFMPEG参数)
p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动线程
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中
p.StartInfo.CreateNoWindow = false;//不创建进程窗口
p.ErrorDataReceived = new DataReceivedEventHandler(Output);//FFMPEG输出流时候把流的处理过程转移到Output
p.Start();//启动线程
p.BeginErrorReadLine();//开始异步读取
p.WaitForExit();//阻塞等待进程结束
p.Close();//关闭进程
p.Dispose();//释放资源
return re;
}
调试以后发现程序运行很正常,但就是不进行实际的转换. 我对进程使用也不是很熟悉, 请高人指点一下哪里出了问题!
网友回复:你没有使用操作系统外壳程序启动,我想是这样的,你设置成使用操作系统外壳程序启动程序
可能是转换过程需要视频解码之类什么的!!
网友回复:帮LZ顶
网友回复:“/”应用程序中的服务器错误。
要重定向 IO 流,Process 对象必须将 UseShellExecute 属性设置为 False。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的具体信息。
异常具体信息: System.InvalidOperationException: 要重定向 IO 流,Process 对象必须将 UseShellExecute 属性设置为 False。
设置成true以后会报错成这样...
网友回复:我查看了进程,发现函数调用的时候ffmpeg.exe进程已经运行,但是cpu显示为0,根本没有执行转换. 高手看看是什么原因引起的,多谢!
网友回复:解决了. 是需要设置一个工作目录~ 结贴
网友回复:public static string VideoConvertFlv(string FromName, string WidthAndHeight, string ExportName)
{
string ffmpeg = HttpContext.Current.Server.MapPath("~/FLV/ffmpeg.exe");
string Command =" -i " FromName " -y -ab 56 -ar 22050 -b 500 -r 15 -s " WidthAndHeight " " ExportName; //Flv格式
//string Command = "E:\\FFmpeg\\ffmpeg.exe -i E:\\ClibDemo\\VideoPath\\admin\\a.wmv -y -ab 56 -ar 22050 -b 500 -r 15 -s 320*240 " ExportName;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = ffmpeg;
p.StartInfo.Arguments = Command;
p.StartInfo.WorkingDirectory = HttpContext.Current.Server.MapPath("~/FLV/");
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = false;
//开始执行
p.Start();
p.BeginErrorReadLine();
p.WaitForExit();
p.Close();
p.Dispose();
//p.StandardInput.WriteLine(Command);
//p.StandardInput.WriteLine("Exit ");
return ExportName;
}
protected void Button1_Click(object sender, EventArgs e)
{
strFile = HttpContext.Current.Server.MapPath("~/FLV/祝福劲牌(大碟版).mpg"); ;
VideoConvertFlv(strFile, "480*360", "zh.flv");
VideoConvertImg(strFile, "480*360", "zh.jpg");
}
分享到:
相关推荐
奇客视频转换器支持1000多种格式的一键批量转换。 稳定的性能和超强的体验 易于使用: 一键拖放上传视频,一键操作转换视频,分两步完成视频转换 功能丰富: 支持市场上常见视频格式之间的转换,并提供各种视频...
"视频转换_视频转换器_炬力mp3固件_视频转换mp3_"这个标题揭示了几个关键知识点,我们将逐一详细解释。 首先,"视频转换"指的是将一种视频格式转化为另一种格式的过程。这可能出于多种原因,比如兼容性问题(不同...
曦力音视频转换专家,支持MAC OS。 强大至近乎完美的音视频转换专家,支持转换几乎所有格式的音视频转换AVI、MPEG、WMV、DivX、MP4、H.264/AVC、RM、3GP、FLV、MP3、WMA、WAV、RA、AAC。针对多种数码设备,提供数十...
《视频转换大师绿色版——万能转换神器详解》 在数字化时代,视频文件的格式繁多,不同设备、平台对视频格式的要求各异,这给我们的观看和分享带来了不便。为了解决这一问题,"视频转换大师绿色版"应运而生,它是一...
迅捷视频转换器是一款功能强大的多媒体格式转换工具,专为用户解决各种视频、音频、图片格式不兼容问题而设计。这款软件集成了多种格式的转换功能,能够满足用户在不同设备间分享媒体文件的需求,确保内容能在手机、...
在IT领域,视频转换工具是不可或缺的一部分,它们帮助用户处理不同格式的视频文件,以便在各种设备上播放或进行编辑。"视频转换工具大集合"这个主题涵盖了多种类型的转换软件,如狸窝软件旗下的全能视频格式转换器,...
视频转换器带注册码支持WAV,MP3,WMA,AAC,M4A,OGG,APE,AC3,RMA等格式的音频,同时支持抓取AVI,VCD,SVCD,DVD,MPG,WMV,ASF,RM,RMVB,FLV,F4V,MOV,QT,MP4,MPEG4,3GP,3G2,MKV,TS,TP,MTS,M2TS,MOD,TOD,SDP,YUV等视频文件的...
【ATJ2127 视频转换工具】是一款便捷的多媒体处理软件,主要用于将不同格式的视频文件转换成用户所需的格式。这款工具通常适用于那些需要在不同设备间分享视频或者适应不同播放器需求的用户。它具备简洁的界面和易...
视频转换成GIF工具是一种便捷的应用程序,专为将视频片段转化为动态图像格式GIF而设计。这种工具在各种场景下都非常实用,比如社交媒体分享、论坛讨论或是制作趣味表情包。GIF是一种流行的网络格式,因为它能以较小...
闪电视频转换王是一款专业好用的视频转换工具软件。软件采用了最先进的编码和解码技术,可以将各种主流视频格式等视频格式转换为各种用户想要的格式还支持任意分割,截取各种视频音频文件,转换速度和转换质量极佳。...
狸窝超级全能视频转换器 2.3.0.5 中文绿色免费版 ———————————————— 使用说明:狸窝超级全能视频转换器 (Leawo Video Converter) 是一款免费软件,使用前先绿化,运行 !)Install.bat(Vista/...
mediAvatar 3D Converter是一款用来将2D视频转换到3D视频的转换工具。2D转换为3D是将普通视频转换成3D视频,可以在普通电视或者3D电视上观看。3D格式转换,如果你没有3D电视,可以将左右/上下格式3D视频转换成红蓝...
《媒体播放器管理工具 4.46:锐族MP3视频转换利器》 在数字化时代,媒体播放器和视频转换工具成为了我们日常生活中不可或缺的一部分。锐族MP3视频转换工具,作为一款专为锐族品牌设备设计的软件,旨在帮助用户轻松...
在Java编程环境中,开发一个视频转换工具类是一个高级任务,涉及到多媒体处理和文件I/O操作。这个"java视频转换工具类"显然提供了这样的功能,能够将视频文件转换为不同的格式,如mp4、ogg和flv等。这些格式在互联网...
一款3GP视频转换软件。可以将mpg, mpeg1, mpeg2, mpeg4, wmv, mp4, 3gp, mov, rm, dv, yuv, h264 格式视频文件转换成 3GPP 格式视频文件,将3GP 格式视频文件转换到 MPEG, AVI, VOB, MPEG4, WMV格式视频文件。提取3...
《万能视频转换器——轻松实现多格式视频互转》 在数字媒体日益普及的今天,我们经常会遇到不同格式的视频文件,而不同的设备或平台对视频格式的支持情况不尽相同。这时,一款强大的视频转换工具就显得尤为重要。...
【纽曼A26视频转换】是一个针对纽曼A26设备进行视频格式转换的主题,主要涉及的是如何将不同格式的视频文件转换成适合纽曼A26播放的格式。在数字媒体领域,设备对视频格式的支持至关重要,因为不同的设备可能支持...
《狸窝全能视频转换器4.2.0.2免安装版》是一款功能强大的影音软件,专注于各种视频格式的转换工作。它以其易用性、兼容性和高效性赢得了用户的广泛好评。这款工具允许用户轻松地将不同的视频文件转换为他们需要的...
魅族视频转换器是一款专为魅族M6用户设计的软件工具,旨在帮助用户将不同格式的视频文件转换成魅族M6支持的播放格式,从而让用户能够在设备上流畅地观看喜爱的视频内容。这款软件的功能强大且操作简便,不仅支持多种...
在IT领域,视频转换工具是不可或缺的一部分,尤其对于那些经常处理多媒体文件的用户。本话题主要聚焦于一个名为"AVConverter"的avi视频转换工具,它具有广泛的支持,能够处理几乎所有的视频格式。 首先,我们要了解...