x264编码demo定制修改介绍
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的关键帧间隔出帧,直到下一次画风大变。
x264编码demo定制修改介绍的更多相关文章
- Android camera采集视频 X264编码
参考 http://blog.csdn.net/zblue78/article/details/6058147 感谢 ExperiencesOfCode 硬件平台:CPU Intel G630 @2. ...
- TFS中工作项的定制-修改面板
上一篇文章我们讲到了<TFS 中工作项的订制-修改工作流>,工作流只要我们设计出来,就可以进行定制修改了.这次通过简单的案例,了解一下,工作项的面板如何定制. 1.软件准备 ...
- WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码
转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...
- 查看 postgresql 数据库编码,以及修改数据库编码
查看数据表编码: \encoding 修改数据库编码: update pg_database set encoding = pg_char_to_encoding('UTF8') where datn ...
- x264编码的图像出现乱码的问题
将YUV进行x264编码的时候,建议将 i_threads 参数设置成 X264_SYNC_LOOKAHEAD_AUTO//* 取空缓冲区继续使用不死锁的保证. 否则有可能编码出来的数据会出现IDR_ ...
- X264编码流程详解(转)
http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如 ...
- 视频x264编码浅析
声明 x264_param_t 结构体变量: x264_param_t params; x264_param_default_preset(¶ms, "ultrafast&q ...
- 使用良好的自定义X264编码,取得极佳质量!《转》
原帖地址:http://www.xspliter.com/forum.php?mod=viewthread&tid=447 一般直播时使用A设定即可.你尝试设置并找出你最满意的设定 A为最需最 ...
- day40——数据库、数据库分类、安装、修改密码、字符集编码、简单语句介绍
day40 详情请看:https://www.cnblogs.com/clschao/articles/9907529.html 数据库 数据库 简而言之可视为电子化的文件柜--存储电子文件的处所,用 ...
随机推荐
- D. Circle Game 题解(对称博弈)
题目链接 题目大意 t组数据(t<=100) 给你一个半径d和步数k,你最开始在原点(0,0)每次可以让x坐标增加k,或者y坐标增加k 两人轮流走,求谁最后不能走了,谁就输了,都是最优博弈 输的 ...
- 浅谈代理模式与java中的动态代理
代理模式的定义: 代理模式是一个使用律非常高的模式,定义如下: 为其他对象提供一种代理,以控制对这个对象的访问. 类图: 简单的静态代理: public interface IRunner{ //这是 ...
- 03-Python里字符串的常用操作方法二
1.lstrip():删除左侧空白字符 实例: my_str = ' hello world and my and test and python ' # 原始字符串 print(my_str) # ...
- 用java以正确的姿势刷CSP
许多程序算法考试中,用java是个不错的选择,它几乎实现了所有c++能实现的,所以越来越受Acmer的欢迎.总结一下用到的一些技巧和方法.更多关于csp的可参考海岛blog|皮卡丘 1. 输出 规格化 ...
- springmvc<一> 一些特殊的Bean
Special Bean Types HandlerMapping 基于前置或后置拦截器映射请求到处理器,具体实现方式由子类决定, 两种主要的实现 ...
- Docker实战 | 第四篇:Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结
一. 前言 在之前的文章中 IDEA集成Docker插件实现一键自动打包部署微服务项目,其中开放了服务器2375端口监听,此做法却引发出来一个安全问题,在上篇文章评论也有好心的童鞋提示,但自己心存侥幸 ...
- 搭建ARL资产安全灯塔
老年人了,只能靠安装部署项目混混日子这样~ 简介: 斗象TCC团队正式发布「ARL资产安全灯塔」开源版,该项目现已上线开源社区GitHub.ARL旨在快速侦察与目标关联的互联网资产,构建基础资产信息库 ...
- John the Ripper快速密码破解工具简单使用
在某场比赛中师傅们说需要用到该工具,学习之 题目给了我们一个流量包,分析 发现 .hint.php.swp文件 该文件是使用 vim 编辑文件时异常退出而产生的,可以通过 vim -r 文件名 进行相 ...
- python接口测试自动化框架-发送邮件,邮箱报错: 535 Error, authentication failed
1.无意中把腾讯企业邮箱设置为安全登录,接口测试自动化发送邮件,不能被正常接收.错误信息为:535 Error, authentication failed. 原因:认证安全登录后,原来新的邮箱代码传 ...
- MySQL(14)---Docker搭建MySQL主从复制(一主一从)
Docker搭建MySQL主从复制(一主一从) 上一篇博客写了MYSQL主从复制原理 : MySQL(13)---MYSQL主从复制原理 这篇我们来写 Docker搭建MYSQL主从复制(一主一从) ...