该命令行工具调用的是libx264,就是一个使用该库的示例程序
X264命令行工具的源代码在x264中的位置如下图所示(红框里面的)。
X264命令行工具的源代码的调用关系如下图所示。
Additionally the x264opts and x264-params private options allows one to pass a list of key=value tuples as accepted by the libx264 x264_param_parse function.
最关键的API包括:
x264_param_default():设置参数集结构体x264_param_t的缺省值。
x264_encoder_open():打开编码器。
x264_encoder_headers():输出SPS,PPS,SEI等信息。
x264_encoder_encode():编码输出一帧图像。
x264_encoder_close():关闭编码器。
循环中调用getopt_long()逐个解析输入的参数,并作相应的处理;
parse()的流程:
(1)调用x264_param_default()为存储参数的结构体x264_param_t赋默认值
(2)调用x264_param_default_preset()设置preset,tune  
(3)在一个大循环中调用getopt_long()逐个解析输入的参数,并作相应的处理。举几个例子:
a)“-h”:调用help()打开帮助菜单。
b)“-V”调用print_version_info()打印版本信息。
c)对于长选项,调用x264_param_parse()进行处理。
(4)调用select_input()解析输出文件格式(例如raw,flv,MP4…)
(5)调用select_output()解析输入文件格式(例如yuv,y4m…)

x264_param_default:
  1. //码率控制模块 Rate Control
  2. param->rc.i_rc_method = X264_RC_CRF;
  3. param->rc.i_bitrate = 0;
  4. param->rc.f_rate_tolerance = 1.0;
  5. param->rc.i_vbv_max_bitrate = 0;
  6. param->rc.i_vbv_buffer_size = 0;
  7. param->rc.f_vbv_buffer_init = 0.9;
  8. param->rc.i_qp_constant = 23 + QP_BD_OFFSET;
  9. param->rc.f_rf_constant = 23;
  10. param->rc.i_qp_min = 0;
  11. param->rc.i_qp_max = QP_MAX;
  12. param->rc.i_qp_step = 4;
  13. param->rc.f_ip_factor = 1.4;
  14. param->rc.f_pb_factor = 1.3;
  15. param->rc.i_aq_mode = X264_AQ_VARIANCE;
  16. param->rc.f_aq_strength = 1.0;
  17. param->rc.i_lookahead = 40;
  18. param->rc.b_stat_write = 0;
  19. param->rc.psz_stat_out = "x264_2pass.log";
  20. param->rc.b_stat_read = 0;
  21. param->rc.psz_stat_in = "x264_2pass.log";
  22. param->rc.f_qcompress = 0.6;
  23. param->rc.f_qblur = 0.5;
  24. param->rc.f_complexity_blur = 20;
  25. param->rc.i_zones = 0;
  26. param->rc.b_mb_tree = 1;
  1. if( !strncasecmp( s, "zerolatency", 11 ) )
  2. {
  3. //zerolatency速度快
  4. param->rc.i_lookahead = 0;
  5. param->i_sync_lookahead = 0;
  6. param->i_bframe = 0;//不使用B帧
  7. param->b_sliced_threads = 1;
  8. param->b_vfr_input = 0;
  9. param->rc.b_mb_tree = 0;
  10. }
  1. if( !strcasecmp( preset, "superfast" ) )
  2. {
  3. param->analyse.inter = X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;
  4. param->analyse.i_me_method = X264_ME_DIA;//钻石模板
  5. param->analyse.i_subpel_refine = 1;//亚像素运动估计质量为1
  6. param->i_frame_reference = 1;
  7. param->analyse.b_mixed_references = 0;
  8. param->analyse.i_trellis = 0;
  9. param->rc.b_mb_tree = 0;
  10. param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
  11. param->rc.i_lookahead = 0;
  12. }
cli_output_t:输出格式对应的结构体。输出格式一般为H.264裸流、FLV、MP4等。
cli_input_t:输入格式对应的结构体。输入格式一般为纯YUV像素数据,Y4M格式数据等。
cli_vid_filter_t:输入格式滤镜结构体。滤镜可以对输入数据做一些简单的处理,例如拉伸、裁剪等等(当然滤镜也可以不作任何处理,直接读取输入数据)。
在x264的编码过程中,调用cli_vid_filter_t结构体的get_frame()读取YUV数据,
调用cli_output_t的write_frame()写入数据。
resize_filter中调用了libswscale类库中的sws_scale()对图像完成了拉伸工作。
注:拉伸滤镜需要libswscale类库的支持。
参考:
http://blog.csdn.net/leixiaohua1020/article/details/45583217 本文仅高亮对自己有用的信息

x264命令行工具(x264.exe)源码整体分析的更多相关文章

  1. x264源代码简单分析:x264命令行工具(x264.exe)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  2. 命令行工具aspnet_regiis.exe实现加密和解密web.config

    命令行工具aspnet_regiis.exe,是一个类似于DOS的命令工具,称之为命令解释器.使用命令行工具加密和解密web.config文件中的数据库连接字符串时,只需要简单的语法命令即可. 加密语 ...

  3. 命令行工具osql.exe使用

    目标: 快速在21个库修改Test表的某条记录,这几个库都分别在不同的服务器上. 通常会想到,到每个库都执行一下语句不就好了吗?这个数据库切换来切换去,挺麻烦了,通过命令行工具osql.exe就可以快 ...

  4. 《Java从入门到失业》第二章:Java环境(三):Java命令行工具

    2.3Java命令行工具 2.3.1编译运行 到了这里,是不是开始膨胀了,想写一段代码来秀一下?好吧,满足你!国际惯例,我们写一段HelloWorld.我们在某个目录下记事本,编写一段代码如下: 保存 ...

  5. SNMP WINDOWS系统的命令行工具下载

    SNMP windows系统的命令行工具snmputil.exe下载链接:请点击

  6. Windows2008安装组件命令行工具ServerManagerCmd用法介绍

    转自:http://blog.sina.com.cn/s/blog_537de4b5010128al.html Windows2008 安装组件服务等内容比原来复杂的多,用鼠标点来点去,既繁琐也缓慢, ...

  7. DICOM医学图像处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求

    转载:http://blog.csdn.net/zssureqh/article/details/39213817 背景: 上一篇专栏博文中针对PACS终端(或设备终端,如CT设备)与RIS系统之间w ...

  8. 如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...

  9. PHP命令行执行程序php.exe使用及常用参数

    PHP命令行执行程序php.exe参数说明 -f <file>:以命令行方式运行指定的PHP文件,只要指定具体的PHP文件(带绝对路径),php.exe就可以执行PHP文件,所以这个参数单 ...

随机推荐

  1. JavaScript的map循环、forEach循环、filter循环、reduce循环、reduceRight循环

    1.map循环 let arr=[1,2,3,4]; arr.map(function(value,key,arr){ //值,索引,数组(默认为选定数组) return item; //如果没有re ...

  2. javascript快速入门27--XSLT基础

    XSL 与 XSLT XSL 指扩展样式表语言(EXtensible Stylesheet Language).它主要被用来对XML文档进行格式化,与CSS不同,XSL不仅仅是样式表语言XSL主要包括 ...

  3. Vue生命周期各阶段发生的事情

    首先,参考之前一篇vue生命周期的总结:Vue生命周期总结 接下来我们来分析下官方文档经典流程图,每个阶段到底发生了什么事情. 1.在beforeCreate和created钩子函数之间的生命周期 在 ...

  4. Laravel 5系列教程二:路由,视图,控制器工作流程

    免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel ...

  5. RDD编程 上(Spark自学三)

    弹性分布式数据集(简称RDD)是Spark对数据的核心抽象.RDD其实就是分布式的元素集合.在Spark中,对数据的操作不外乎创建RDD.转化已有RDD以及调用RDD操作进行求值.而在这一切背后,Sp ...

  6. Solr报错Index locked for write for core '***'. Solr now longer supports forceful unlocking via 'unlockOnStartup'

    unlockOnStartup 告知 Solr 忽略在多线程环境中用来保护索引的锁定机制.在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新.将其设置为 true ...

  7. 2017.12.07 postgresql使用with recursive完成迭代查询

    1.表结构 2.需求 查询某条记录的所有父亲节点,或者所有孩子节点. 3.向上查询(查询所有父亲节点) 注意,这里返回的记录包含自己. sql如下: WITH RECURSIVE res AS ( S ...

  8. 转:ios学习指南

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Franz Fang链接:https://www.zhihu.com/question/20264108/answer/302 ...

  9. Android之——获取手机安装的应用程序

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47114331 前几篇有关Android的博文中.向大家介绍了几个项目中经常使用的有 ...

  10. Android自己定义button实现长按功能

    Android自己定义button实现长按功能 通过自己定义BUTTON,写一个LongTouchBtn类,在按下的时候运行onTouchEvent事件,通过这个事件使用回调函数来实现长按功能! XM ...