Chinaunix首页 | 论坛 | 博客
  • 博客访问: 310868
  • 博文数量: 53
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 598
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 13:20
文章分类

全部博文(53)

文章存档

2011年(2)

2010年(22)

2009年(29)

我的朋友

分类: 嵌入式

2010-03-23 15:30:58

要做视频传输,时间又紧迫,本人的“家底”又特别薄,就在网上下了个x264编码的,在Linux下能编译过去的。首先得配置一下:./configure  --disable-asm,之后找到它默认的编译工具,然后修改它。在配置文件里,用vi打开它,找到 CC="${CC-gcc}" 这就是在configure文件里的定义,所以默认的是用gcc编译器编译的,若想修改编译器,把它修改了就行,若想用arm-linux-gcc编译,就可以修改为:CC="${CC-arm-linux-gcc}",然后make一下,就可以啦,这样就生成了x264的可执行文件和libx264.a库文件。记住,要想修改编译器,记着在这些配置文件查看默认的编译器的定义所在,然后修改它。这只是看能否用交叉编译工具能否编译过去,用同样的方法可以在x86的机器上编译,当然编译器得改回来。之后就可以在网上下载一个 .yuv的测试文件,可以在上面下载,那里有很多。对于 x264的参数可以用 ./x264 --help 就可以查看出其用法:如下
 
Syntax: x264 [options] -o outfile infile [widthxheight]
Infile can be raw YUV 4:2:0 (in which case resolution is required),
  or YUV4MPEG 4:2:0 (*.y4m),
  or AVI or Avisynth if compiled with AVIS support (no).
Outfile type is selected by filename:
 .264 -> Raw bytestream
 .mkv -> Matroska
 .mp4 -> MP4 if compiled with GPAC support (no)
Options:
  -h, --help                  List the more commonly used options
      --longhelp              List all options
Frame-type options:
  -I, --keyint       Maximum GOP size [250]
  -b, --bframes      Number of B-frames between I and P [0]
      --b-pyramid             Keep some B-frames as references
      --no-cabac              Disable CABAC
  -r, --ref          Number of reference frames [1]
  -f, --deblock   Loop filter AlphaC0 and Beta parameters [0:0]
      --interlaced            Enable pure-interlaced mode
Ratecontrol:
  -q, --qp           Set QP (0=lossless) [26]
  -B, --bitrate      Set bitrate (kbit/s)
      --crf            Quality-based VBR (nominal QP)
      --vbv-bufsize Enable CBR and set size of the VBV buffer (kbit) [0]
      --ratetol        Allowed variance of average bitrate [1.0]
      --ipratio        QP factor between I and P [1.40]
      --pbratio        QP factor between P and B [1.30]
      --aq-mode      How AQ distributes bits [2]
                                  - 0: Disabled
                                  - 1: Avoid moving bits between frames
                                  - 2: Move bits between frames
      --aq-strength    Reduces blocking and blurring in flat and
                              textured areas. [1.0]
                                  - 0.5: weak AQ
                                  - 1.5: strong AQ
  -p, --pass <1|2|3>          Enable multipass ratecontrol
                                  - 1: First pass, creates stats file
                                  - 2: Last pass, does not overwrite stats file
                                  - 3: Nth pass, overwrites stats file
      --stats         Filename for 2 pass stats ["x264_2pass.log"]
      --qcomp          QP curve compression: 0.0 => CBR, 1.0 => CQP [0.60]
      --zones //...  Tweak the bitrate of some regions of the video
Analysis:
  -A, --partitions    Partitions to consider ["p8x8,b8x8,i8x8,i4x4"]
                                  - p8x8, p4x4, b8x8, i8x8, i4x4
                                  - none, all
                                  (p4x4 requires p8x8. i8x8 requires --8x8dct.)
      --direct        Direct MV prediction mode ["spatial"]
                                  - none, spatial, temporal, auto
  -w, --weightb               Weighted prediction for B-frames
      --me            Integer pixel motion estimation method ["hex"]
                                  - dia, hex, umh
      --merange      Maximum motion vector search range [16]
  -m, --subme        Subpixel motion estimation and partition
                                  decision quality: 1=fast, 7=best. [5]
      --b-rdo                 RD based mode decision for B-frames. Requires subme 6.
      --mixed-refs            Decide references on a per partition basis
  -8, --8x8dct                Adaptive spatial transform size
  -t, --trellis      Trellis RD quantization. Requires CABAC. [0]
                                  - 0: disabled
                                  - 1: enabled only on the final encode of a MB
                                  - 2: enabled on all mode decisions
      --no-fast-pskip         Disables early SKIP detection on P-frames
      --no-dct-decimate       Disables coefficient thresholding on P-frames
      --nr           Noise reduction [0]
      --cqmfile       Read custom quant matrices from a JM-compatible file
Input/Output:
  -o, --output                Specify output file
      --sar width:height      Specify Sample Aspect Ratio
      --fps   Specify framerate
      --seek         First frame to encode
      --frames       Maximum number of frames to encode
      --level         Specify level (as defined by Annex A)
  -v, --verbose               Print stats for each frame
      --progress              Show a progress indicator while encoding
      --quiet                 Quiet Mode
      --no-psnr               Disable PSNR computation
      --no-ssim               Disable SSIM computation
      --threads      Parallel encoding
      --thread-input          Run Avisynth in its own thread
其中文说明网上也有很多,下面摘自对其参数的说明:

x264参数解释(revision: 1024)
本文对应的是x264命令行模式,VFW方式也用相同的参数,不过是图形界面,可以自己找对应的英文。
新版本x264取消了--no-b-adapt、--nf、--b-rdo、--bime、--rceq参数,请不要再使用。

使用格式:x264 默认选项 -o 输出文件 输入文件 [长x宽]
输入支持格式:RAW/y4m/avi/avs(编译时可选)
输出支持格式:264/mkv/mp4(编译时可选)

x264的许多参数可以有-/--两种输入法。以下等价参数用“参数1/参数2 <必需数值格式>”表示。

-h/--help 列出较常用的选项
--longhelp 列出较常用的选项,更详细的帮助

帧类型选项:

-I/--keyint <整数> 最大IDR帧间距,默认250
-i/--min-keyint <整数> 最小IDR帧间距,默认25
--scenecut <整数> 画面动态变化限,当超出此值时插入I帧,默认40
--pre-scenecut         更快,但低精度的画面动态检测,需要多线程,并且在启用多线程时自动打开。
-b/--bframes <整数>     在IP帧之间可插入的B帧数量最大值,范围0~16,默认0
-b-adapt 自适应B帧判定模式。 0:关闭;1:快速;2:优化(高B帧时速度大大下降),默认1
--b-bias <整数> 控制插入B帧判定,范围-100~+100,越高越容易插入B帧,默认0
--b-pyramid             允许B帧做参考帧
--no-cabac              关闭内容自适应二进制算术编码(CABAC,高效率的熵编码)(会提高速度,但严重影响质量)
-r/--ref <整数>         最大参考帧数,范围0~16,默认1
--no-deblock            关闭环路滤波(一种除马赛克算法)
-f/--filter 设置环路滤波的AlphaC和Beta的参数,范围-6-6,默认都为0
--interlaced 启用纯交错模式(用于隔行扫描的源)

码率控制选项:

-q/--qp <整数> 固定量化模式并设置使用的量化值,范围0~51,0为无损压缩,默认26
-B/--bitrate <整数> 设置平均码率
--crf <整数> 质量模式,量化值动态可变
--vbv-maxrate <整数> 平均码率模式下,最大瞬时码率,默认0(与-B设置相同)
--vbv-bufsize <整数> 码率控制缓冲区的大小,单位kbit,默认0
--vbv-init <小数> 码率控制缓冲区数据保留的最大数据量与缓冲区大小之比,范围0~1.0,默认0.9
--qpmin <整数> 设置最小量化值,范围0~51,默认10
--qpmax <整数> 设置最大量化值,范围0~51,默认51
--qpstep <整数> 设置相邻帧之间的量化值差,范围0~50,默认4
--ratetol <小数> 平均码率模式下,瞬时码率可以偏离的倍数,范围0.1~100.0,默认1.0
--ipratio <小数> I帧和P帧之间的量化系数,默认1.40
--pbratio <小数> P帧和B帧之间的量化系数,默认1.30
--chroma-qp-offset <整数> 色度和亮度之间的量化差,范围-12~+12,默认0
--aq-mode <整数>     自适应量化模式,可以在1帧中不同宏块间重新分配量化值,能提高暗部细节,但会提高码率。与--qp不能同时使用,0关闭,1开启,默认1
--aq-strength <小数>   AQ强度,减小低细节宏块的量化值,默认1.0
-p/--pass <1|2|3> 多次压缩码率控制
1:第一次压缩,创建统计文件
2:按建立的统计文件压缩并输出,不覆盖统计文件,
3:按建立的统计文件压缩,优化统计文件
--stats <字符串> 统计文件的名称,默认"x264_2pass.log"
--qcomp <小数> 线性量化控制,0.0为固定码率,1.0为固定量化值,默认0.6,只用于2-pass和质量模式
--cplxblur <小数> 根据相邻帧平滑量化值比例的最大值,范围0~99.9,默认20.0,只用于2-pass和质量模式
--qblur <小数> 对统计文件结果平滑量化值比例的最大值,范围0~99.9,默认0.5,只用于2-pass
--zones //… 分段量化,格式为:<开始帧>,<结束帧>,<选项>,可选项为:q=<整数>(量化值)或b=<小数>(码率倍数)
--qpfile <字符串>      强制帧的类型和量化值

分析选项:

-A/--analyse <字符串> 动态块划分方法,默认"p8x8,b8x8,i8x8,i4x4"。可选项:p8x8/p4x4/b8x8/i8x8/i4x4;none/all(p4x4需要p8x8. i8x8需要--8x8dct)
--direct <字符串>       动态预测方式,默认"spatial"。可选项:none/spatial/temporal/auto
--direct-8x8 <-1|0|1>   动态预测方式宏块大小。 0: 4x4、1: 8x8、-1:尽可能减小体积,默认1
-w/--weightb 允许B帧加权预测(可以减少相邻B帧质量低的影响)
--me <字符串> 对全像素块动态预测搜索的方式,默认"hex",可选项:
dia:菱形搜索,半径1 (快)
hex:正六边形搜索,半径2
umh:可变半径六边形搜索
esa:全面搜索(很慢,而且效果与umh几乎相同)
tesa: 用hadamard方式进行全面搜索,比esa更慢
--merange <整数> --me为umh/esa时的搜索半径,最大64,默认16
--mvrange <整数>     设置运动矢量的最大范围,默认-1(自动确定)
--mvrange-thread <整数>  线程间最小缓冲,用于一些播放器的兼容性,默认-1(自动确定)
-m/--subme <整数> 动态预测和分区方式,可选项1~9,默认6(与压缩质量和时间关系密切,1是7速度的四倍以上)
1:用全像素块进行动态搜索,对每个块再用快速模式进行四分之一像素块精确搜索
2:用半像素块进行动态搜索,对每个块再用快速模式进行四分之一像素块精确搜索
3:用半像素块进行动态搜索,对每个块再用质量模式进行四分之一像素块精确搜索
4:用快速模式进行四分之一像素块精确搜索
5:用质量模式进行四分之一像素块精确搜索
6:进行I、P帧像素块的速率失真最优化(rdo)
7:进行全部帧像素块的速率失真最优化
8:进行I、P帧运动矢量及块内部的速率失真最优化
9:进行全部帧运动矢量及块内部的速率失真最优化(质量最好)
--psy-rd 在rdo中使用Psy算法%

阅读(1942) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~