x264编码demo定制修改介绍

Dreaming-in-Gottingen 2020-12-26 原文


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的关键帧间隔出帧,直到下一次画风大变。

发表于
2020-12-26 00:08 
OnlyTime_唯有时光 
阅读(0
评论(0
编辑 
收藏

 

版权声明:本文为Dreaming-in-Gottingen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Dreaming-in-Gottingen/p/14191229.html

x264编码demo定制修改介绍的更多相关文章

  1. H264裸码流I/P/B帧类型判别

    H264裸码流I/P/B帧类型判别   花了两天时间做了个h264裸流nal类型和frame类型检测的工具,已 […]...

  2. 缩略图调查——抖音客户端/PC/iphone

    缩略图调查——抖音客户端/PC/iphone 最近对抖音有点上瘾,经常看到这样的视频列表:           […]...

  3. JPEG解码——(4)霍夫曼解码

    JPEG解码——(4)霍夫曼解码 本篇是该系列的第四篇,主要介绍霍夫曼解码相关内容。 承接上篇,文件头解析完毕 […]...

  4. JPEG解码——(6)IDCT逆离散余弦变换

    JPEG解码——(6)IDCT逆离散余弦变换   本篇是该系列的第六篇,承接上篇IZigZag变换,介绍接下来 […]...

  5. jpeg编解码概述

    jpeg编解码概述 本博文为概览性介绍。后面有空了再分几篇博文分别介绍所用到的技术细节。 1.编解码目标   […]...

  6. jm8.6编解码器概述

    jm8.6编解码器概述   自己在学习h264的路上,欢迎讨论交流。   前段时间研究JM出品的h264编码器 […]...

随机推荐

  1. 基于 HTML5 的工业互联网云平台监控机房 U 位

    机柜 U 位管理是一项突破性创新技术–继承了 RFID 标签(电子标签)的优点的同时,完全解决了 […]...

  2. 服务器型号对应配置

    服务器型号对应配置     posted on 2019-09-19 15:19  Snowfun  阅读(3 […]...

  3. IntelliJ IDEA提升效率开发插件必备

    工欲善其事,必先利其器,好的工具可以提升我们的开发效率,下面介绍几款个人觉得比较好的编辑器插件,不仅炫酷更重要 […]...

  4. 创建eclipse新的workspace并设置workspace共享配置

    一:创建新的workspace 1、File——Switch Workspace——Other 2、修改wor […]...

  5. 不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据?新手必学

        Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网 […]...

  6. iwara.tv加速 i站加速 和本地DNS代理软件Acrylic的简单使用

    方法一,本地DNS代理软件Acrylic,支持通配符(Windows 10及以上版本一键安装) 下载地址 ht […]...

  7. Java8的Stream API使用

    前言 这次想介绍一下Java Stream的API使用,最近在做一个新的项目,然后终于可以从老项目的祖传代码坑 […]...

  8. 关于pcre正则表达式库libpcre

    gcc 4.8中已经包含了std regex的头文件 可是没有实现,所以链接是失败的 gcc 4.9完整的支持 […]...

展开目录

目录导航