X264学习笔记(1)

X264学习笔记(1)



X264编码流程

参数的初始化

1.opt,param根据输入的参数和标准的规定,进行初始化设置。

Opt的说明如下:

Opt->hin用于给出读入的yuv文件的指针地址

Opt->hout给出了输出的文件的指针地址

Opt->i_seek给出了起始编码帧的帧数,是由编码时的seek命令参数决定的

如:

X264 -seek 10 -o foreman.cif test.264 352x288

i_seek 设为10,表示起始编码的帧为元序列的第十帧

Opt->qpfile按照说明,为qp值文件输入进行定义这种方式的接口,可以通过读入标准的文件格式,对编码时的qp值进行定义。

Param的说明:

typedef struct

{

    /* CPU flags */

    unsigned int cpu;

    int         i_threads;  /* divide each frame into multiple slices, encode in parallel */线程数,用于多线程并行编码

 

    /* Video Properties */

    int         i_width;                               图像的宽度

    int         i_height;                               图像的高度

    int         i_csp;  /* CSP of encoded bitstream, only i420 supported */    色彩空间的设置

    int         i_level_idc;             level 值的设置

    int         i_frame_total; /* number of frames to encode if known, else 0 */  总共需要编码的帧数,由--frames设置

Vui参数集

    struct

    {

        /* they will be reduced to be 0 < x <= 65535 and prime */

        int         i_sar_height;

        int         i_sar_width;

 

        int         i_overscan;    /* 0=undef, 1=no overscan, 2=overscan */

       

        /* see h264 annex E for the values of the following */

        int         i_vidformat;

        int         b_fullrange;

        int         i_colorprim;

        int         i_transfer;

        int         i_colmatrix;

        int         i_chroma_loc;    /* both top & bottom */

    } vui;

 

    int         i_fps_num;

    int         i_fps_den;

这两个参数是由fps帧率确定的,赋值的过程见下:

    {

        float fps;

        if( sscanf( value, "%d/%d", &p->i_fps_num, &p->i_fps_den ) == 2 )

            ;

        else if( sscanf( value, "%f", &fps ) )

        {

            p->i_fps_num = (int)(fps * 1000 + .5);

            p->i_fps_den = 1000;

        }

        else

            b_error = 1;

    }

Value的值就是fps。

 

    /* Bitstream parameters */

    int         i_frame_reference;  /* Maximum number of reference frames */

    int         i_keyint_max;       /* Force an IDR keyframe at this interval */

    int         i_keyint_min;       /* Scenecuts closer together than this are coded as I, not IDR. */

    int         i_scenecut_threshold; /* how aggressively to insert extra I frames */

    int         i_bframe;   /* how many b-frame between 2 references pictures */

    int         b_bframe_adaptive;

    int         i_bframe_bias;

    int         b_bframe_pyramid;   /* Keep some B-frames as references */

 

 

去块滤波器需要的参数

    int         b_deblocking_filter;

    int         i_deblocking_filter_alphac0;    /* [-6, 6] -6 light filter, 6 strong */

    int         i_deblocking_filter_beta;       /* [-6, 6]  idem */

 

熵编码

    int         b_cabac;

    int         i_cabac_init_idc;

量化

    int         i_cqm_preset;

    char        *psz_cqm_file;      /* JM format */

    uint8_t     cqm_4iy[16];        /* used only if i_cqm_preset == X264_CQM_CUSTOM */

    uint8_t     cqm_4ic[16];

    uint8_t     cqm_4py[16];

    uint8_t     cqm_4pc[16];

    uint8_t     cqm_8iy[64];

    uint8_t     cqm_8py[64];

 

    /* Log */

    void        (*pf_log)( void *, int i_level, const char *psz, va_list );

    void        *p_log_private;

    int         i_log_level;

    int         b_visualize;

 

    /* Encoder analyser parameters */

    struct

    {

        unsigned int intra;     /* intra partitions */

        unsigned int inter;     /* inter partitions */

 

        int          b_transform_8x8;

        int          b_weighted_bipred; /* implicit weighting for B-frames */

        int          i_direct_mv_pred; /* spatial vs temporal mv prediction */

        int          i_chroma_qp_offset;

 

        int          i_me_method; /* motion estimation algorithm to use (X264_ME_*) */

        int          i_me_range; /* integer pixel motion estimation search range (from predicted mv) */

        int          i_mv_range; /* maximum length of a mv (in pixels) */

        int          i_subpel_refine; /* subpixel motion estimation quality */

        int          b_bidir_me; /* jointly optimize both MVs in B-frames */

        int          b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */

        int          b_bframe_rdo; /* RD based mode decision for B-frames */

        int          b_mixed_references; /* allow each mb partition in P-frames to have it's own reference number */

        int          i_trellis;  /* trellis RD quantization */

        int          b_fast_pskip; /* early SKIP detection on P-frames */

        int          b_dct_decimate; /* transform coefficient thresholding on P-frames */

        int          i_noise_reduction; /* adaptive pseudo-deadzone */

 

        int          b_psnr;    /* Do we compute PSNR stats (save a few % of cpu) */

    } analyse;

 

    /* Rate control parameters */

    struct

    {

        int         i_rc_method;    /* X264_RC_* */

 

        int         i_qp_constant;  /* 0-51 */

        int         i_qp_min;       /* min allowed QP value */

        int         i_qp_max;       /* max allowed QP value */

        int         i_qp_step;      /* max QP step between frames */

 

        int         i_bitrate;              比特率 --bitrate控制

        int         i_rf_constant;  /* 1pass VBR, nominal QP */

        float       f_rate_tolerance;

        int         i_vbv_max_bitrate;

        int         i_vbv_buffer_size;

        float       f_vbv_buffer_init;

        float       f_ip_factor;

        float       f_pb_factor;

 

        /* 2pass */

        int         b_stat_write;   /* Enable stat writing in psz_stat_out */

        char        *psz_stat_out;

        int         b_stat_read;    /* Read stat from psz_stat_in and use it */

        char        *psz_stat_in;

 

        /* 2pass params (same as ffmpeg ones) */

        char        *psz_rc_eq;     /* 2 pass rate control equation */

        float       f_qcompress;    /* 0.0 => cbr, 1.0 => constant qp */

        float       f_qblur;        /* temporally blur quants */

        float       f_complexity_blur; /* temporally blur complexity */

        x264_zone_t *zones;         /* ratecontrol overrides */

        int         i_zones;        /* sumber of zone_t's */

        char        *psz_zones;     /* alternate method of specifying zones */

    } rc;

 

    /* Muxing parameters */

    int b_aud;                  /* generate access unit delimiters */

    int b_repeat_headers;       /* put SPS/PPS before each keyframe */

    int i_sps_id;               /* SPS and PPS id number */

} x264_param_t;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 数字转化excel行列_Python实现excel的列名称转数字、26进制(A-Z)与10进制互相转换...

Python实现excel的列名称转数字、26进制(A-Z)与10进制互相转换sequence list( map( lambda x: chr( x ), range( ord( A ), ord( Z ) 1 ) ) )##-----字母转数字(python实现 1-26A-Z, then AA-AZ)def ten2TwentySix(num):L []numnum-1; #实现从1对应Aif num > 25:while Tr…

错误提示:'……' is not assignable to Android.app.Activity Manifest XML

1 问题描述&#xff1a; 针对这段代码&#xff1a; <activity android:name".fragament.fragment_bulter" /> <activity android:name".fragament.fragment_girl" /> <activity android:name".fragament.fragment_user" />…

关于Lambda和匿名内部类

先上代码&#xff1a; //gcache(f)public <T,R> Function<T,R> cache(Function<T,R> f){final Map<T,R> cachenew HashMap<>();Function<T,R> gt->{if(cache.containsKey(t)){System.out.println("cached t:"t);return cache…

H26L encoder.cfg参数分析

H264 encoder.cfg参数分析 收藏 (1) 文件操作参数:#Files InputFile "silent.yuv" #输入序列,YUV 4:2:0 StartFrame 0 # 从视频流的第几帧开始编码 FramesToBeEncoded 30 #编码图象帧数,指明了除去 B帧后将要被编码的帧数(应该再实验一下&#x…

django-ckeditor表情包修改

一、版本 Django1.11django-ckeditor5.2.2 二、关键步骤 1.删除旧的ckeditor静态文件 所在目录&#xff1a;项目目录下的static文件夹下的ckditor文件夹 rm ckeditor -rf 原因&#xff1a;在安装ckeditor后需要执行collectstatic命令&#xff0c;这个过程中的查找静态文件会去…

python中最难的是什么_python什么的最难了

学的人很少的,如果你没有学过编程,建议学c语言.因为python中文资料很少的.你可以先了解一下phthonpython的历史python的创始人为guido van rossum。1989年圣诞节期间&#xff0c;在阿姆斯特丹&#xff0c;guido为了打发圣诞节的无趣&#xff0c;决心开发一个新的脚本解释程序&a…

Python3生成脚本实现重置键盘键位

个人博客点这里 #!/usr/bin/env python # -*- coding:utf-8 -*- # Created by 秋叶夏风# 本模块的功能:<重置键盘键位>import sys import ossave_format "bat" # 这个值可以修改&#xff0c;有两个选项(bat和reg)&#xff0c;可选择生成bat批处理文件或者re…

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.2.2 如何读入文本输入

2.2.2 如何读入文本输入 最简单的处理任意文本的方式就是使用在卷Ⅰ中我们广泛使用的Scanner类。我们可以从任何输入流中构建Scanner对象。或者&#xff0c;我们也可以将短小的文本文件像下面这样读入到一个字符串中&#xff1a; 在早期的Java版本中&#xff0c;处理文本输入的…

leetcode add Two Numbers

部分 conditional operators ?:写的statements 在有的编译器下能通过&#xff0c;有的可能通不过 base operand of -> has non-pointer type ListNode转载于:https://www.cnblogs.com/liyongguo/p/7152365.html

amap不同样式marker点_想出一手漂亮的图,CAD打印样式表你必须会!

好课推荐&#xff1a;1.CAD2014&#xff1a;点击查看2.室内CAD&#xff1a;点击查看3.CAD2019&#xff1a;点击查看4.CAD2018&#xff1a;点击查看5.【bim】revit&#xff1a;点击查看6.室内手绘&#xff1a;点击查看7.CAD三维&#xff1a;点击查看8.全屋定制&#xff1a;点击查…

JM8.5中的7种宏块模式问题

JM8.5中的7种宏块模式问题 收藏 Outline: 1、 CFG文件中有关可变尺寸宏块模式的相关选项2、 7种宏块模式对应的数值常量3、 7种宏块模式被分成宏块和亚宏块4、 如何对宏块和亚宏块的运动估计&#xff0c;采用一个共同的函数来处理5、 遗留问题1、CFG文件中有关可变尺寸宏块…

python高级编程技巧

个人博客点这里 如何在列表,字典,集合中根据条件筛选数据 方法1:通过迭代来进行判断筛选 解决方案 函数式编程: 如何统计序列中元素的出现频度 解决方案:使用collections.Counter对象 将序列传入Counter的构造器,得到Counter对象是元素频度的字典 Counter.most_common(n)…

2016年安全身份识别主流趋势

安全身份识别解决方案商HID Global通过从不同行业市场的重要客户那里所获得的深刻洞察&#xff0c;以及公司最新解决方案在前瞻性合作伙伴和全球各地的终端用户中进行的试点项目与正式部署情况&#xff0c;确定了2016年最值得业界关注的安全趋势。HID Global 广阔的行业视角&am…

列出一个目录中所有文件及大小

package com.test.tree;import java.io.File;/*** 列出一个目录中所有的文件和他们的大小* author wyl**/ public class FileList {public void list(File f){ //文件根目录&#xff0c;深度为0list(f,0);}/*** * param f* param depth 为了显示文件的层级形式*/public void li…

多媒体音频格式解析WMA WAV OGG AAC APE FLAC

无论是MP3还是MP4&#xff0c;甚至手机和多媒体DC&#xff0c;产品所支持的各种格式往往让人眼花缭乱。特别是对于刚上手的新手玩家来说&#xff0c;各种格式都有哪些特性&#xff0c;在实际 使用当中有多少格式实用或者必须&#xff0c;其实有很多方面需要我们来系统的了解。这…

数据分析之pandas笔记

Pandas 一个用于表示表格类型的内容 课时4&#xff1a;jupyter21 分22 秒课时5&#xff1a;pandas的内容24 分31 秒课时6&#xff1a;series内容38 分19 秒课时7&#xff1a;dataframe25 分50 秒 # 载入pandas库 import pandas as pd import numpy as nps pd.Series([2,4,6…

Apache日志记录组件Log4j出现反序列化漏洞 黑客可以执行任意代码 所有2.x版本均受影响...

开源的东西用的人多了&#xff0c;自然漏洞就多。Apache用于日志记录的组件Log4j使用非常灵活&#xff0c;在相当多的开源项目中都有使用&#xff0c;此次漏洞影响所有Apache Log4j 2.*系列版本&#xff1a; Apache Log4j 2.0-alpha1 – Apache Log4j 2.8.1&#xff0c;使用Jav…

react接收后端文件_React获取Java后台文件流并下载Excel文件流程解析

记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程&#xff0c;关键部分代码如下。首先在java后台中设置response中的参数&#xff1a;public void exportExcel(HttpServletResponse response, String fileName, String sheetName,List titleRow, List> dataRo…

Python常见的170道面试题全解析答案

个人博客点这里 语言特性 1. 谈谈对 Python 和其他语言的区别 答&#xff1a;Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库&#xff0c;他是一门强类型的可移植、可扩展&#xff0c;可嵌入的解释型编程语言&#xff0c;属于动态语言。 …

WMA文件信息格式分析及代码

WMA文件信息格式分析及代码 收藏 ASF文件和WMA文件格式差不多。具体请看下面我写的代码。文件分析根据mplayer其中的asfhead.c提供的代码进行分析。mplayer只解除出了标准的wma头信息&#xff0c;其扩展信息并没有解析出来。代码如下. /*每一个WMA文件&#xff0c;它的头16个字…