x264编码器,提供了两个demo来验证编码功能:一个是大而全的x264.c,另外一个是简洁版的example.c。

  其中,前者demo,可以配置很多编码参数,但太冗长繁杂,对初学者不太友好。

   后者demo,大多参数都已hard code,用户仅需调整width、height、color_space信息即可,阅读起来比较easy。

  但是存在一个问题,默认输入/输出文件是stdin/stdout,这怎么能行?因此修改了一版来方便大家使用。已上传至这儿

  修改部分需要做几点说明:

1. sps/pps头补加方式:param.b_repeat_headers

  原生方式,在每个关键帧前编码器都会自动增加该头信息(因为设置值为1)。而实际上,一般编码参数配置了后(不需送yuv帧),

就可以出该csd(Codec Specific Data,对于h264为sps/pps)数据了,不需每个关键帧前都加该头信息,因此我将该值修改为了0。

2. 基于1的修改,需要增加特定接口获得csd数据。

  该特定接口函数为x264_encoder_headers(h, &nal, &i_nal),打开编码器后,直接调用该接口就可以获得csd数据。

针对该接口,需要补充说明一点,函数返回后i_nal值代表多少个nalu单元,这里的值是3,即SPS+PPS+SEI共三种类型。

3. profile级别设定:x264_param_apply_profile

  原生profile为“high”,其实我比较排斥B帧,因此修改为了baseline,因为规范中只有该profile不带B帧。

4. 固定关键帧间隔 or 根据场景自动生成

  原生方式为根据场景变换来生成一个关键帧,因此什么时候来KeyFrame是不确定的。其实,这种方式有其很强的合理性。

  什么场景使用x264编码器?一般是视频剪辑,而不是像具体手持设备实时编码场景(场景画面变化是物理连续、渐进的),

  因此,常常会出现场景切换,这个时候最合理的方案是切换后的第一帧,编码为关键帧,当然前提条件是需要一定算法去检测到场景变化了!

  而我的需求是:需要出固定关键帧间隔!怎么做呢?编码参数进行如下配置:

1 param.i_keyint_max = 25;
2
3 param.i_keyint_min = 25;

  然而,这样做起作用了吗?

  答案可能不是那么干脆利索,不能简单用“是”或“否”来回答,只能用“几乎是”,呵呵。。。

  详细说来,如果图像帧序列画风比较平稳,没有大变天,那么就会按照25的关键帧间隔编码;

  而如果遇到画风大变,就会智能地编出关键帧,然后以该帧为起点再按25的关键帧间隔出帧,直到下一次画风大变。

最新文章

  1. 手把手教你用FineBI做数据可视化
  2. java 分页功能
  3. Linux创建定时任务
  4. Java NIO1:I/O模型概述
  5. Struts2 Result 类型和对应的用法详解
  6. rabbitmq消息队列——"发布订阅"
  7. 面向对象编程OOP-1
  8. 在ubuntu上搭建开发环境1---在windows7的基础上在安装ubuntu(双系统)
  9. Mysql-学习笔记(==》事件 十二)
  10. ssh整合随笔(注解方式,Spring 管理action)
  11. poj3308Paratroopers(dinic)
  12. 解决android锁屏或解锁后activity重启的问题
  13. G - RPG的错排(错排)
  14. JS常用的标准函数
  15. java面向对象浅析
  16. A computer hardware platform abstraction - part.1
  17. 学python走过的坑 二 element与elements的却别
  18. Python基础3(2017-07-20)
  19. MySQL(六)常用语法和数据类型
  20. yii2.0增删改查

热门文章

  1. Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)
  2. 【mq读书笔记】消费进度管理
  3. ios中关于系统定位CLLocationManager的使用解析
  4. HOOK API函数跳转详解
  5. Kubernetes K8S之固定节点nodeName和nodeSelector调度详解
  6. Windows下django项目部署 通过Apache2.4+mod_wsgi
  7. Python基础教程目录
  8. 转:Cookie详解
  9. PyQt(Python+Qt)学习随笔:QTableWidget的获取指定位置项的item和itemAt方法
  10. Python学习随笔:PyCharm的错误检测使用及调整配置减少错误数量