arm-linux-gcc编译x264

2011-03-21 17:50:24 | 2000次阅读 | 评论:0 条 |

    要做视频传输,时间又紧迫,本人的“家底”又特别薄,就在网上下了个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的测试文件,可以在

    http://www.cipr.rpi.edu/resource/sequences/sif.html

    上面下载,那里有很多。对于 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 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

    其中文说明网上也有很多,下面摘自

    http://popgo.net/bbs/showthread.php?s=f216651231abb8900e082602196a6150&threadid=408981

    对其参数的说明:

    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:按建立的统计文件压缩,优化统计文件

    --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 动态预测方式宏块大小。 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算法(一种心理视觉模型)和Psy-Trellis量化,可提高细节,但会大幅提高码率。需要-m>6。默认 ["1.0:0.0"]。第一个值为Psy-rdo强度,第二个值为Psy-Trellis强度。

    --mixed-refs 可以在一帧内使用不同参考帧

    --no-chroma-me 不进行色度的动态预测

    -8/--8x8dct 可以使用8x8的离散余弦变换(DCT)

    -t/--trellis Trellis量化,对每个8x8的块寻找合适的量化值,需要CABAC,默认0

    0:关闭

    1:只在最后编码时使用

    2:一直使用

    --no-fast-pskip 关闭快速P帧跳过检测

    --no-dct-decimate 关闭P帧联合编码(可以增加细节,但也会增大体积)

    --nr 噪声去除,范围0~100000,默认0

    --deadzone-inter 设置inter模式下,亮度死区量化值,范围0~32,默认21。

    --deadzone-intra 设置intra模式下,亮度死区量化值,范围0~32,默认11。

    --cqm 设置外部量化矩阵格式,默认"flat",可选项:jvt/flat

    --cqmfile 读取JM格式的外部量化矩阵文件,自动忽略其他--cqm*选项

    --cqm4 设置4x4的量化矩阵,用逗号分开,范围1~255的16个整数

    --cqm8 设置8x8的量化矩阵,用逗号分开,范围1~255的64个整数

    --cqm4i/--cqm4p/--cqm8i/--cqm8p 设置I、P帧不同的量化矩阵

    --cqm4iy/--cqm4ic/--cqm4py/--cqm4pc 设置亮度、色度不同的量化矩阵

    视频标准化选项:

    这些选项与编码无关,不过如果要用mp4之类的播放器,可以设置,风险自担

    --overscan 过扫描线,默认"undef"(不设置),可选项:show(观看)/crop(去除)

    --videoformat 视频格式,默认"undef",可选项:component/pal/ntsc/secam/mac/undef

    --fullrange Specify full range samples setting,默认"off",可选项:off/on(我也不明白这是干什么的,请高手指点)

    --colorprim 原始色度格式,默认"undef",可选项:undef/bt709/bt470m/bt470bg,

    smpte170m/smpte240m/film

    --transfer 转换方式,默认"undef",可选项:

    undef/bt709/bt470m/bt470bg/linear,log100/log316/smpte170m/smpte240m

    --colormatrix 色度矩阵设置,默认"undef",undef/bt709/fcc/bt470bg,smpte170m/smpte240m/GBR/YCgCo

    --chromaloc 色度样本指定,范围0~5,默认0

    输入、输出选项:

    -o/--output 指定输出文件

    --sar width:height 设置采样比例设置,表示采样像素长宽比

    --fps 设定帧率

    --seek 设定起始帧

    --frames 最大编码帧数

    --level 类似于MPEG4里的"profile&level",表示编/解码等级

    -v/--verbose 显示每一个帧的信息

    --progress 显示编码进程

    --quiet 安静模式

    --no-psnr 关闭PSNR计算

    --no-ssim 关闭SSIM计算

    --threads 编码线程(使用多线程技术)

    --thread-input 在自有线程中运行Avisynth

    --non-deterministic 非确定性。可以稍微减少多线程的开销

    --asm 覆盖CPU检测

    --no-asm 关闭全部CPU优化指令

    --visualize 显示编码帧信息图,和XVID类似

    --dump-yuv 保存帧为yuv格式

    --sps-id 设置SPS和PPS的ID值,默认0

    --aud 使用数据定义符号

    若在测试的时候,没有输入宽度和高度,会出现:

    x264 [error]: Rawyuv input requires a resolution.

    若没有指定 options 则会出现:

    x264 [error]: no ratecontrol method specified

    x264 [error]: x264_encoder_open failed

    这时加上ratecontrol选项即可编码。

    

    

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/81592/showart_1724849.html

你可能感兴趣的:(多线程,优化,hex,编译器,encoding,compression)