![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
x264
文章平均质量分 96
探索x264编解码器的工作原理
安步当歌
这是我的学习日记,希望你能开心
展开
-
【x264】整体框架汇总
在梳理了x264之后,对实际商用的编码器有了初步的框架级别的认识,但是这样的编码器在实际应用中如何修改?在整个多媒体框架链路中,编码器又是处于一个怎样的地位?FFmpeg作为一个功能强大的多媒体库,在使用编码器时,又有哪些特点?对于一个音视频技术员来说,熟悉编码器应该说是基础,因为这是网络传输的必要前提,下一步或许可以尝试的点在于,如何结合FFmpeg实现一些视频通信的功能,只有打通采集,编码,传输,解码,播放这样一套流程,才算入门视频技术,其余的一些独特的优化,应该说是附带价值,后续再做梳理原创 2024-06-18 18:06:02 · 834 阅读 · 0 评论 -
【x264】滤波模块的简单分析
滤波模块存在的意义是,由于编解码过程中的变换量化过程带来的误差,重建帧和原始帧往往有一定的差异程度,这种差异程度在mb的边界部分较为突出,具体表现为两个mb之间的边界模糊、不连续,此时需要进行滤波来去除这种边界模糊的不利影响。由于滤波模块存在位置在编解码的环路之中,同时去除的是相邻块之间的模糊,所以滤波模块又称之为环路去块滤波(In-loop deblock filter)或环路滤波。下图中,左侧图片没有使用滤波,右侧图片使用了滤波。明显看出没有使用滤波之前,块之间有明显的不连续情况,而使用了之后明显平滑许原创 2024-06-18 09:28:22 · 686 阅读 · 0 评论 -
【x264】熵编码模块的简单分析
熵编码模块是整个编码器实现的最后一个模块,它根据上下文信息将前面已经生成的语法元素进一步压缩,最后写入到码流当中。具体来说,熵编码模块位于变换量化模块之后,通过考虑量化之后系数的上下文情况来分配码字,从而获得更高的压缩效率。主要有两种实现方式,分别是基于上下文的自适应可变长编码(CAVLC)和基于上下文的自适应二进制算术编码(CABAC)原创 2024-06-17 10:22:46 · 425 阅读 · 0 评论 -
【x264】变换量化模块的简单分析
变换量化是编码器当中用于节省编码码率的重要操作,其本身应该分为两个部分:变换(transform)和量化(quant),但是由于使用时通常配套使用,所以一般将两者统称为变换量化。变换量化模块处于预测模块之后,用于将预测的残差信息进一步压缩,通过消除图像中的相关性及减小图像编码的动态范围,获得更高的压缩效率。原创 2024-06-13 18:49:47 · 707 阅读 · 0 评论 -
【x264】lookahead模块的简单分析
lookahead是一种改善视频编码质量的技术,通过分析未来的视频帧,以在当前帧的编码过程中做出更好的决策。具体来讲,lookahead创建了一个队列,将输入的视频帧送入到这个队列当中,根据配置和视频内容来确定每一个视频帧的类型,从而提升编码质量。此外,在lookahead模块中还加入了mbtree和vbv技术,用于更加精确地调控。原创 2024-06-12 11:45:45 · 972 阅读 · 0 评论 -
【x264】码率控制模块的简单分析—编码主流程
编码器是一个由许多简单或者复杂的编码工具组成的一个系统,这个系统的任务是实现高效的视频或图像压缩,评价的指标是编码之后的质量和码率,分别用PSNR和Bitrate描述。在对这样一个系统进行开发或者使用时,应该考虑使用何种工具来满足当前的任务需求,这样就引出了一个重要的问题,使用何种方法,能够将这么多的工具串联起来,以一个较低的编码码率来获得较高的编码质量。因为这种方法是一种编码控制算法,且目标是较低的编码码率,所以这种方法又可以称为码率控制(Rate Control, RC)原创 2024-06-07 12:08:42 · 822 阅读 · 0 评论 -
【x264】码率控制模块的简单分析—帧级码控策略(CQP、CRF、ABR)
本文记录的码控当中,主要关注的内容为bit、qscale和complexity,不同的码率控制方法是围绕着这三者进行的,有的侧重于质量稳定,有的侧重于码率稳定,如何合理的对这几个方面进行调控,是实现良好码率控制的核心。此外,在码率控制当中使用了许多经验性的参数,这是利用实际应用中测试的参数拟合得到的,针对于不同的应用场景,这些参数应当进行特定的修正,包括外部配置的参数本文记录了x264当中帧级码控策略,主要模式包括cqp模式、crf模式和abr模式,没有详细记录cbr模式、2pass模式和vbr模式。原创 2024-06-06 11:20:50 · 486 阅读 · 0 评论 -
【x264】码率控制模块的简单分析—宏块级码控工具Mbtree和AQ
mbtree是一种宏块级别的码率控制工具,根据帧间预测相关信息,来有效的降低编码的码率。mbtree的工作原理可以简单描述为,在lookahead当中通过前向预测,来获得当前mb的重要程度,重要程度由被参考的情况来衡量。如果被参考的权值很高,说明这个mb很重要,此时这个mb会按照较低的qp编码,否则按照较高的qp编码。这个权值的衡量由当前mb的intra_cost、inter_cost和前面mb赋予当前mb的传播cost决定原创 2024-06-03 14:50:02 · 860 阅读 · 0 评论 -
【x264】分析模块(analyse)的简单分析—帧间预测
帧间预测的主要思想是利用前面某一帧当中的像素块作为参考,指导当前帧中的像素块进行编码。首先,需要指定一个参考帧,假设是实时音视频场景,为了保证实时性,通常设定的帧结构类型为Intra P P ..... Intra P P,即间隔若干个P帧之后才会出现Intra帧,这若干个P帧会将前一个Intra帧作为参考帧;其次,要在参考帧当中查找一个和当前像素块比较相似的参考块,这个参考块在参考帧中的位置不一定与当前块在当前帧中的位置相同,这个查找的过程叫做运动估计,该过程会获得一个运动向量,这个运动向量的方向从当前原创 2024-05-23 13:49:05 · 996 阅读 · 0 评论 -
【x264】分析模块(analyse)的简单分析—帧内预测
帧内预测的主要思想是利用当前帧内部的信息作为参考,进行信息的预测,选择一个最佳的预测模式。具体来说,当前编码块利用左侧和上方的参考块边界像素作为依据,按照不同的预测模式对当前块进行预测。帧内预测主要关注的内容包括: 1. 预测模式 (1)16x16亮度块(4种预测模式) (2)4x4亮度块(9种预测模式) (3)8x8色度块(4种预测模式) 2. 评价方式 (1)绝对误差(SAD, Sum of Absolute Difference) (2)变换后的绝对误差(SATD, Sum of Ab原创 2024-05-21 17:41:17 · 880 阅读 · 0 评论 -
【x264】x264编码主流程简单分析
x264编码主流程当中,主要涉及的内容包括多线程处理,读取配置文件,处理帧的头部信息,处理帧级别的配置信息,进行帧编码之后,释放掉配置文件。应当思考的内容包括: 1. 多线程在工程之上应用很多,尤其是多流的发送和接收,与网络TCP协议结合起来,此外还需要熟悉socket的使用和运用方式 2. 读取配置文件是与外部的接口,里面的配置项,具体涉及到编码器当中的哪个模块,是在哪些地方有影响,影响不同的工具之后,编码的性能有多大的差异,在何种情况下使用何种配置项...原创 2024-05-17 11:15:06 · 942 阅读 · 0 评论 -
【x264】编码核心函数(x264_encoder_encode)的简单分析
x264_encoder_encode中实现了实际编码一帧的功能,其中涉及到了编码器中诸多方面的内容,大体可以归类如下: 1. 码流存储的方式 2. 码率控制的实现 3. 预测模块(帧内预测,帧间预测) 4. 实际编码(DCT变换,Quant量化) 5. 熵编码(CABAC,CAVLC) 6. 滤波模块在视频编码当中,工作的大致流程是,输入一帧,经过mb块划分之后,对每一个mb进行参考帧预测(帧内或帧间)获得残差,对残差进行实际编码(变换量化)获得系数,系数通过熵编码进行编码并写入码流。原创 2024-05-17 10:47:46 · 590 阅读 · 0 评论 -
【x264】x264编码器参数配置
文章汇总了x264编码器参数配置,包括默认配置、不同档位配置以及优化策略配置原创 2024-05-07 16:35:04 · 797 阅读 · 0 评论