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
Mencoder 转 flv
mencoder -ffourcc FLV1 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -of lavf -oac mp3lame -lameopts aq=9:cbr:br=64:vol=2 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:acodec=mp3:abitrate=56 -vf scale=320:270,expand=320:270:::1,crop=320:270:0:0 -ofps 18 -srate 22050 input.xxx -o output.flv
质量控制参数:vcodec=flv:vbitrate=200:
在命令行中输入这行代码(注意: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的官方文档;
-lavcopts vcodec=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的设置比较重要,还有很多参数本文没有涉及到。
分享到:
相关推荐
如果文件格式需要预先转换,程序会先调用`processAVI()`,该方法使用Mencoder将文件转换为AVI,然后再次调用`processFLV()`将AVI转换为FLV。 在`processAVI()`方法中,你需要通过调用Mencoder来执行转换操作。这...
**mencoder视频转换工具详解** mencoder是一款强大的命令行视频编码和转换工具,它是MPlayer项目的组成部分,由其开发团队创建。MPlayer以其强大的播放能力而闻名,而mencoder则在视频处理领域提供了丰富的功能,...
总结来说,这个在线FLV转换代码项目利用了mencoder进行视频格式转换,并通过ASP.NET构建了一个用户友好的Web界面,允许用户方便地在线转换和播放视频。同时,它还结合了Flash Player组件,提供流畅的视频播放体验。...
通过上述介绍,我们了解了如何在ASP.NET环境中利用FFmpeg和MEncoder实现FLV视频转换。这不仅有助于提高视频内容的兼容性和可访问性,还可以根据不同的应用场景灵活调整输出质量,满足用户需求。对于开发人员而言,...
详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv43260.dll东西放到C:WindowsSystem32下面 这几天在写一个视频管理系统,...
1. **构建命令**:根据需要设置输入文件、输出文件、编码参数等,构建FFmpeg或MEncoder的命令行字符串。 2. **执行命令**:使用`Runtime.getRuntime().exec(command)`或`ProcessBuilder`创建并执行命令。 3. **处理...
ffmpeg能解析的格式:(asx,asf,mpg,wmv,mkv,3gp,mp4,mov,avi,flv等),对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.
- 对于wmv9、rm、rmvb等FFmpeg不能直接解析的格式,可以通过其他工具(如mencoder)先将其转换为FFmpeg可解析的格式(如avi),然后再进行进一步的转换处理。 #### 二、Java程序实现视频转换 **2.1 Java程序结构*...
如果文件类型不支持ffmpeg解析,我们需要先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式,然后再使用ffmpeg进行视频转换。_ _在Java中,我们可以使用File类来检查文件的类型,并使用substring方法来获取...
当遇到FFmpeg无法解析的格式(如wmv9、rm、rmvb等)时,可以使用mencoder工具将这些格式转换为FFmpeg支持的格式(例如avi),然后再使用FFmpeg进行转换。 4. Java代码实现 下面的Java代码示例展示了如何通过Java...
对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式. 实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具.
这些格式可以通过其他工具(如mencoder)先转换为FFmpeg能够解析的格式(如avi)再进行处理。 #### 五、数据库设计 - **数据库**: MySQL 5.5 - **数据表**: `tb_media` - `id`: 主键 - `title`: 视频名称 - `src...
转换过程由`flv_convert_get_thumb`函数完成,它接收三个参数:输入视频文件路径、输出预览图路径和输出MP4文件路径。 ```php function flv_convert_get_thumb($in, $out_thumb, $out_vid) { // 获取视频预览图 $...
// 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式. else if (type.equals("wmv9")) { return 1; } else if (type.equals("rm")) { return 1; } else if (type.equals("rmvb")) { ...