转帖:http://rhingheart.blogspot.com/2009/03/ffmpegx264-ffmpeg-x264.html
注:讲实话,有关这些使用的文章真的不错,我们在这谢谢"SV的边界"本来我自己还想总结一下的。看来没有必要了,呵呵,在次多谢"SV的边界".下面原文
使用ffmpeg进行.264编码的相关文章比较少,google了一下,特总结如下:
- qscale的取值可以是0.01-255但实际使用超过50就很糟糕了
- ffmpeg的cbr模式可以把码率控制的不错,但是vbr无法限制最高码率(虽然有max的设置,但是程序没有实现)
- x264标准的封装是x264+aac in flv或者x264+aac in MP4
接下来说明下ffmpeg命令行的语法规则(本块内容来自2009-03-02官方文档):
语法规则结构:
ffmpeg [[infile options][`-i' infile]]... {[outfile options] outfile}...
一个最简单的命令形式:
ffmpeg -i input.avi -b 64k output.avi
这个命令把视频以64k的码率重编码。
显然,输入文件前面要加一个-i选项下面介绍一些有用的全局参数:
接下来介绍视频选项:
音频部分:
- -ar 设置采样频率,默认44100hz
- -ab 设置比特率,默认64k
- -an 禁用音频录制
- -acodec 指定音频编码器
下面举几个x264编码的例子:
我使用mencoder调用x264编码一个psp用的视频:
x264+aac in mp4 (我修改过的,原作者的不能使用)
mencoder test_video.vob \
-oac lavc -lavcopts acodec=libfaac:abitrate=94 -ovc x264 -x264encopts \
cabac=1:ref=1:deblock=1,0,0:analyse=0x1,0x111:me=hex:subme=6 \
:psy_rd=1.0,0.0:mixed_refs=0:me_range=32:chroma_me=1:trellis=1:8x\
8dct=0:no-chroma-me=0:chroma_qp_offset=-\
2:nr=0:dct_decimate=1:bframes=3:b_pyramid=0:b_adapt=1:b_bias=0\
:direct=3:keyint=250:keyint_min=25:scenecut=40:qp=18:bitrate=80\
0 -lavdopts er=2 -of lavf -lavfopts format=mp4 -vf scale=720:480 -o men.mp4
对应的ffmpeg编码参数是:
ffmpeg
ffmpeg -i inputfile.avi -f psp -acodec libfaac -ab 94k -vcodec libx264\
-cqp 28 -coder 1 -refs 3 -deblockalpha 1 -deblockbeta -1 -me_method umh\
-subq 9 -me_range 32 -trellis 2 -chromaoffset -2 -nr 0 -bf 2 -b_strategy 1\
-bframebias 0 -directpred 3 -g 250 -i_qfactor 1.3 -b_qfactor 1.4\
-flags2 +bpyramid+wpred+mixed_refs+8x8dct -er 2 -s 480x320
需要注意的是,flags2里面那块,似乎要按照一定顺序才能正常工作,其他地方都差不多,详细情况可以从下面两篇文章得出:
第一篇是这个在网上被传了很多,但有些问题的对照表格,我修改了有问题的部分:
FFmpeg option |
x264 option |
-g <frames> |
–keyint |
-b <bits per second> |
–bitrate |
-bufsize <bits> |
–vbv-bufsize |
-maxrate <bits> |
–vbv-maxrate |
-pass <1,2,3> |
–pass |
-crf <float> |
–crf |
-cqp <int> |
–qp |
-bf <int> |
–bframes |
-coder <0,1> |
–no-cabac |
-bframebias <int> |
–b-bias |
-keyint_min <int> |
–min-keyint |
-sc_threshold <int> |
–scenecut |
-deblockalpha <int>-deblockbeta <int> |
–deblock |
-qmin <int> |
–qpmin |
-qmax <int> |
–qpmax |
-qdiff <int> |
–qpstep |
-qcomp <float> |
–qcomp |
-qblur <float> |
–qblur |
-complexityblur <float> |
–cplxblur |
-refs <int> |
–ref |
-directpred <int> |
–direct |
-me_method <epzs,hex,umh,full> |
–me |
-me_range <int> |
–merange |
-subq <int> |
–subme |
-bidir_refine <0,1> |
–bime |
-trellis <0,1,2> |
–trellis |
-nr <int> |
–nr |
-level <int> |
–level |
-bt <bits> |
–ratetol = -bt / -b |
-rc_init_occupancy <bits> |
–vbv-init = -rc_init_occupancy / -bufsize |
-i_qfactor <float> |
–ipratio = 1 / -i_qfactor |
-b_qfactor <float> |
–pbratio |
-chromaoffset <int> |
–chroma-qp-offset |
-rc_eq <string> |
–rc_eq |
-threads <int> |
–threads |
-cmp <-chroma/+chroma> |
–no-chroma-me |
-partitions |
–partitions |
+parti8×8 |
i8×8 |
+parti4×4 |
i4×4 |
+partp8×8 |
p8×8 |
+partp4×4 |
p4×4 |
+partb8×8 |
b8×8 |
-flags |
|
-loop/+loop |
–no-deblock/–deblock |
-psnr/+psnr |
–no-psnr/nothing |
-flags2 |
|
+bpyramid |
–b-pyramid |
+wpred |
–weightb |
+brdo |
–b-rdo 我这里的ffmpeg已经不能用这个了 |
+mixed_refs |
–mixed-refs |
+dct8×8 |
–8×8dct |
-fastpskip/+fastpskip |
–no-fast-pskip |
+aud |
–aud |
(rhingheart) |