zoukankan      html  css  js  c++  java
  • [视频] x264 压缩笔记

    转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

    本文链接: http://www.php-oa.com/2009/03/22/x264.html

    象x264本身是不能直接处理视频的,由于他没有解码部分,所以须要 mencoder 和 ffmpeg 之类解码成 yuv 的文件,然后在用他来编码.但在处理时一定要指定宽高.

    象mplayer假设播放 y4m,原始 yuv 不带 y4m 头,播放时要手动指定正确分辨率。宽高错一点都会花。另外,二个程序编码和解码通信时,最好使用 mkfifo 来建立一个管道(pipe)这样能更加好的通信,不然 mencoder 的输出会搞花 x264 的编码。

    ?
    1
    $mplayer i420.yuv -demuxer rawvideo -rawvideo w=320:h=240

    解码的过程用mencoder能够这样写

    $ mencoder   -really-quiet $Videotime  -of rawvideo -ovc raw  
    -ofps $fps -noautosub -vf scale=$Scale,harddup,format=i420 -nosound  $FileName -o -

    然后通过管道传送给x264的程序来处理.

     假设 mencoder 加字幕有问题,能够使用 mplayer 来加字幕

     

    ?
    1
    mplayer new.mp4 -really-quiet  -sub/root/sub.ssa -ass -subcp utf-8
     -font /root/wendy.ttf  -fps 25 -vf scale=640:368,harddup,
    format=i420
       -vo yuv4mpeg:file=>(x264 --demuxer y4m   --bitrate 515 --preset slow
     --profile baseline --level 30 --vbv-bufsize 10000 --vbv-maxrate 10000
     --threads auto --input-res 640x368 --fps 25.000 --sar 507:500
     --output output1.264 - 2>/dev/null) -ao null -nosound -noframedrop

     

    使用x264程序的格式:

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

     

    三次编码,画质最好.但须要的时间长

    1:第一次压缩,创建统计文件

    ?
    1
    $ x264  "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25
     --level 40 --me
    hex --merange 16   --non-deterministic --subme 1 --ref1
    --bframes 3  --trellis 1 --weightb  --direct auto --bitrate $(VideoBitrate)
    --qcomp 0.6 --threads auto  --stats
    "$(PassLogFile)"  --pass 1 -o /dev/null


    2:按建立的统计文件压缩并输出,不覆盖统计文件

    ?
    1
    $ x264  "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level
     40 --me
    hex  --merange 16   --non-deterministic --subme 1 --ref1 --bframes 3
      --trellis 1 --weightb --direct auto --bitrate $(VideoBitrate) --qcomp 0.6
     --threads auto  --stats
    "$(PassLogFile)" --pass 3 -o /dev/null


    3:按建立的统计文件压缩,优化统计文件

     

     

     

    ?
    1
    2
    3
    4
    $ x264  "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex
    --merange 16   --non-deterministic --aq-mode 1 --aq-strength 1.0 --b-adapt 1 --ref1 --subme 6
    --psy-rd 1:0 --bframes 3  --trellis 1 --weightb --direct auto --bitrate $(VideoBitrate) --qcomp 0.6
     --threads auto  --stats "$(PassLogFile)"--pass 2 -o "$(DestFile)"


    二次

    编码測试视频流

    ?
    1
    2
    3
    4
    $ x264  "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex
    --merange 16   --non-deterministic --subme 1 --ref1 --bframes 3  --trellis 1 --weightb
    --direct auto --bitrate $(VideoBitrate) --qcomp 0.6 --threads auto  --stats "$(PassLogFile)"
     --pass 1 -o /dev/null

    正式编码

    ?
    1
    2
    3
    4
    $ x264  "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex
    --merange 16   --non-deterministic --aq-mode 1 --aq-strength 1.0 --b-adapt 1 --ref1 --subme 6
     --psy-rd 1:0 --bframes 3  --trellis 1 --weightb --direct auto --bitrate $(VideoBitrate) --qcomp 0.6
    --threads auto  --stats "$(PassLogFile)"--pass 2 -o "$(DestFile)"


    一次质量优先
    ,但这样没法保证码流,也就是讲,你不知道出来的文件有多大.

    ?
    1
    2
    3
    $ x264  "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex
    --merange 16   --non-deterministic --aq-mode 1 --aq-strength 1.0 --b-adapt 1 --ref1 --subme 6
    --psy-rd 1:0 --bframes 3  --trellis 1 --weightb --direct auto --crf 25 --threads auto  -o"$(DestFile)"


    一次大小优先
    ,但有可能动作快的地方.由于码流太少,感觉非常不好.

    ?
    1
    2
    3
    4
    $ x264  "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex
    --merange 16   --non-deterministic --aq-mode 1 --aq-strength 1.0 --b-adapt 1 --ref1 --subme 6
    --psy-rd 1:0 --bframes 3  --trellis 1 --weightb --direct auto --bitrate $(VideoBitrate) --qcomp 0.6
    --threads auto  -o "$(DestFile)"

    帧类型选项:

    -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,越高越easy插入B帧,默认0
    –b-pyramid             同意B帧做參考帧
    –no-cabac              关闭内容自适应二进制算术编码(CABAC,高效率的熵编码)(会提快速度,但严重影响质量)
    -r/–ref <整数>         最大參考帧数,范围0~16,默认1
    –no-deblock            关闭环路滤波(一种除马赛克算法)
    -f/–filter <alpha:beta>设置环路滤波的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 <z0>/<z1>/… 分段量化,格式为:<開始帧>,<结束帧>,<选项>,可选项为: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-8×8 <-1|0|1>   动态预測方式宏块大小。 0: 4×4、1: 8×8、-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 能够使用8×8的离散余弦变换(DCT)
    -t/–trellis <整数>     Trellis量化,对每一个8×8的块寻找合适的量化值,须要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 <list> 设置4×4的量化矩阵,用逗号分开,范围1~255的16个整数
    –cqm8 <list> 设置8×8的量化矩阵,用逗号分开,范围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 height 设置採样比例设置,表示採样像素长宽比
    –fps <小数|rational> 设定帧率
    –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 使用数据定义符号


  • 相关阅读:
    【九天教您南方cass 9.1】 12 道路断面土方计算
    【九天教您南方cass 9.1】 11 方格网土方计算
    【九天教您南方cass 9.1】 10 DTM土方计算的四种方法
    【九天教您南方cass 9.1】 08 绘制等高线及对其处理
    【九天教您南方cass 9.1】 07 绘制与标注圆曲线和细部点的方法
    【九天教您南方cass 9.1】 06 绘制方格网
    【九天教您南方cass 9.1】 05 打印出图
    [转]特征选择与特征选择权重之区别
    [转]Linux 命令行快捷键
    常用期刊评价指标
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3853754.html
Copyright © 2011-2022 走看看