转:FFMPEG使用参数详解
目前又开始测MPEG1和MPEG2的解码,在准备编码好的测试序列过程中,需要通过编码器来进行原始视频序列的编码操作,以生成我们需要的测试数据。由于IPP example提供的Encoder不支持MPEG1,经过查询,决定MPEG1的编码使用FFMPEG。FFMEPG是个啥子东西呢,这里简单说一下:FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。
FFmpeg的官方网址是 http://ffmpeg.mplayerhq.hu/ 。
中文Wiki是 http://www.ffmpeg.com.cn/ ,资料很多。
由于其免费开源性,遂决定就用它来进行视频格式的压缩转换啦。首先再来啰嗦一点儿基本的FFmpeg主主要组成部分:
1). libavcodec: 一个包含了所有FFmpeg音视频编解码器的库。
2). libavformat: 一个包含了所有的普通音视格式的解析器和产生器的库。
三个实例程序(这三个实例基本可以作为API使用手册):
ffmpeg:命令行的视频格式转换程序。
ffplay:视频播放程序。(需要SDL支持)
ffserver:多媒体服务器
了解了它的大体组织结构,就明确了ffmpeg当然是我在寻找视频格式压缩转换的第一选择!
由于FFmpeg 在Linux上开发的开源项目,把它放在windows下进行编译实在是比较复杂啊,这个过程往往弄得新手很是头大!!!,比如鄙人。好了,今天的重点不在于ffmpeg的编译,因而就不在此一一记录了,网上去找,关于ffmpeg编译的方法何其之多,这里给大家几个不错的参考链接:
对于Linux上的用户,可以参考http://www.ffmpeg.com.cn/index.php/Ffmpeg%E7%BC%96%E8%AF%91%E8%AF%A6%E8%A7%A3
对于Windows用户,可参考http://bbs.chinavideo.org/viewthread.php?tid=1897&extra=page%3D1 或http://blog.sina.com.cn/s/blog_4673bfa501008xie.html
总之编译是个很复杂的过程,我们还是加快速度,来领略ffmpeg的风采。
在命令行下,键入ffmepg.exe -h ,以看其帮助,好家伙,其参数之多,还真是觉得无从下手啊,这么多参数,又该如何正确的设置呢?
于是连Google带使用摸索,将ffmpeg的参数在这里做一简要整理和记录,以备日后使用时查看方便。
基本使用方式:ffmpeg [[options][`-i' input_file]] {[options] output_file}
-y 覆盖输出文件(即如果test.***文件已经存在的话,不经提示就覆盖掉了)
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持。使用-ss参数的作用,可以从指定时间点开始转换任务,-ss后的时间单位为秒
-title string 设置标题(比如PSP中显示影片的标题)
-vb bitrate set bitrate (in bits/s)
-s size 设置帧大小 格式为W*H 缺省160X128.也可以直接使用简写,也认:Sqcif qcif cif 4cif 等
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
-cropbottom size -cropleft size -cropright size
-bt tolerance 设置视频码率容忍度kbit/s (固定误差)
-maxrate bitrate设置最大视频码率容忍度 (可变误差)
-minrate bitreate 设置最小视频码率容忍度(可变误差)
-vcodec codec 强制使用codec编解码方式,如-vcodec xvid 使用xvid压缩 如果用copy表示原始编解码数据必须被拷贝。
-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
-passlogfile file 选择两遍的纪录文件名为file
-g gop_size 设置图像组大小 这里设置GOP大小,也表示两个I帧之间的间隔
-qmin q 最小视频量化标度(VBR) 设定最小质量,与-qmax(设定最大质量)共用
-qmax q 最大视频量化标度(VBR) 使用了该参数,就可以不使用qscale参数
-qcomp compression 视频量化标度压缩(VBR)
-rc_init_cplx complexity 一遍编码的初始复杂度
-rc_eq equation 设置码率控制方程 默认tex^qComp
-rc_override override 特定间隔下的速率控制重载
-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full
-idct_algo algo 设置idct算法。可用的有:
-bf frames 使用frames个B 帧,支持mpeg1,mpeg2,mpeg4(即如果-bf 2的话,在两个非b帧中间隔的b帧数目为2,即IBBPBBPBBP结构)
0 FF_MB_DECISION_SIMPLE 使用mb_cmp
1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD
-interlace 强迫交织法编码 仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失更大
-vstats 输出视频编码统计到vstats_hhmmss.log
-vhook module 插入视频处理模块 module 包括了模块名和参数,用空格分开
-max_qdiff 视频中所有桢(包括i/b/P)的最大Q值差距
-b_qfactor 表示i/p与B的Q值比例因子,值越大B桢劣化越严重
-i_qfactor p和i的Q值比例因子,越接近1则P越优化.
-acodec codec 使用codec编解码 如:-acodec AAC 使用AAC音频编码
好了,先整理这些吧,其实键入ffmpeg -h后给出的参数等说明还有更多,这里就不一一列举了。红色部分标注了测试中经常使用到的,其他的以后用到了再一一补充吧。
参考:http://blog.csdn.net/axdc_qa_team/article/details/4204358