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定制修改介绍的更多相关文章

  1. Android camera采集视频 X264编码

    参考 http://blog.csdn.net/zblue78/article/details/6058147 感谢 ExperiencesOfCode 硬件平台:CPU Intel G630 @2. ...

  2. TFS中工作项的定制-修改面板

    上一篇文章我们讲到了<TFS 中工作项的订制-修改工作流>,工作流只要我们设计出来,就可以进行定制修改了.这次通过简单的案例,了解一下,工作项的面板如何定制.     1.软件准备     ...

  3. WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码

    转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...

  4. 查看 postgresql 数据库编码,以及修改数据库编码

    查看数据表编码: \encoding 修改数据库编码: update pg_database set encoding = pg_char_to_encoding('UTF8') where datn ...

  5. x264编码的图像出现乱码的问题

    将YUV进行x264编码的时候,建议将 i_threads 参数设置成 X264_SYNC_LOOKAHEAD_AUTO//* 取空缓冲区继续使用不死锁的保证. 否则有可能编码出来的数据会出现IDR_ ...

  6. X264编码流程详解(转)

    http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如 ...

  7. 视频x264编码浅析

    声明 x264_param_t 结构体变量: x264_param_t params; x264_param_default_preset(&params, "ultrafast&q ...

  8. 使用良好的自定义X264编码,取得极佳质量!《转》

    原帖地址:http://www.xspliter.com/forum.php?mod=viewthread&tid=447 一般直播时使用A设定即可.你尝试设置并找出你最满意的设定 A为最需最 ...

  9. day40——数据库、数据库分类、安装、修改密码、字符集编码、简单语句介绍

    day40 详情请看:https://www.cnblogs.com/clschao/articles/9907529.html 数据库 数据库 简而言之可视为电子化的文件柜--存储电子文件的处所,用 ...

随机推荐

  1. 【数据结构模版】可持久化线段树 && 主席树

    浙江集训Day4,从早8:00懵B到晚21:00,只搞懂了可持久化线段树以及主席树的板子.今天只能记个大概,以后详细完善讲解. 可持久化线段树指的是一种基于线段树的可回溯历史状态的数据结构.我们想要保 ...

  2. 1. 揭秘Spring类型转换 - 框架设计的基石

    仰不愧天,俯不愧人,内不愧心.关注公众号[BAT的乌托邦],有Spring技术栈.MyBatis.JVM.中间件等小而美的原创专栏供以免费学习.分享.成长,拒绝浅尝辄止.本文已被 https://ww ...

  3. Beta冲刺——用户测试报告

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 用户测试报告 用户 ...

  4. Spring Cloud Alibaba 初体验(六) Seata 及结合 MyBatis 与 MyBatis-Plus 的使用

    一.下载与运行 本文使用 Seata 1.1.0:https://github.com/seata/seata/releases Windows 环境下双击 bin/seata-server.bat ...

  5. Apache Flink 如何正确处理实时计算场景中的乱序数据

    一.流式计算的未来 在谷歌发表了 GFS.BigTable.Google MapReduce 三篇论文后,大数据技术真正有了第一次飞跃,Hadoop 生态系统逐渐发展起来. Hadoop 在处理大批量 ...

  6. python之Bug之字符串拼接bug

    \r\n拼接Bug 环境: python3.4.pycharm2017 偶然的学习中遇到了一个问题,百思不得姐,什么问题呢,大家输入太快了,难免有失误就如下面的代码 #构造响应数据 response_ ...

  7. 问题:PyCharm调试方法Force run to cursor与run to cursor的区别

    Force run to cursor与run to cursor的差别是,后者在执行到光标的代码行前,如果有代码中设置了断点,会在该断点处暂停,等待进一步调试指令,而Force run to cur ...

  8. pl/sql12;pl/sql14激活注册码

    搜集的plsql 12激活码: Product Code(产品编号):4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number(序列号):601769 pass ...

  9. aspnetcore webapi 解决发布以后每隔一段时间请求变缓慢

    项目:netcore webapi 3.1 平台:windows server 2008 r2 服务器:IIS 7.5 项目发布到IIS以后第一次请求特别慢大概7.8秒,然后每隔5分钟请求一次大概2. ...

  10. P4317 花神的数论题,关于luogu题解粉兔做法的理解

    link 题意 设 \(\text{sum}(i)\) 表示 \(i\) 的二进制表示中 \(1\) 的个数.给出一个正整数 \(N\) ,求 \(\prod_{i=1}^{N}\text{sum}( ...