一种可变长度的全景声信号编解码方法与流程

文档序号:15463898发布日期:2018-09-18 18:50阅读:309来源:国知局

本发明涉及一种全景声信号编解码处理技术领域,具体涉及一种可变长度的全景声信号的编解码方法。



背景技术:

经过多年发展,立体声、5.1、7.1环绕声等系统已经获得了广泛的应用,这些系统因缺乏声音的高度信息,最多只能呈现二维的声音。在真实的世界中,全景声(也称三维声)是声音最真实的呈现和表达方式,无论自然界、艺术领域或视听娱乐领域,全景声都是未来的发展趋势。

在现有的系统中,全景声可以是多声道信号(如9.1、11.1、13.1和22.2等),可以是多个声音对象,也可以是两者的组合。在全景声系统中,多声道信号可以是环绕声信号,如5.1、7.1等,也可以是多层多声道信号(即多层声道信号分布在不同高度平面)。例如,有些全景声系统采用中间层及顶层的两层平面,有些全景声系统采用三层系统等。有些全景声系统只有多层多声道信号,但没有声音对象,例如SMPTE的22.2三维声系统和AURO 9.1系统等。有些全景声系统则既有多层多声道信号,也有声音对象,例如MPEG-H、Dolby Atmos和DTS:X系统。当然,作为一个极端的例子,全景声也可以全部是声音对象信号。

一部全景声电影在制作、混录时普遍采用数字音频工作站(Digital Audio Workstation,DAW),比如Pro Tools、Nuendo、Cubase、Logic Pro、Adobe Audition等。混录师可以将多声道音频和多个声音对象放入电影制作工程中,以达到全景声的听觉效果。电影在制作完毕后,需要对整部电影的音频数据进行符合全景声格式的音频编码,并将编码后的数据和视频一起封装成DCP包,拷贝至影院服务器,再通过全景声音频解码器播放出来,呈现给观众。

目前,这种全景声音频编解码技术可以将整部电影完整、正确地编解码,在放映端效果甚好。但有时,当整部电影完成编码后,导演组会临时调整一些画面或场景,那么相应的音频数据也会发生变化,所以要对所有被修改的数据重新进行编码,同时不能影响已经编好的其他数据。

按照现有的技术,音频编码的帧长是固定的,所以一旦音频数据重新组织后,必然会影响后面所有音频数据的组织方式。那么从修改的部分开始,直到电影结束,都需要重新编码,很浪费时间;而我们希望,仅重编修改过的部分。



技术实现要素:

发明目的:本发明目的在于针对现有技术的不足,提供一种可变长度的全景声音频编解码方法,该方法在保证全景声电影能够完整、正确编解码的情况下,同时能够在电影工程中对任意片段进行添加、删除、替换等操作的前提下,依旧可以完整、正确地进行编解码,而且不会影响已经编好的数据,从而在很大程度上对全景声音频编码技术进行了完善。

技术方案:本发明所述可变长度的全景声信号编码方法,包括如下步骤:

(1)计算所需编码全景声信号的音频样点数;

(2)将音频样点数按采样点数划分为整帧,不满整帧部分的划分为短帧;

(3)将整帧部分按标准方式编码,输出对应样点数的码流;将短帧部分按短帧方式编码,输出短帧对应样点数的码流,将短帧的长度信息乘以位深和AES通道数后写在码流中的frame_length字段。

上述编码方法输出码流的解码方法,包括如下步骤:

(1)每次读取一个音频帧对应采样点数的码流数据;

(2)若码流数据对应的音频帧为整帧,按标准方式解码;若码流数据对应的音频帧包含有短帧,根据码流中长度信息frame_length字段按如下规则进行解码:

一个音频帧对应j个采样点数,当读取第m个音频帧时,在j个样点之内的第n个样点位置,遇到了长度为k的音频帧,k≤1024,判断

(21)若n+k=1024,则输出第m帧音频数据;同时,若n>0,则在此之前先输出第m-1帧音频数据;

(22)若n+k>1024,此时输出第m-1帧,等待下次读取数据时解码第m帧;

(23)若n+k<1024,解码第m帧,并继续读取第m+1帧,令n=n+k,k=下一帧码流长度,然后重复步骤(21)、(22),直到n+k≥1024时,根据步骤(21)、(22)输出音频数据。

采用上述编解码方法能够在电影工程中对任意片段进行添加、删除、替换等操作的前提下,依旧可以完整、正确地进行编解码,而且不会影响已经编好的数据,具体如下:

插入操作的编码方法:(1)计算插入点处一个视频帧对应的音频样点数;

(2)计算步骤(1)视频帧对应的音频帧数,并将计算所得音频帧数之后的数据另存为文件Data0;

(3)计算待插入视频帧的音频样点数;

(4)计算所有需要重新组织的音频样点数;如果采用了前后帧在时域上有交叠的编码方法(如ac3、aac、avs2),则插入起点的前一个音频帧也一同重新组织;

(5)将步骤(4)计算所得音频样点数按采样点数划分为整帧,不满整帧部分的划分为短帧;

(6)将整帧部分按标准方式编码,输出对应样点数的码流;将短帧部分按短帧方式编码,输出短帧对应样点数的码流,将短帧的长度信息乘以位深和AES通道数后写在码流中的frame_length字段;

(7)将文件Data0拼接到步骤(6)输出的码流后面。

插入操作的解码方法:(1)每次读取一个音频帧对应j个采样点数的码流数据;

(2)若码流数据对应的音频帧为整帧,按标准方式解码;若读取的第m个音频帧包含有短帧,根据码流中长度信息frame_length字段,读取短帧长度k个数据并解码短帧;

(3)读取第m+1帧数据,将第m帧中(j-k)个数据、第m+1帧中k个数据合并后按标准方式解码;

(4)重复步骤(3),继续读取下一帧数据直至所有数据解码完毕。

删除操作的编码方法:(1)计算删除开始点处一个视频帧对应的音频样点数;

(2)计算步骤(1)视频帧对应的音频帧数;

(3)计算删除终点对应的样点数;

(4)计算删除终点对应的音频帧数,并将计算所得音频帧数之后的数据另存为文件Data0;

(5)计算所有需要重新组织的音频样点数;如果采用了前后帧在时域上有交叠的编码方法(如ac3、aac、avs2),则删除起点的前一个音频帧也一同重新组织;

(6)将步骤(5)计算所得音频样点数按采样点数划分为整帧,不满整帧部分的划分为短帧;

(7)将整帧部分按标准方式编码,输出对应样点数的码流;将短帧部分按短帧方式编码,输出短帧对应样点数的码流,将短帧的长度信息乘以位深和AES通道数后写在码流中的frame_length字段;

(8)将文件Data0拼接到步骤(7)输出的码流后面。

删除操作的解码方法:(1)每次读取一个音频帧对应j个采样点数的码流数据;

(2)若码流数据对应的音频帧为整帧,按标准方式解码;若读取的第m个音频帧包含有短帧,根据码流中长度信息frame_length字段,读取短帧长度k个数据并解码短帧;

(3)读取第m+1帧数据,将第m帧中(j-k)个数据、第m+1帧中k个数据合并后按标准方式解码;

(4)重复步骤(3),继续读取下一帧数据直至所有数据解码完毕。

替换操作的编码方法:(1)计算替换开始处一个视频帧对应的音频样点数;

(2)计算步骤(1)视频帧对应的音频帧数;

(3)计算替换终点处视频帧对应的音频样点数;

(4)计算替换终点处视频帧对应的音频帧数,并将计算所得音频帧数之后的数据另存为文件Data0;

(5)计算所有需要重新组织的音频样点数;如果采用了前后帧在时域上有交叠的编码方法(如ac3、aac、avs2),则替换起点的前一个音频帧也一同重新组织;

(6)将步骤(5)计算所得音频样点数按采样点数划分为整帧,不满整帧部分的划分为短帧;

(7)将整帧部分按标准方式编码,输出对应样点数的码流;将短帧部分按短帧方式编码,输出短帧对应样点数的码流,将短帧的长度信息乘以位深和AES通道数后写在码流中的frame_length字段;

(8)将文件Data0拼接到步骤(7)输出的码流后面。

替换操作的解码方法:(1)每次读取一个音频帧对应j个采样点数的码流数据;

(2)若码流数据对应的音频帧为整帧,按标准方式解码;若读取的第m个音频帧包含有短帧,根据码流中长度信息frame_length字段,读取短帧长度k个数据并解码短帧;

(3)读取第m+1帧数据,将第m帧中(j-k)个数据、第m+1帧中k个数据合并后按标准方式解码;

(4)重复步骤(3),继续读取下一帧数据直至所有数据解码完毕。

有益效果:本发明提供的编解码方法在保证全景声电影能够完整、正确编解码的情况下,同时能够在电影工程中对任意片段进行添加、删除、替换等操作的前提下,依旧可以完整、正确地进行编解码,而且不会影响已经编好的数据,从而在很大程度上对全景声音频编码技术进行了完善。

附图说明

图1为待编码的音频数据;

图2为现有技术的编码方式;

图3为本发明的编码方式;

图4为本发明的解码方式;

图5为实施例2的编解码方式;

图6为实施例3的编解码方式;

图7为实施例4的编解码方式。

具体实施方式

下面通过附图对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。

实施例1:将图1所示音频数据进行编码时编码时,若某一帧的长度是k个样点(k<1024,称为短帧),现有技术是统一输出1024个样点,编码时会多编(1024-k)个样点,其frame_length字段如图2所示。如图3所示,按本发明提供的方法进行编码,则只输出长度为k个样点的码流,并将这个音频帧的长度信息写在码流中的frame_length字段(还需乘以位深和AES通道数)。

解码时,每次读取1024个样点的码流数据,并相应地解出至少一帧的音频数据。在这1024个样点之内,若在第n个样点位置(比如对应第m个音频帧)遇到了长度为k的音频帧(k≤1024),则根据码流中的长度信息frame_length进行解码。任何一帧码流只有在完整时才能解出音频数据。

1.n+k=1024,则输出第m帧音频数据。另外,若n>0,则在此之前先输出第m-1帧音频数据。

2.n+k>1024,由于k不能超过1024,所以n一定大于0。

此时输出第m-1帧,并能读到第m帧的前k个样点,但这帧数据不完整,所以本次解码不输出第m帧,等下次解码再输出;

3.若n+k<1024,则可以完整解出第m帧,并继续读取下一帧,令n=n+k,k=下一帧码流长度,然后重复上述过程,直到n+k≥1024再根据1)2)来决定输出的音频数据。在重复过程中,只要n>0,就输出前一帧数据。

图4表示遇到短帧时的解码过程,包括每次解码读取的码流数据(中)和输出的音频数据(下)。

实施例2:假定视频帧率是24fps,音频采样率是48000Hz,音频位深是24bit。

如图5所示,在电影的第1000个视频帧处插入200个视频帧的编码方法如下:

步骤1:计算第1000个视频帧对应的音频样点数

StartPos=1000*48000/24=2,000,000;

步骤2:计算第1000个视频帧对应的音频帧数

StartFrame=StartPos/1024=1953,再将第1953个音频帧之后的数据另存为一个文件Data0.pcm;

步骤3:计算需要插入的音频样点数InsertSamples=200*48000/24=400,000;

步骤4:计算所有需要重新组织的音频样点数

DataToReenc=InsertSamples+1024=401,024;

步骤5:重新组织音频数据

401,024=391*1024+640,共包含391个音频整帧和一个长度为640的短帧;

步骤6:将前391个音频帧按标准方式编码,每个音频帧输出1024个样点;将最后640个样点按照短帧方式编码,并输出640个样点;

步骤7:将Data0拼接到后面。

上述编码输出码流的解码过程如下:(此过程涉及的“帧”均指音频帧,包括整帧和短帧):

步骤1:从影片开头,直到1953+391=2344帧,每次解码读取1024个样点的码流数据,并输出1024个样点的音频数据。

步骤2:第2344次解码,读取的数据是长度为640的短帧以及第2345帧的前1024-640=384个数据,此时可以解出前640个数据,但下一帧的数据不完整,所以这帧没有输出任何音频数据。

步骤3:第2345次解码,读取的数据是第2345帧的后640个数据和第2346帧的前384个数据,此时第2345帧的数据已经完整,可以输出1024个样点的数据。后面以此类推,每次读取的数据都是前一帧的640个样点+后一帧的384个样点。

实施例3:假定视频帧率是24fps,音频采样率是48000Hz,音频位深是24bit。

如图6所示,在电影的第1000个视频帧处删除300个视频帧的编码方法如下:

步骤1:计算第1000个视频帧对应的音频样点数

StartPos=1000*48000/24=2,000,000;

步骤2:计算第1000个视频帧对应的音频帧数StartFrame=StartPos/1024=1953;

步骤3:计算删除终点对应的样点数EndPos=1300*48000/24=2,600,000;‘’步骤4:计算删除终点对应的音频帧数EndFrame=EndPos/1024=2539,将第2539个音频帧之后的数据另存为一个文件Data0.pcm;

步骤5:计算所有需要重新组织的音频样点数

DataToReenc = (EndFrame-StartFrame+1)*1024 - (EndPos-StartPos) = 1088;

步骤6:重新组织音频数据

1088=1*1024+64,共包含1个音频整帧和一个长度为64的短帧;

步骤7:将第1个音频帧按标准方式编码,输出1024个样点;将最后64个样点按照短帧方式编码,并输出64个样点;

步骤8:将Data0拼接到后面。

上述编码输出码流的解码过程如下:(此过程涉及的“帧”均指音频帧,包括整帧和短帧):

步骤1:从影片开头,直到1953+1=1954帧,每次解码读取1024个样点的码流数据,并输出1024个样点的音频数据;

步骤2:第1954次解码,读取的数据是长度为64的短帧以及第1955帧的前1024-64=960个数据,此时可以解出前64个数据,但下一帧的数据不完整,所以这帧没有输出任何音频数据;

步骤3:第1955次解码,读取的数据是第1955帧的后64个数据和第1956帧的前960个数据,此时第1955帧的数据已经完整,可以输出1024个样点的数据。后面以此类推,每次读取的数据都是前一帧的64个样点+后一帧的960个样点。

实施例4:假定视频帧率是24fps,音频采样率是48000Hz,音频位深是24bit。

如图7所示,在电影的第1000~1100个视频帧替换成200个视频帧的编码方法如下:

步骤1:计算第1000个视频帧对应的音频样点数

StartPos=1000*48000/24=2,000,000;

步骤2:计算第1000个视频帧对应的音频帧数StartFrame=StartPos/1024=1953;

步骤3:计算替换终点对应的样点数EndPos=1100*48000/24=2,200,000;

步骤4:计算替换终点对应的音频帧数EndFrame=EndPos/1024=2148,将第2148个音频帧之后的数据另存为一个文件Data0.pcm;

步骤5:计算所有需要重新组织的音频样点数

DataToReenc = (EndFrame-StartFrame+1)*1024 - (EndPos-StartPos) + 200*48000/24 = 400,704;

步骤6:重新组织音频数据

400,704=391*1024+320,共包含391个音频整帧和一个长度为320的短帧;

步骤7:将前391个音频帧按标准方式编码,每帧输出1024个样点;将最后320个样点按照短帧方式编码,并输出320个样点;

步骤8:将Data0拼接到后面。

上述编码输出码流的解码过程如下:(此过程涉及的“帧”均指音频帧,包括整帧和短帧):

步骤1:从影片开头,直到1953+391=2344帧,每次解码读取1024个样点的码流数据,并输出1024个样点的音频数据;

步骤2:第2344次解码,读取的数据是长度为320的短帧以及第2345帧的前1024-320=704个数据,此时可以解出前320个数据,但下一帧的数据不完整,所以这帧没有输出任何音频数据;

步骤3:第2345次解码,读取的数据是第2345帧的后320个数据和第2346帧的前704个数据,此时第2345帧的数据已经完整,可以输出1024个样点的数据。后面以此类推,每次读取的数据都是前一帧的320个样点+后一帧的704个样点。

如上所述,尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制。在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在形式上和细节上作出各种变化。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1