zoukankan      html  css  js  c++  java
  • x264简介

    H.264视频编码标准

    X264是它的开源实现,是视频编码器

    Encoder features

    § 8x8 and 4x4 adaptive spatial transform

    § Adaptive B-frame placement

    § B-frames as references / arbitrary frame order

    § CAVLC/CABAC entropy coding

    § Custom quantization matrices

    § Intra: all macroblock types (16x16, 8x8, 4x4, and PCM with all predictions)

    § Inter P: all partitions (from 16x16 down to 4x4)

    § Inter B: partitions from 16x16 down to 8x8 (including skip/direct)

    § Interlacing (MBAFF)

    § Multiple reference frames

    § Ratecontrol: constant quantizer, constant quality, single or multipass ABR, optional VBV

    § Scenecut detection

    § Spatial and temporal direct mode in B-frames, adaptive mode selection

    § Parallel encoding on multiple CPUs

    § Predictive lossless mode

    § Psy optimizations for detail retention (adaptive quantization, psy-RD, psy-trellis)

    § Zones for arbitrarily adjusting bitrate distribution

     

    ■ 8x84x4自适应空间域转换

    自适应B帧选择

    ■ B帧可作为参考帧/自由的帧顺序

    ■ CAVLC/CABAC熵编码

    自定义精确的矩阵模板

    ■ I帧:所有宏块格式(16x16, 8x8, 4x4, 以及有全部预测的PCM

    ■ P帧:所有的分割块(从16x164x4

    ■ B帧:分割块从16x168x8(包括skip/direct

    隔行扫描(MBAFF)

    多个参考帧

    码率控制:固定量化,固定质量,一次或者多次编码的平均码率,可选的VBV参数

    场景变换检测

    ■ B帧时间域、空间域direct模式自适应选择

    可在多个CPU平行编码

    预测性的无损编码(x264似乎也是所有基于H.264标准的编码器中唯一实现这项的)

    心理视觉优化,保留更多的细节(自适应量化,psy-RDpsy-trellis

    可用于手动调整码率分配的zones参数

     

    使用

    x264 --help

    x264 core:129 r2245 bc13772

    Syntax: x264 [options] -o outfileinfile

    注意ffmpeg的输入输出文件位置恰好相反:

    ffmpeg [options] [[infile options] -i infile]... {[outfile options]outfile}…

     

    Infile can be raw (in which case resolution分辨率 is required),

      or YUV4MPEG (*.y4m),

      or Avisynth解码器if compiled with support (yes).

      or libav* formats if compiled withlavf support (yes) orffms support (yes).

     

    Outfile type is selected by filename:

     .264 -> Raw bytestream

     .mkv ->Matroska

     .flv -> Flash Video

     .mp4 -> MP4 if compiled with GPAC support (yes)

    Output bit depth: 8 (configured at compile time)

     

    Options:

      -h, --help                  List basic options

          --longhelp              List more options

          --fullhelp              List all options

     

    Example usage:

     

     Constant quality mode:固定质量

                x264 --crf 24 -o <output><input>  //:别忘了是2个短横线,默认输出到个人文档所在目录下。

     

          Two-pass with a bitrate of 1000kbps:

                x264 --pass 1 --bitrate 1000 -o <output><input>

                x264 --pass 2 --bitrate 1000 -o <output><input>

     

          Lossless:无损

          x264 --qp 0 -o <output><input>

     

          Maximum PSNR“PeakSignaltoNoiseRatio”的缩写峰值信噪比PSNR 的单位为dBPSNR值越大,就代表失真越少。at the cost of为代价 speed and visual quality:

                x264 --preset placebo --tune psnr -o <output><input>

     

    Constant bitrate at 1000kbps with a 2 second-buffer:恒定比特率

     x264 --vbv-bufsize 2000 --bitrate 1000 -o <output><input>

     

    Presets:

     

          --profile <string>      Force the limits of an H.264 profile属性

    Overrides all settings.覆盖所有的设置。

                                      - baseline,main,high,high10,high422,high444

          --preset <string>Use a preset to select encoding settings [medium]

                                      Overridden by user settings.

                                      - ultrafast,superfast,veryfast,faster,fast

                                      - medium,slow,slower,veryslow,placebo

          --tune<string>Tune the settings for a particular type of source or situation

    //tune调谐,调整

                                      Overridden by user settings.被用户设置覆盖。

                                      Multiple tunings are separated by commas.

    Only onepsytuning can be used at a time.

                                      - psy tunings: film,animation,grain纹理,

    stillimage静像,psnr,ssim

                                      - other tunings: fastdecode,zerolatency零延迟

    Frame-type options:

     -I, --keyint<integer or "infinite"> Maximum GOP图片组 size [250]

          --tff                   Enable interlaced mode (top field first)

          --bff                   Enable interlaced mode (bottom field first)

          --pulldown<string>     Use soft pulldown折叠式的 to change frame rate

     - none, 22, 32, 64, double, triple, euro (requires cfr input)

     

    Ratecontrol:

     

      -B, --bitrate <integer>     Set bitrate (kbit/s)

    --crf<float>           Quality-based VBR (0-51) [23.0]

          --vbv-maxrate<integer> Max local bitrate (kbit/s) [0]

     --vbv-bufsize<integer> Set size of the VBV buffer (kbit) [0]

    Video Buffering Verifier视频缓存检验器

      -p, --pass <integer>        Enable multipassratecontrol

                                      - 1: First pass, creates stats file

                                      - 2: Last pass, does not overwrite stats file

     

    Input/Output:

     

      -o, --output <string>       Specify output file

          --sarheight      Specify Sample Aspect Ratio采样宽高比

    --fps<float|rational>  Specify framerate帧速率

          --seek <integer>        First frame to encode

          --frames <integer>      Maximum number of frames to encode

          --level <string>        Specify level (as defined by Annex A)

          --quiet                 Quiet Mode

     

    Filtering:

     

     --vf, --video-filter <filter0>/<filter1>/... Apply video filtering to the

    input file

     

          Filter options may be specified in <filter>:<option>=<value> format.

     

          Available filters:

    crop:left,top,right,bottom

          resize:[width,height][,sar][,fittobox][,csp][,method]

          select_every:step,offset1[,...]

     

    注:--video-filter:可以用来裁剪和缩放视频。裁剪视频部分的语法是“crop:left,top,right,bottom,四个参数分别制定左侧、上侧、右侧、下侧裁剪几个像素,最好是都用4的整数倍,例如“crop:8,8,8,8”。缩放视频的部分的语法是“resize:[width,height][,sar][,fittobox][,csp][,method]”。比较重要的只是width/heightmethod,用来指定缩放后的分辨率和缩放使用的方法,其他参数的具体含义可以参看此处。例如“resize:1280,720,,,,spline”,指定缩放视频原始视频到1280*720分辨率,缩放的方法采用spline(一般都使用这个方法)。最后,裁剪和缩放视频其实是可以一起指定的,用“/”连接这两部分就行

    o    Egx264 --demuxerffms --preset slower --tune film --crf 20 --level 4.1 --fps 23.976 --video-filter crop:8,8,8,8/resize:1280,720,,,,spline -o output.264 input.mp4

     

    =========中文=================

     

    x264 [--参数名参数值 ...] --output 输出文件输入文件

    一个“-”加一个字母构成一个短参数名,区分大小写。

    eg

    x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.264 ep01.avs

    调用x264编码当前目录下的"ep01.avs"文件,输出"psp.264"

    AVSAudio Video coding Standard,音视频编码标准,即数字音视频编解码技术标准,为中国第二代信源编码标准。)

     

    eg

    "D:\encoder tools\x264.exe" --crf 18 --tunetouhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\th9\rec.avi"

    在这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号

    Windows XPWindows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。

     

    输入输出文件类型

    在加入了ffms/lavflibavformatffmpegsource这两个库后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有pass中的stats文件、qp file、量化矩阵tc file

    输入:

    x264支持输入的文件类型有raw yuvy4mavs和任何可以由ffmslavf打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avsffms/lavf输入不需要指定片子的分辨率。

    YUV是被欧洲电视系统所采用的一种颜色编码方法

    输出:

    x264可以输出没有封装H.264视频流,扩展名是.264matroska视频,扩展名是.mkvflash视频,扩展名是.flvmp4视频,扩展名是.mp4mkvmp4flv可以是vfr的。

    VFRVariable Frame Rate(可变帧率)的视频编码,这种VFR视频的帧率是不固定的,它可在动态画面中使用较大的帧率,而在静态画面中使用较小的帧率,这样可以有效的减少视频文件的体积,并改善动态画面的质量。它的作用比目前广泛使用的VBR(可变码率)更为明显。

    x264通过输出文件的扩展名判断输出文件类型

    presettune系统

    x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。如果没有特别的需要,请尽量使用presettune系统。这套开发者推荐的参数比各种道听途说的参数更合理。

    在使用了presettune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖presettune里的参数。

    --preset

    通过--preset的参数调节编码速度和质量的平衡。

    --preset的值有ultrafastsuperfastveryfastfasterfastmediumslowslowerveryslowplacebo。从快到慢,参数越来越EP。默认是medium

    --tune

    通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。

    --tune的值有

    film:电影、真人类型;

    animation:动画;

    grain:需要保留大量的grain时用;

    stillimage:静态图像编码时使用;

    psnr:为提高psnr做了优化的参数;

    ssim:为提高ssim做了优化的参数;

    structural similarity (SSIM) index measurement system

    一种衡量两幅图像相似度的新指标,其值越大越好,最大为1,

    fastdecode:可以快速解码的参数;

    zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码

    码率控制

    视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。

    x2644码率控制方式,分别是1pass bitratecrfqp2pass bitrate。其中2pass bitrate包含npass bitrate

    1pass bitrateqp恒定量化值)一般不推荐使用

    crf

    --crf 23 (默认)

    一种根据片子质量自动分配码率vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。(VBRVariable Bit Rate)动态比特率

    可用的值从151越小编码质量越好,码率越高。一般使用1624,可以为浮点。

    crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。

    2pass bitrate

    这种方式可以精确的得到想要的平均码率2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。

    除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了

    --bitrate 1000 (以1000kbps码率为例)

    >x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs

    >x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs

    先输入第一行,等1pass跑完之后再输入第二行跑2pass1pass主要为了得到1pass.stats1pass.stats.mbtree两个文件2pass需要这两个文件已完成最后的编码,最后输出文件。

    默认情况下,1pass是以快速参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的已编码的文件

    尽量让1pass2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。

     

    此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用快速参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。

    >x264 --crf 20 --pass 1 --slow-firstpass --tune animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs

    >x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs

    1pass会输出3文件:1pass.stats1pass.stats.mbtreeoutput1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass

    2pass必须用bitrate模式跑,不能用crf

    实践:

    1,yuv to mp4

    若输入为 raw YUV,则必须另指定输入分辨率。最好同时用 --fps 指定帧率
    x264.exe --fps 25 --input-res 720x576 -o output.mp4   "D:\media\BBC+_720X576_2500fps_NoInterlace.yuv"

     

    x264.exe --fps 25 --input-res 640x480 -o a.mp4   "D:\media\a.yuv"

     

    附:

    YUV

    YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法,主要用于优化彩色视频信号的传输。

    YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PALSECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号RY(即U)、BY(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号UV是分离的。

     

    RGBYUV都是色彩空间,用于表示颜色,两者可以相互转化。 YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL)。YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。与R GB视频信号传输相比,它最大的优点在于只需占用极少的带宽(RGB要求三个独立的视频信号同时传输)。
         
    "Y"表示明亮度(Lumina nceLuma),也就是灰阶值;是个基带信号。而"U""V"表示的则是色度(ChrominanceChroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。UV不是基带信号,它俩是被正交调制了的。
         "
    亮度"是通过RGB输入信号来创建的,方法是将RGB信号的特定部分叠加到一起。"色度"则定义了颜色的两个方面-色调与饱和度,分别用CrCB来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异。。通过运算,YUV三分量可以还原出R(红),G(绿),B(兰)。

    yuv色彩模型来源于rgb模型,
    该模型的特点是将亮度和色度分离开,从而适合于图像处理领域。

     

     

    cd /D 目录

    使用 /D 开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。

     

    码率:

    码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件,也就是说画面的细节就越丰富。码率也叫比特率,表示经过压缩编码后的视音频数据每秒需要用多少个比特来表示,即把每秒显示的图像进行压缩后的数据量,一般采用的单位是kbps即千位每秒。

     

     

  • 相关阅读:
    js中异步方案比较完整版(callback,promise,generator,async)
    10分钟搞懂toString和valueOf函数(详细版)
    Angular ViewChild
    Angular动画
    Angular组件之间的通讯
    用12个例子全面示范Angular的模板语法
    使用c++为node.js扩展模块
    requestAnimationFrame 实现JS动画
    使用CSS修改HTML5 input placeholder颜色
    js数组的方法
  • 原文地址:https://www.cnblogs.com/elesos/p/2921253.html
Copyright © 2011-2022 走看看