分片转码方法及装置制造方法
【专利摘要】本申请公开了分片转码方法及装置,所述方法包括:将一片源分割为若干子片,其中每个子片包括若干帧;对若干子片分别进行预转码,获得每个子片的全局统计信息,每个子片的全局统计信息至少包括片源内所有帧的帧级信息;依照片源内所有帧的帧级信息估算每帧的复杂度,并且根据每帧的复杂度以及所预设的片源转码后的目标码率,调整每帧的帧级信息中的量化参数;依照每个子片中任一帧的调整后的量化参数对所述每个子片中任一帧进行转码,直到所有子片转码完成,依片源分割时获得的子片的顺序将转码完成后的所有子片合并,拼接为转码后的片源。本身请综合全局考虑,将有效的片源码率进行合理的分配,整个片源在播放过程中,质量、清晰度会较为均匀。
【专利说明】分片转码方法及装置
【技术领域】
[0001]本申请涉及电通信【技术领域】,具体涉及一种分片转码的方法和分片转码装置。
【背景技术】
[0002]当今社会,随着形式各样的电子终端系统以及各种播放器的产生,对视频文件的格式要求也越来越复杂化、多样化。各家终端都有自己所支持的视频格式,以终端为载体的播放器也有自己支持的视频格式,而网络上提供可下载的视频文件往往只有一种格式,再者从一些视频录制工具输出的视频文件格式也往往比较单一,如果一种格式的视频文件需要在另一终端进行播放或者另一种播放器进行播放,其格式有可能不能满足终端或者播放器的需求,此时就需要进行视频格式转换即视频转码,以满足用户的需求。
[0003]视频转码就是将一种格式的视频文件转换为另一格式的视频文件,在实际操作中,一些比较长的视频文件,其视频转码时间较长,给用户带来困扰。为解决这一问题大都采用将一长视频分片转码来提升转码的速度,即将一段长视频分成若干子片,每个子片在不同的CPU或者转码机上同时进行同时转码,等所有的子片全部转码完成之后,再对转码后的所有子片进行合并拼接处理,使其成为一个新的完整的视频。
[0004]但是,由于所分出的若干子片的各个子片间相互独立,不能统筹全局的码率分配,造成各个子片的质量不均。这样就需要提供一种方法来应对因为码率分配不均进而使得各个子片的质量不同,造成编码之后的质量较整片编码的质量有明显下降的问题。
【发明内容】
[0005]本申请所要解决的技术问题在于提供一种分片转码的方法和分片转码装置,解决长视频在分片转码过程中,因为不同统筹全局的码率分配,造成各个子片的质量不均。
[0006]为了解决上述技术问题,本申请揭示了一种分片转码方法,包括:将一片源分割为若干子片,其中每个子片包括若干帧;对所述若干子片分别进行预转码,获得每个子片的全局统计信息,所述每个子片的全局统计信息至少包括所述片源内所有帧的帧级信息;依照所述片源内所有帧的帧级信息估算每帧的复杂度,并且根据所述每帧的复杂度以及所预设的片源转码后的目标码率,调整每帧的帧级信息中的量化参数;依照每个子片中任一帧的调整后的量化参数对所述每个子片中任一帧进行转码,直到所有子片转码完成,依所述片源分割时获得的子片的顺序将转码完成后的所有子片合并,拼接为转码后的所述片源。
[0007]进一步地,根据所述每帧的复杂度以及所预设的片源转码后的目标码率,调整每帧的帧级信息中的量化参数,包括:步骤a:根据任一帧的复杂度调整所述任一帧的量化增量;步骤b:根据所述任一帧的调整后的量化增量以及所述任一帧的帧级信息为所述任一帧分配转码比特数,并且通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率;步骤c:比较调整后的所述片源的转码码率与所预设的片源转码后的目标码率,如果两者相差大于预设阈值,则依照所述片源内所有帧之间的复杂度比值,再次调整每帧的帧级信息中的量化增量,重复执行步骤b至c ;如果两者相差小于或等于预设阈值,执行步骤d ;步骤d:将最后一次执行的步骤b中所述任一帧的调整后的量化增量转换为每帧的最终调整后的量化参数。
[0008]进一步地,根据所述任一帧的调整后的量化增量以及所述任一帧的帧级信息为所述任一帧分配转码比特数,包括:根据所述任一帧的帧级信息中的残差转码比特数、运动矢量的转码比特数以及头信息转码比特数,结合所述任一帧的量化增量,计算出为所述任一帧所分配的转码比特数。
[0009]进一步地,通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率,包括:对于任一子片,根据所述任一子片内每帧所分配的转码比特数,计算所述任一子片的转码码率;对所有子片的转码码率进行叠加后再求平均数,计算出调整后的所述片源的转码码率。
[0010]进一步地,对所述若干子片分别进行预转码,获得每个子片的全局统计信息,所述每个子片的全局统计信息至少包括所述片源内所有帧的帧级信息,包括:对所述若干子片分别进行预转码,获得每个子片的统计信息;对任一子片,将所述任一子片的统计信息排在第一位,依所述片源分割时获得的子片的顺序将其他子片的统计信息排在所述任一子片的统计信息之后,将所有子片的统计信息进行合并从而得到所述每个子片的全局统计信息。
[0011]进一步地,所述每个子片的统计信息,至少包括:所述子片内依序排列的各帧的帧级信息;所述每个子片的全局统计信息中,前一个子片的结束帧的帧级信息,连接后一个子片的起始帧的帧级信息,且当排在第一位的所述任一子片不是依子片分割的顺序排在首位的子片时,依子片分割的顺序排在首位的子片的起始帧的帧级信息,连接排在末尾的子片的结束帧的帧级信息。
[0012]进一步地,所述每帧的复杂度,是所述每帧的像素的渲染次数相对于整个片源的所有像素的渲染次数的比较值。
[0013]进一步地,预转码所获得的所述每个子片的全局统计信息,至少还包括所述片源内每个帧所含有的每个宏块的量化增量;依照每个子片中任一帧的调整后的量化参数对所述任一帧进行转码,包括:对任一宏块,根据所述任一宏块的量化增量以及所述任一宏块所在帧的调整后的量化参数,得到任一宏块的调整后的量化参数;根据任一帧内每个宏块的调整后的量化参数,对任一帧内每个宏块进行转码,直到所述任一帧内所有宏块都完成转码。
[0014]为了解决上述技术问题,本身请还揭示了一种分片转码装置,包括:预转码模块,用于将一片源分割为若干子片,其中每个子片包括若干帧,对所述若干子片分别进行预转码,获得每个子片的全局统计信息,所述每个子片的全局统计信息至少包括所述片源内所有帧的帧级信息;码率分配模块,用于依照所述片源内所有帧的帧级信息估算每帧的复杂度,并且根据所述每帧的复杂度以及所预设的片源转码后的目标码率,调整每帧的帧级信息中的量化参数;转码模块,依照每个子片中任一帧的调整后的量化参数对所述任一帧进行相应转码,直到所有子片的转码完成,依子片分割的顺序将转码完成后的所有子片合并,拼接为所述片源。
[0015]进一步地,所述码率分配模块,用于根据任一帧的复杂度调整所述任一帧的量化增量;根据所述任一帧的调整后的量化增量以及所述任一帧的帧级信息为所述任一帧分配转码比特数,并且通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率;t匕较调整后的所述片源的转码码率与所预设的片源转码后的目标码率,如果两者相差大于预设阈值,则依照所述片源内所有帧之间的复杂度比值,再次调整每帧的帧级信息中的量化增量,根据每帧调整后的量化增量以及每帧的帧级信息为每帧分配转码比特数,并且通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率,再次检测调整后的所述片源的转码码率与所预设的片源转码后的目标码率,直到两者相差小于等于所述阈值,将最后一次调整得到的每帧的量化增量作为每帧的最终调整后的量化增量,将所述每帧的最终调整后的量化增量转换为每帧的最终调整后的量化参数。
[0016]与现有技术相比,本申请可以获得包括以下技术效果:
[0017]在对每一个子片进行码率分配时,都会综合考虑其他所有子片的情况,从全局的角度出发,考虑之前调整完的帧已经分配了多少转码比特数,而整个片源还剩下多少转码比特数,后面还没有调整的帧有多少是需要分配较大转码比特数的,而当前帧与后面的帧相比,从比例上是要多分配一些转码比特数还是少分配一些,这样综合全局考虑下,决定任一帧分配多少转码比特数合适,从而将有效的片源码率进行合理的分配,使得内容较为复杂,对码率需求高的子片都得到了相符码率分配,而内容简单的子片就不需要较大的码率,这样在每个子片转码完成后,子片拼接后,整个片源在播放过程中,质量、清晰度会较为均匀。
【专利附图】
【附图说明】
[0018]此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0019]图1是本申请实施例一的方法流程图;
[0020]图2是本申请实施例二的方法流程图;
[0021]图3是本申请实施例二的方法流程图;
[0022]图4是本申请实施例四的方法流程图;
[0023]图5是本申请实施例五的装置结构图。
【具体实施方式】
[0024]以下将配合附图及实施例来详细说明本申请的实施方式,藉此对本申请如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
[0025]如在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。此外,“耦接”或“电性连接” 一词在此包含任何直接及间接的电性耦接手段。因此,若文中描述一第一装置耦接于一第二装置,则代表所述第一装置可直接电性耦接于所述第二装置,或通过其它装置或耦接手段间接地电性耦接至所述第二装置。说明书后续描述为实施本申请的较佳实施方式,然所述描述乃以说明本申请的一般原则为目的,并非用以限定本申请的范围。本申请的保护范围当视所附权利要求所界定者为准。
[0026]还需要说明的是,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者系统不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者系统中还存在另外的相同要素。本申请实施例中所述“转码”亦可以称为“编码”。
[0027]实施例一
[0028]本申请实施例所揭示的一种分片转码方法,如图1所示,其包括以下步骤:
[0029]步骤S100,将一片源分割为若干子片。
[0030]可以根据片源的时长、以及一对一处理每个子片的单个CPU的能力或者分片转码装置的工作状况来确定分割子片的数量。一般来说,每个子片的时长接近,但都是以关键帧作为分割子片的开始。分割后的每个子片还包括若干帧,每个帧还包括若干宏块。同时,分割后,每个子片的转码码率都相等,等于片源的转码码率,这样做是为了后面方便测算量化参数,从而为每个子片重新分配转码码率。
[0031]较佳地,本实施例采用2.5分钟为一个子片的时长,例如总长25分钟一个片源就被分成了 10个子片。
[0032]步骤S102,对步骤SlOO中得到的若干子片分别进行预转码,获得每个子片的全局统计信息。
[0033]在现有方式中,预转码后可以获得每个子片的统计信息,每个子片的统计信息一般包括:每个子片的全局信息、每个子片内每帧的帧级信息和每帧内各宏块的宏块级信息。
[0034]每个子片的全局信息,包括:全局转码参数,例如整个片源的码率等;每帧的帧级信息,包括:巾贞类型、转码使用的量化参数(quantizat1nparameter, cip)、比特信息、巾贞间宏块数、巾贞内宏块数、参考巾贞及加权预测系数(weighting coefficients);各宏块的宏块级信息,包括:巾贞内每个宏块的量化增量(quantizat1nscale, qscale)。
[0035]统计信息是进行转码码率分配和转码的基础,如现有技术的方式仅使用每个子片的统计信息对当前子片转码,而不考虑全局,这样会造成每个子片仅根据自身的情况分配转码码率。看似分配合理,其实在整个片源上,每个子片对于转码码率的要求不可能完全一致,有些子片的图像数据量大,对于转码码率要求高,而有些子片的图像数据量小,对于转码码率要求很低,在整个片源的转码码率有限的情况下,并没有将转码码率分配到最有需求的子片上,在每个子片转码完成后,反而造成各个子片质量不均,进而使得内容较复杂的子片的质量在转码后范围会大幅下降。
[0036]而本申请中通过预转码获得的是每个子片的全局统计信息,所述每个子片的全局统计信息至少包括:所有子片的全局信息、片源内所有帧的帧级信息和片源内每帧内各宏块的宏块级信息。显然,与现有方式不同,本申请中每个子片的全局统计信息不仅有当前子片的统计信息,还具有片源内其他所有子片的统计信息。这样,在对每一个子片进行转码码率分配时,都会综合考虑其他所有子片的情况,从全局的角度,将有效的片源码率进行合理的分配,是内容较为复杂,对转码码率需求高的子片都得到了相符码率分配,这样在每个子片转码完成后,子片拼接后,整个片源在播放过程中,质量、清晰度会较为均匀。
[0037]对于如何在预转码时,获得每个子片的全局统计信息,参考实施例二及图2。
[0038]步骤S104,依照所述片源内所有帧的帧级信息估算每帧的复杂度,并且根据所述每帧的复杂度以及所预设的片源转码后的目标码率,调整每帧的帧级信息中的量化参数。
[0039]片源转码后的目标码率是希望整个片源在转码后所具有的转码码率,但是在经过步骤SlOO至S106的实际转码后整个片源在转码后很难精确地等于目标码率,但是会无限接近目标码率,处于围绕着目标码率的一个合理的阈值区间内。
[0040]所述每帧的复杂度,是指所述每帧的像素的渲染次数相对于整个片源的所有像素的渲染次数的比较值,用于衡量每帧所承载的内容的复杂程度,复杂程度高的帧显然需要占用的比特率也高。测量每帧的复杂度的方法属于现有技术的范畴,可以参见已公开的关于此处的专利文献,这些文献上公开的测量每帧的复杂度的方法均可以用于本申请的方案。
[0041]以下举出相应的例子对复杂度进行进一步的描述。例如,在某一帧所承载的视频数据呈现出来的画面中仅显示出一面墙,那这一帧的复杂度为I ;如果在某一帧所承载的视频数据呈现出来的画面中显示着墙的前面站有一个人,其画面的复杂程度较高,那这一帧的复杂度为2 ;如果在再有一帧所承载的视频数据呈现出来的画面中有一只小狗站在人和墙的中间,其画面的复杂程度在三者中最高,那这一帧的复杂度为3,以此类推。需要说明的是,上述复杂度的取值仅为描述方便使用,并不限定本申请的保护范围。当前帧的复杂度是指当前帧所呈现的画面需要渲染的次数,而片源的复杂度是集合了整个片源中所有画面的复杂度,即片源的复杂度是一个固定的数值。某一帧的复杂度与整个片源的复杂度的比值即得到所述帧的复杂度比值。
[0042]依照所述片源内所有帧的帧级信息估算每帧的复杂度,根据所述每帧的复杂度得到每帧的量化增量;根据每帧的量化增量计算出整个片源可能达到的转码码率,如果这个转码码率和所预设的片源转码后的目标码率相差较大,说明每帧的量化增量取得不合适,则调整每帧的量化增量,再计算出整个片源可能达到的转码码率,再次比对这个转码码率和所预设的片源转码后的目标码率,如果依然相差较大,则继续以迭代的方式调整每帧的量化增量,直到整个片源可能达到的转码码率和所预设的片源转码后的目标码率相接近,差值达到一个合理区间,将最后调整得到的每帧的量化增量转换为量化参数。
[0043]步骤S106,依照每个子片中任一帧的调整后的量化参数对所述每个子片中任一帧进行相应转码,直到所有子片的转码完成,依所述片源分割时获得的子片的顺序将转码完成后的所有子片合并,拼接为转码后的所述片源。
[0044]对每个子片转码之前的结果为:假设A为所述片源的原始码率,分割后得到的N个子片码率分别为Al、A2…An,η = [I, N],Al就是分割后得到的第I子片的实际码率,A2就是分割后得到的第2子片的实际码率...,此时Al = A2…=An,显然也具有如下的关系(A1+A2+…An)/N = A。
[0045]对每个子片转码之后的结果即为:假设B为所预设的片源转码后的目标码率,N个子片码率分别为Β1、Β2...Βη,η = [I, N],BI就是根据B给第I子片设定的预转码码率,B2就是根据B给第2子片设定的预转码码率...则?1+82+吣&1)/^ = B,而B1、B2…Bn之间根据各自的实际需要配置,因此B1、B2…Bn之间的数值关系上可能各不相同。
[0046]实施例二
[0047]在步骤S102中,进行预转码的过程,获得的是每个子片的全局统计信息,包括整个片源的所有子片的统计信息,当然,对于不同的帧,全局统计信息内所有子片的统计信息的排列顺序有区别。在对每一个子片进行码率分配时,都会综合考虑其他所有子片的情况,从全局的角度,将有效的片源码率进行合理的分配。
[0048]如图2所示,步骤S102进一步包括:
[0049]步骤S1020,对所述若干子片分别进行预转码,获得每个子片的统计信息。
[0050]对所有子片分别进行预转码,其中每个子片分别由各自的对应的转码器或者CPU进行预转码,子片之间在预转码时是相互独立进行的。
[0051]例如,将片源分为100个子片,按分割的顺序,子片的序号分别为O至100。预转码后分别得到子片O的统计信息,子片I的统计信息,子片2的统计信息…子片100的统计信肩、O
[0052]步骤S1022,对任一子片,将所述任一子片的统计信息排在第一位,依所述片源分割时获得的子片的顺序将其他子片的统计信息排在所述任一子片的统计信息之后,将所有子片的统计信息进行合并从而得到所述每个子片的全局统计信息。
[0053]例如,预转码后分别得到子片O的统计信息,子片I的统计信息,子片2的统计信息…子片100的统计信息。对于子片0,将子片O的统计信息排在第一位,之后是子片I的统计信息,子片2的统计信息…最后是子片100的统计信息,然后将这些子片合并起来,这样就得到了一个完整的包括所有子片的统计信息并以子片O的统计信息开头的有序的统计信息串。这个统计信息串就是子片O的全局统计信息。
[0054]具体来说,合并时,前一个子片的结束帧的帧级信息,连接后一个子片的起始帧的帧级信息。所述每个子片的统计信息,至少包括:所述子片内依序排列的各帧的帧级信息。接续上面的示例,将子片O内的结束帧的帧级信息与子片I内的起始帧的帧级信息连接,子片I内的结束帧的帧级信息与子片2内的起始帧的帧级信息连接,以此类推,直至将子片99内的结束帧的帧级信息与子片100内的起始帧的帧级信息连接。
[0055]还有一种情况,例如,预转码后分别得到子片O的统计信息,子片I的统计信息,子片2的统计信息…子片100的统计信息。对于子片2,将子片2的统计信息排在第一位,之后是子片3的统计信息,子片4的统计信息…最后是子片100的统计信息,子片O的统计信息,子片I的统计信息。然后将这些子片合并起来,这样就得到了一个完整的包括所有子片的统计信息并以子片2的统计信息开头的有序的统计信息串。这个统计信息串就是子片2的全局统计信息。
[0056]具体来说,当排在第一位的所述任一子片不是依子片分割的顺序排在首位的子片时,依子片分割的顺序排在首位的子片的起始帧的帧级信息,连接排在末尾的子片的结束帧的帧级信息。例如,将子片2内的结束帧的帧级信息与子片3内的起始帧的帧级信息连接,子片3内的结束帧的帧级信息与子片4内的起始帧的帧级信息连接,以此类推,直至将子片99内的结束帧的帧级信息与子片100内的起始帧的帧级信息连接,然后将子片100内的结束帧的帧级信息与子片O内的起始帧的帧级信息连接,最后将子片O内的结束帧的帧级信息与子片I内的起始帧的帧级信息连接,这样就得到了以子片2的统计信息开头的有序的统计信息串。这个统计信息串就是子片2的全局统计信息,子片2的全局统计信息中包括以子片2内的帧的帧级信息开头的片源所有帧的帧级信息。
[0057]只有知道后续的转码情况(复杂度),才能为当前子片建立合理的转码码率。显然,全局统计信息可以统筹全局的码率控制,同时还可以指导当前帧的码率控制。
[0058]实施例三
[0059]在步骤S104中,初始设置每帧的量化参数,这个初始设置是没有考虑片源其他帧的全局情况的。所以初始设置的量化参数可以完成转码,但是转码的效果以及转码后整个片源的码率很可能会不合适,还需要进一步迭代调整,但是每帧初始设置的量化参数为后续调整提供了很好的调整基础。后面可以根据片源所有帧的全局情况,为每一个帧配置合理的量化参数,然后模拟转码得到片源码率,通过整个片源的转码码率与设定的片源目标码率比较来考量每帧的量化参数的设置是否合理,不合理则继续迭代调整每帧的量化参数。
[0060]如图3所示,步骤S104进一步包括:
[0061]步骤S1040,依照所述片源内所有帧的帧级信息估算每帧的复杂度。
[0062]步骤S1042,根据任一帧的复杂度调整所述任一帧的量化增量。
[0063]根据任一帧的复杂度为所述任一帧初始设置量化增量,例如可以根据这个公式(1.1)进行量化增量的初始赋值:
[0064]qscale = complexity'。.6 ; 公式(1.1)
[0065]其中,complexity为任一巾贞的复杂度,qscale为所述任一巾贞的量化增量。通过这种方式就可以初始设置每帧的量化增量,之后的计算使用这个初始设置的每帧的量化增量,并不使用预转码时得到的每帧的帧级信息中的量化参数。需要说明,上述公式只是为了较佳地描述本实施例,其并不对本申请的保护范围作出限定,其他初始赋值方式也可以实现本申请。
[0066]步骤S1044,根据任一帧的调整后的量化增量以及所述任一帧的帧级信息为所述任一帧分配转码比特数。
[0067]所述任一帧的帧级信息中包括所述任一帧的比特信息,这个比特信息包括:所述任一帧的残差转码比特数、运动矢量的转码比特数以及头信息转码比特数,根据所述任一帧的残差转码比特数、运动矢量的转码比特数以及头信息转码比特数,结合所述任一帧的调整后的量化增量,计算出为所述任一帧所分配的转码比特数,例如可以根据这个公式(1.2)进行为所述任一帧分配转码比特数的计算:
[0068]expected_bits = text_bits X qscale1.1+mv—bits X qscale。.5+misc_bits 公式(1.2)
[0069]其中,qscale为所述任一帧的调整后的量化增量,text_bits为所述任一帧的残差转码比特数,mv_bits为所述任一巾贞的运动矢量的转码比特数,misc_bits为所述任一中贞的头信息转码比特数,expectecLbits是为每帧所分配的转码比特数。需要说明,上述公式只是为了较佳地描述本实施例,其并不对本申请的保护范围作出限定,其他初始赋值方式也可以实现本申请。
[0070]这里还可以根据所述任一帧的量化增量以及所述任一帧所承载数据的绝对误差和,计算所述任一帧的信号率失真度,根据所述任一帧的信号率失真度估算用于描述所述任一帧所承载数据的最小转码比特数,本步骤中为所述任一帧所分配的转码比特数不小于所述最小转码比特数。同时当所述任一帧所分配的转码比特数小于最小转码比特数,也可以获知应该调大所述任一帧所分配的转码比特数,相应知道调整所述任一帧的量化增量的策略和方向。
[0071]步骤S1046,通过每帧所分配的转码比特数估算出调整后的所述片源的转码码率。
[0072]对于任一子片,根据所述任一子片内每帧所分配的转码比特数,计算所述任一子片的转码码率;例如,用所述任一子片内每帧所分配的转码比特数作累加得到所述任一子片的总转码比特数,然后用所述任一子片的总转码比特数除以乘以所述任一子片的时长,从而得到所述任一子片的转码码率,进而得到所有子片的转码码率。
[0073]对所有子片的转码码率进行叠加后再求平均数,计算出调整后的所述片源的转码码率。例如,片源总共有100个子片,将100个子片的转码码率叠加然后除以100,就得到了调整后的所述片源的转码码率。
[0074]步骤S1048,比较调整后的所述片源的转码码率与所预设的片源转码后的目标码率,如果两者相差大于一阈值,则执行步骤S1050,如果两者相差小于等于所述阈值,则执行步骤S1052。
[0075]步骤S1050,依照所述片源内所有帧之间的复杂度比值,再次调整每帧的帧级信息中的量化增量,返回执行步骤S1044 ;
[0076]在步骤S1042中只是根据任一帧的复杂度直接为所述任一帧的量化增量初始赋值,这个赋值的过程如前步骤S1042所述,没有考虑全局,只是独立的考虑每一帧的情况,这种赋值显然是需要调整的,因为不能合理地反映出各帧对于量化增量和转码比特数分配的需求。
[0077]而在步骤S1050中则依照所述片源内所有帧之间的复杂度比值,可以合理地推测出每一帧应该在整个片源内处于一个什么地位,从而估算出自己的转码比特数的合理需求。例如,对于任一帧,根据所述任一帧之前已经统计过的帧的复杂度比值,所述任一帧之后未统计过的帧的复杂度比值,重新调整所述任一帧的量化增量。
[0078]在步骤S1050内调整每帧的帧级信息中的量化增量时,不使用步骤S1042的操作中所使用的公式(1.1)。因为每帧的应该分配的转码比特数和每帧的复杂度是成正比的,如果任一帧的复杂度高,而且它与片源其他帧的复杂度比值也高,说明所述任一帧应该分配的转码比特数较大,而且这个转码比特数占整个片源的总转码比特数的比重也大,相反道理是相似的,这样根据复杂度的比值就可以知道每一帧的转码比特数的分配的比例和调整趋势,如果为某一帧分配的转码比特数少了,则可以适当调高,这样就要相应调整量化增量。量化增量具有多个数值级别,这样在调整量化增量时,就相应的调高一个数值级别,每调高一个级别,就返回步骤S1044。通过类似的方式的操作,多次反复调整每帧的量化增量。
[0079]在调整每帧的量化增量的具体实现方式上,可以实现根据经验设定量化增量的级别表,例如设定若干个级别,每个级别对应一个具体的量化增量数值,根据步骤S1042设置的初始量化参数选择对应的级别,根据当前帧的复杂度的比值获知当前帧的转码比特数的调整趋势,根据当前帧的转码比特数的调整趋势相应调高或调低一个量化增量的级别,然后根据步骤S1044到步骤S1050去迭代。当然,本申请对于每帧的量化增量的调整方法的具体实现上,并不限于此。
[0080]步骤S1052,将最后一次调整得到的每帧的量化增量作为每帧的最终调整后的量化增量,将所述每帧的最终调整后的量化增量转换为每帧的最终调整后的量化参数。
[0081]本步骤中得到了最终调整适合的量化增量,这个每帧最终调整后的量化增量。显然,从步骤S1040到步骤S1052,是通过不断演算,模拟转码最终得到的片源码率,来测算每帧的量化增量是否合理,量化增量的取值会最终影响到整个片源的转码码率。
[0082]在实际转码中需要使用到的是量化参数,所以还要将所述每帧的调整后的量化增量转换为量化参数,每帧的量化参数和为每帧所分配的转码比特数成反比,例如可以根据这个公式(1.3)计算出每帧的量化参数:
[0083]QP = 12.0f+6.0f*log2f (qscale/0.85f) 公式(1.3)
[0084]f为float浮点计算,qscale任一巾贞的调整后的量化增量,QP为相应的转化后的任一帧的量化参数,这个转化后的任一帧的量化参数就是步骤S106中进行正式转码时使用的每帧的量化参数。需要说明,上述公式只是为了较佳地描述本实施例,其并不对本申请的保护范围作出限定,其他初始赋值方式也可以实现本申请。
[0085]实施例四
[0086]在步骤SlOO?S104,基本上完成了所有转码前的准备工作,并通过模拟估算得到了最合理的每个子片及每个子片内每帧的转码比特数的分配,这个分配是通过每帧的量化参数来实现的。在S106中将根据最终得到的调整后的每帧的量化参数进行真正的转码。
[0087]步骤S102中得到了每个子片的全局统计信息,如前所述,每个子片的全局统计信息至少还包括所述片源内每个帧所含有的每个宏块的量化增量。如图4所示,步骤S106进一步包括:
[0088]步骤S1060,对任一宏块,根据所述任一宏块的量化增量以及所述任一宏块所在帧的调整后的量化参数,得到任一宏块的调整后的量化参数。
[0089]宏块是视频文件的最小单位,片源的每一帧都包括复数个宏块。每个宏块也有自己的量化参数,这个量化参数也决定了宏块分配的转码比特数,但是宏块的量化参数不需要如每帧那样,反复迭代来调整。
[0090]通过步骤S104得到了最终确定的每帧的量化参数,这个量化参数其实是每帧的平均量化参数,是每帧内各宏块的量化参数的平均数。而在步骤S102中预转码时从每个子片的全局统计信息中已经获得了每个宏块的量化增量。因此根据任一帧的平均量化参数以及帧内每个宏块的量化增量,就可以得到每个宏块的量化参数,例如,对于帧内每个宏块,在平均量化参数的基础上增加或减少相应的量化增量,当然,本申请并不限于此。
[0091]步骤S1062,根据任一帧内每个宏块的调整后的量化参数,对任一帧内每个宏块进行转码,直到所述任一帧内所有宏块都完成转码,就完成了对任一帧的转码。
[0092]实施例五
[0093]本申请实施例还揭示的一种分片转码装置,如图5所示,包括:依次相连的预转码模块500、码率分配模块502和转码模块504。
[0094]预转码模块500,用于将一片源分割为若干子片,其中每个子片包括若干帧,对所述若干子片分别进行预转码,获得每个子片的全局统计信息,所述每个子片的全局统计信息至少包括所述片源内所有帧的帧级信息;
[0095]码率分配模块502,用于依照所述片源内所有帧的帧级信息估算每帧的复杂度,并且根据所述每帧的复杂度以及所预设的片源转码后的目标码率,调整每帧的帧级信息中的量化参数;
[0096]转码模块504,依照每个子片中任一帧的调整后的量化参数对所述任一帧进行相应转码,直到所有子片的转码完成,依子片分割的顺序将转码完成后的所有子片合并,拼接为所述片源。
[0097]所述码率分配模块502,进一步包括:量化增量调整单元、转码码率计算单元、比较单元、以及量化参数计算单元。
[0098]所述量化增量调整单元,进一步用于根据任一帧的复杂度调整所述任一帧的量化增量。
[0099]所述转码码率计算单元,用于根据所述任一帧的调整后的量化增量以及所述任一帧的帧级信息为所述任一帧分配转码比特数,并且通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率。
[0100]所述比较单元,用于比较调整后的所述片源的转码码率与所预设的片源转码后的目标码率,如果两者相差大于预设阈值,则依照所述片源内所有帧之间的复杂度比值,再次调整每帧的帧级信息中的量化增量,重复调用量化增量调整单元、转码码率计算单元、以及比较单元;如果两者相差小于或等于预设阈值,则调用量化参数计算单元。通过重复调用量化增量调整单元、转码码率计算单元,根据每帧调整后的量化增量以及每帧的帧级信息为每帧分配转码比特数,并且通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率;然后再调用比较单元,再次比较调整后的所述片源的转码码率与所预设的片源转码后的目标码率,直到两者相差小于等于所述阈值,然后调用所述量化参数计算单元。
[0101]所述量化参数计算单元,用于将最后一次调整得到的每帧的量化增量作为每帧的最终调整后的量化增量,将所述每帧的最终调整后的量化增量转换为每帧的最终调整后的量化参数。
[0102]根据所述任一帧的调整后的量化增量以及所述任一帧的帧级信息为所述任一帧分配转码比特数,进一步包括:根据所述任一帧的帧级信息中的残差转码比特数、运动矢量的转码比特数以及头信息转码比特数,结合所述任一帧的量化增量,计算出为所述任一帧所分配的转码比特数。
[0103]其中,通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率,进一步包括:对于任一子片,根据所述任一子片内每帧所分配的转码比特数,计算所述任一子片的转码码率;对所有子片的转码码率进行叠加后再求平均数,计算出调整后的所述片源的转码码率。
[0104]对所述若干子片分别进行预转码,获得每个子片的全局统计信息,所述每个子片的全局统计信息至少包括所述片源内所有帧的帧级信息,进一步包括:对所述若干子片分别进行预转码,获得每个子片的统计信息;对任一子片,将所述任一子片的统计信息排在第一位,依所述片源分割时获得的子片的顺序将其他子片的统计信息排在所述任一子片的统计信息之后,将所有子片的统计信息进行合并从而得到所述每个子片的全局统计信息。
[0105]所述每个子片的统计信息,至少包括:所述子片内依序排列的各帧的帧级信息;所述每个子片的全局统计信息中,前一个子片的结束帧的帧级信息,连接后一个子片的起始帧的帧级信息,且当排在第一位的所述任一子片不是依子片分割的顺序排在首位的子片时,依子片分割的顺序排在首位的子片的起始帧的帧级信息,连接排在末尾的子片的结束帧的帧级信息。
[0106]预转码所获得的所述每个子片的全局统计信息,至少还包括所述片源内每个帧所含有的每个宏块的量化增量;依照每个子片中任一帧的调整后的量化参数对所述任一帧进行转码,进一步包括:对任一宏块,根据所述任一宏块的量化增量以及所述任一宏块所在帧的调整后的量化参数,得到任一宏块的调整后的量化参数;根据任一帧内每个宏块的调整后的量化参数,对任一帧内每个宏块进行转码,直到所述任一帧内所有宏块都完成转码。本装置的技术方案和各模块的功能特征、连接方式,与前述实施例一至四中所描述的特征和技术方案相对应,不足之处请参见前述实施例一至四。
[0107]本串请的应用场景和应用实例
[0108]为了更好地理解本申请的核心思路,再此列举主要的应用场景,当时本申请的保护范围并不限于此。
[0109]假设一个视频片源有15分钟,平均码率是100kbps,而这个视频片源中的画面并不全部是有效数据,例如其中有一大部分是黑屏,因为黑屏占用转码比特数,使得黑屏之后的有效数据没有足够的转码比特数,而导致相比黑屏之前的有效数据,画面质量出现下降。这时可以考虑通过转码进行转码比特数发重新分配,因为黑屏部分分配较高的转码码率显然没有意义,如果把这部分转码码率对应的转码比特数分配到有效数据上,会使整个视频的质量大大提升,使得整个片源的效果会更加均匀。这时所预设的片源转码后的目标码率仍然为100kbps。
[0110]首先进行分割——可以通过合理的切分,将视频片源分成三个子片,每个子片5分钟,其中子片I和子片3分别是有效视频数据,而子片2中是一段黑屏。每个子片的平均码率都是100kbps,所预设的片源转码后的目标码率也是100kbps。
[0111]之后进行预转码一得到了每个子片的平均码率、子片内各帧的转码比特数等等统计信息,针对子片1,将三个子片的统计信息合并,子片I的统计信息在前,子片2的统计信息在后,子片3的统计信息在最后,得到子片I的全局统计信息;针对子片2,将三个子片的统计信息合并,子片2的统计信息在前,子片3的统计信息在后,子片I的统计信息在最后,得到子片2的全局统计信息;针对子片3,将三个子片的统计信息合并,子片3的统计信息在前,子片I的统计信息在后,子片2的统计信息在最后,得到子片3的全局统计信息。
[0112]然后调整码率一现在希望在片源总码率10kbps的前提下,将子片1、2、3转成适合的转码码率,都还是5分钟长,按照预转码时子片I的全局统计信息为子片I中的每帧分配转码比特数,把10kbps下的总转码比特数分配好,分配的过程会统筹子片1、2和3的情况,对每个子片下的帧的量化增量不断的迭代调整,调整当前子片内的一帧时要考虑真一帧前面已经调整完的帧以及后面还有调整的帧的情况,实质上是通过量化增量来算之前调整完的帧已经分配了多少转码比特数,而整个片源还剩下多少转码比特数,后面还没有调整的帧有多少是需要分配较大转码比特数的,而当前帧与后面的帧相比,从比例上是要多分配一些转码比特数还是少分配一些,这样综合全局考虑下,决定当前帧分配多少转码比特数合适。这个调整和衡量的关键因素就是各帧的复杂度比值和每帧的量化增量。最终得到合适的各子片下每帧的量化增量,使得子片1、2和3都得到了适合的转码码率。将各子片下每帧的量化增量转换为每帧的量化参数。
[0113]转码一根据分配后的各帧的转码比特数转码,也就是每帧的量化参数,对子片
1、2和3进行转码,然后将转码后的子片1、2和3合并,就可以得到能够达到10kbps的影片片源。影片片源的最终转码码率不一定正好是目标码率100kbps,可能会有些许差别,例如,子片I和子片3分别为150Kbps,子片2为10Kbps,而子片1、子片2和子片3的转码码率的平均数为103kbps左右,非常贴近100kbps。而经过重新分配转码比特数,子片2这段黑屏画面就几乎没有消耗到转码比特数,而将几乎绝大部分转码比特数都分配到子片I和子片3上了。
[0114]当然,在其他场景下,比如10分钟的影片片源,这个影片片源的平均码率是100kbps,希望通过转码将其码率转成500kbps,总转码比特数放大了 5倍,必然涉及到总转码比特数的分配的问题,也可以通过上述方式进行比特率的重新分配。
[0115]另外,如果影片片源中也存在如上述的黑屏这种不需要占用较多转码比特数的无效数据,则也可以在结合上面的方式削减黑屏数据的转码比特数消耗。
[0116]需要说明的是,上述具体数值仅是为了更好地描述方案,并不对本申请的保护范围作出限制。
[0117]上述说明示出并描述了本申请的实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。
【权利要求】
1.一种分片转码方法,其特征在于,包括: 将一片源分割为若干子片,其中每个子片包括若干帧; 对所述若干子片分别进行预转码,获得每个子片的全局统计信息,所述每个子片的全局统计信息至少包括所述片源内所有帧的帧级信息; 依照所述片源内所有帧的帧级信息估算每帧的复杂度,并且根据所述每帧的复杂度以及所预设的片源转码后的目标码率,调整每帧的帧级信息中的量化参数; 依照每个子片中任一帧的调整后的量化参数对所述每个子片中任一帧进行转码,直到所有子片转码完成,依所述片源分割时获得的子片的顺序将转码完成后的所有子片合并,拼接为转码后的所述片源。
2.如权利要求1所述的分片转码方法,其特征在于,根据所述每帧的复杂度以及所预设的片源转码后的目标码率,调整每帧的帧级信息中的量化参数,进一步包括: 步骤a:根据任一帧的复杂度调整所述任一帧的量化增量; 步骤b:根据所述任一帧的调整后的量化增量以及所述任一帧的帧级信息为所述任一帧分配转码比特数,并且通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率; 步骤c:比较调整后的所述片源的转码码率与所预设的片源转码后的目标码率,如果两者相差大于预设阈值,则依照所述片源内所有帧之间的复杂度比值,再次调整每帧的帧级信息中的量化增量,重复执行步骤b至c ;如果两者相差小于或等于预设阈值,执行步骤d ; 步骤d:将最后一次执行的步骤b中所述任一帧的调整后的量化增量转换为每帧的最终调整后的量化参数。
3.如权利要求2所述的分片转码方法,其特征在于,根据所述任一帧的调整后的量化增量以及所述任一帧的帧级信息为所述任一帧分配转码比特数,进一步包括: 根据所述任一帧的帧级信息中的残差转码比特数、运动矢量的转码比特数以及头信息转码比特数,结合所述任一帧的量化增量,计算出为所述任一帧所分配的转码比特数。
4.如权利要求2所述的分片转码的方法,其特征在于,通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率,进一步包括: 对于任一子片,根据所述任一子片内每帧所分配的转码比特数,计算所述任一子片的转码码率; 对所有子片的转码码率进行叠加后再求平均数,计算出调整后的所述片源的转码码率。
5.如权利要求1所述的分片转码的方法,其特征在于,对所述若干子片分别进行预转码,获得每个子片的全局统计信息,所述每个子片的全局统计信息至少包括所述片源内所有帧的帧级信息,进一步包括: 对所述若干子片分别进行预转码,获得每个子片的统计信息; 对任一子片,将所述任一子片的统计信息排在第一位,依所述片源分割时获得的子片的顺序将其他子片的统计信息排在所述任一子片的统计信息之后,将所有子片的统计信息进行合并从而得到所述每个子片的全局统计信息。
6.如权利要求5所述的分片转码的方法,其特征在于, 所述每个子片的统计信息,至少包括:所述子片内依序排列的各帧的帧级信息; 所述每个子片的全局统计信息中,前一个子片的结束帧的帧级信息,连接后一个子片的起始帧的帧级信息,且当排在第一位的所述任一子片不是依子片分割的顺序排在首位的子片时,依子片分割的顺序排在首位的子片的起始帧的帧级信息,连接排在末尾的子片的结束帧的帧级信息。
7.如权利要求1所述的分片转码的方法,其特征在于, 所述每帧的复杂度,是所述每帧的像素的渲染次数相对于整个片源的所有像素的渲染次数的比较值。
8.如权利要求1所述的分片转码的方法,其特征在于, 预转码所获得的所述每个子片的全局统计信息,至少还包括所述片源内每个帧所含有的每个宏块的量化增量; 依照每个子片中任一帧的调整后的量化参数对所述任一帧进行转码,进一步包括: 对任一宏块,根据所述任一宏块的量化增量以及所述任一宏块所在帧的调整后的量化参数,得到任一宏块的调整后的量化参数; 根据任一帧内每个宏块的调整后的量化参数,对任一帧内每个宏块进行转码,直到所述任一巾贞内所有宏块都完成转码。
9.一种分片转码装置,其特征在于,包括: 预转码模块,用于将一片源分割为若干子片,其中每个子片包括若干帧,对所述若干子片分别进行预转码,获得每个子片的全局统计信息,所述每个子片的全局统计信息至少包括所述片源内所有帧的帧级信息; 码率分配模块,用于依照所述片源内所有帧的帧级信息估算每帧的复杂度,并且根据所述每帧的复杂度以及所预设的片源转码后的目标码率,调整每帧的帧级信息中的量化参数; 转码模块,依照每个子片中任一帧的调整后的量化参数对所述任一帧进行相应转码,直到所有子片的转码完成,依子片分割的顺序将转码完成后的所有子片合并,拼接为所述片源。
10.如权利要求9所述的分片转码装置,其特征在于, 所述码率分配模块,进一步用于根据任一帧的复杂度调整所述任一帧的量化增量;根据所述任一帧的调整后的量化增量以及所述任一帧的帧级信息为所述任一帧分配转码比特数,并且通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率;比较调整后的所述片源的转码码率与所预设的片源转码后的目标码率,如果两者相差大于预设阈值,则依照所述片源内所有帧之间的复杂度比值,再次调整每帧的帧级信息中的量化增量,根据每帧调整后的量化增量以及每帧的帧级信息为每帧分配转码比特数,并且通过每帧所分配的转码比特数计算出调整后的所述片源的转码码率,再次检测调整后的所述片源的转码码率与所预设的片源转码后的目标码率,直到两者相差小于等于所述阈值,将最后一次调整得到的每帧的量化增量作为每帧的最终调整后的量化增量,将所述每帧的最终调整后的量化增量转换为每帧的最终调整后的量化参数。
【文档编号】H04N21/845GK104202660SQ201410469989
【公开日】2014年12月10日 申请日期:2014年9月15日 优先权日:2014年9月15日
【发明者】白茂生, 魏伟, 边智 申请人:乐视网信息技术(北京)股份有限公司