一种非线性编辑中工程文件的存储方法及装置
技术领域
本发明涉及数据存储技术,特别地涉及一种非线性编辑中工程文件的存储方法及装置,属于计算机多媒体技术。
背景技术
“非线性编辑”是指对电视、网上视频等视频媒体或者文件进行后期编辑时所采用的一种编辑方法,其利用计算机多媒体技术完成视频数字化、特技编辑以及广播级的视频输出,可以非常随意地在素材的某个地方进行增加、删除等编辑工作,方便与动画一起编辑,也可以根据需要容易地实现在视频上叠加文字、图形等。另一方面,由于非线性编辑是借助于计算机来实现数字化制作,所以几乎所有的工作都在计算机里完成,而不再需要很多的外部设备,对素材的调用也可以瞬间实现,不用反反复复在磁带上寻找,突破了单一的时间顺序编辑限制,可以按各种顺序排列,具有快捷简便、随机的特性。此外,非线性编辑只要上传一次素材就可以对其进行多次编辑,信号质量始终不会变低,所以节省了设备、人力,提高了效率。由此目前越来越广泛地应用在广告创意、动画制作字幕叠加等领域,也给广告及电视行业带来了勃勃生机。
在非线性编辑过程中,工程文件是用户编辑成果的一种体现,它需要进行阶段性地保存。然而,随着所编辑节目的规模增长,工程文件大小也随之增加,在大规模节目制作系统中,存储工程文件需要占用大量的磁盘空间,由此设备成本也不断增加。另一方面,对于较大的工程文件,读写速度也大大降低,同时在读写过程中会占用大量的内存,使得系统性能降低。
在现有技术中,对于工程文件的存储方法,参照图1所示,主要包括:
设置预定存储容量的内存空间,用于存储非线性编辑中的工程文件,然后执行以下步骤:
步骤101,获取待存储的数据,该数据为利用计算机进行非线性编辑所输入的信息;
步骤102,依次将所获取的数据写入内存空间,此时,对于每个待写入的数据,获取每个数据节点的长度,以便于获取完整的数据信息,所述数据节点的长度存储于节点中的确定位置,需要更改节点的长度时将新的长度更新至节点信息的相应位置;
其中,节点是工程文件中有效而完整的结构的最小单元。
步骤103,将内存中的数据写入工程文件。
上述的工程文件的存储方法中所述的预定存储容量需要足够大,以能够随时间回写节点长度,从而保证内存数据可以直接访问,但是随着工程文件的增大,系统占用很多资源时,对于预定存储容量的设定就需要有一定限制,难以预留足够大的内存空间来满足工程文件的存储需求。另一方面,当工程文件很小时,预留很大的内存空间显然将带来系统资源的巨大浪费。
发明内容
本发明要解决的技术问题是:提供一种非线性编辑中工程文件的存储方法及装置,使得非线性编辑中
为了解决上述问题,本发明提供了一种非线性编辑中工程文件的存储方法,包括:
设置预定存储容量的内存空间;然后执行下列步骤:
获取待存储数据;
当待存储数据的字节数大于所述内存空间的存储容量时,将待存储数据写入工程文件;
当待存储数据的字节数大于所述内存空间中当前剩余字节数,且小于所述内存空间的存储容量时,将当前内存空间中的数据写入工程文件后,再将待存储数据写入所述内存空间;
当待存储数据的字节数小于所述内存空间中当前剩余字节数,将待存储数据写入所述内存空间。
进一步地,该方法还包括:当待存储文件已经写完时,将内存空间中当前存储的数据写入工程文件。
进一步地,所述数据作为节点、以树状结构写入内存空间或者工程文件,且包括:节点关键字、节点长度和节点内容。
更进一步地,该方法还包括:将待存储数据写入工程文件时,确定所写入数据在所述工程文件中的实际位置。
其中,确定所写入数据在所述工程文件中的实际位置进一步为:
记录所写入数据的大小;
所写入数据的节点关键字位置为:当前所存储数据的关键字在内存空间中的位置偏移数据所占用容量后所指示的位置。
更进一步地,待存储数据写入内存空间或者工程文件时,更新节点长度。
其中:所述更新节点长度进一步为:
当数据的写入位置是当前内存空间时,直接更新数据的节点长度;否则,在缓存中通过链表记录该节点位置和内容。
再进一步地,该方法还包括:当待存储文件已经写完时,按照缓存中的所存储的节点位置和内容对工程文件中的相应节点内容进行更新。
本发明还提供一种非线性编辑中工程文件的存储装置,包括:预设存储容量的存储单元、数据写入单元、处理单元和数据写入单元;其中:
所述数据获取单元:用于接收外部输入的待存储数据;
所述处理单元:用于在判断待存储数据的字节数大于所述存储单元的存储容量时,指示数据写入单元将所述数据写入外部工程文件;判断待存储数据的字节数大于所述存储单元中当前剩余字节数,且小于所述存储单元的存储容量时,指示数据写入单元将当前存储单元中的数据写入外部工程文件,且在获知当前存储单元为空时,指示数据写入单元将待存储数据写入所述存储单元;判断待存储数据的字节数小于所述存储单元中当前剩余字节数时,将待存储数据写入所述存储单元。
进一步地,所述处理单元还用于在判断所述数据获取单元中为空时,指示数据写入单元将所述存储单元中当前存储的数据写入外部工程文件。
进一步地,所述数据作为节点、以树状结构写入内存空间或者工程文件,且包括:节点关键字、节点长度和节点内容。
更进一步地,所述数据写入单元还用于将所述数据写入外部工程文件时,确定所写入数据在外部工程文件中的实际位置。
其中,确定所写入数据在所述工程文件中的实际位置进一步为:
记录所写入数据的大小;
所写入数据的节点关键字位置为:当前所存储数据的关键字在内存空间中的位置偏移数据所占用容量后所指示的位置。
更进一步地,所述数据写入单元还用于将所述数据写入存储单元或者工程文件时,更新节点长度。
其中,所述更新节点长度进一步为:
当数据的写入位置是当前内存空间时,直接更新数据的节点长度;否则,在缓存中通过链表记录该节点位置和内容。
再进一步地,所述处理单元还用于在判断所述数据获取单元中为空时,指示数据写入单元按照缓存中的所存储的节点位置和内容对外部工程文件中的相应节点内容进行更新。
使用本发明所提供的方法和装置可以大大减小非线性编辑中工程文件的大小,从而节省磁盘空间,具体实例中利用本发明的方法及装置和利用现有技术的方法所需磁盘空间对比如下:
工程描述 |
本发明 |
现有技术 |
空工程 |
8k |
20k |
导入素材: |
16k |
45k |
加素材上轨 |
23k |
69k |
2素材 |
30k |
92k |
10素材 |
85k |
281k |
20素材 |
154k |
518k |
30素材 |
223k |
754k |
100素材 |
707k |
2,409k |
400素材 |
2,781k |
9,503k |
4素材5特技 |
75k |
236k |
40素材50特技 |
296k |
987k |
200素材250特技 |
1,281k |
4,329k |
复杂测试工程 |
61,507k |
207,042k |
从对比数据中,可以清楚地看出:利用本发明的方法和装置可以明显减小对系统资源的需求,无论工程实际的大小如何,保存工程时所需占用的内存大小始终保持在1M,这可以保证在工程很复杂时不申请额外资源,进而保证工程文件保存过程的可靠性和效率。
附图说明
图1为现有技术中存储非线性编辑中的工程文件的方法流程图;
图2为工程文件的节点的存储格式;
图3为本发明实施例的存储非线性编辑中的工程文件的方法的流程图;
图4为本发明实施例的存储非线性编辑中的工程文件的装置的结构示意图。
具体实施方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
为了存储非线性编辑中的工程文件,需要设置预定存储容量的内存空间,所述的预定存储容量根据待处理工程文件通常的大小或者系统可供使用的内存容量确定,为了避免频繁访问文件而带来效率降低,该存储容量不宜设置太小,通常为0.5M~5M;优选地,可以设置为固定值1M;所述内存空间可以是预置地址区间或者系统根据当前可使用的内存情况随机设定或者还可以通过手动设置参数的方式来指定。
设定工程文件的节点的存储格式,如图2所示,其中:
Key为节点关键字,一般类型为unsigned long,长度为4个字节,其预先被按照确定规则定义,例如,某些位代表某一类数据,以便于数据的管理以及结构的扩展;
Length为节点长度,一般类型为unsigned long,长度为4个字节,其代表本节点Value的总长度(不包括本节点的Key和Length);
Value为节点数据内容,一般类型为二进制数据,长度为Length字段规定的长度。
基于上述设定,如图3所示,一种非线性编辑中工程文件的存储方法包括下述步骤:
步骤201,创建工程文件;
步骤202,获取待存储的数据。该数据为利用计算机进行非线性编辑所输入的信息,该信息整体表现为树状结构,即最终以树状结构写入工程文件中;以便于每次获取到的数据表现为节点、子节点或节点属性;
步骤203,判断待存储数据的内容相对于内存空间中的当前剩余内存容量是否越界,也就是判断待存储数据的字节数是否大于预设内存空间中当前剩余字节数,如果是,执行步骤204,否则,直接执行步骤207;
步骤204,判断待存储数据的内容是否大于预设内存空间总容量大小,如果是则执行205,否则执行206;
步骤205,将待存储数据直接写入工程文件,同时记录下已经写入的数据大小,用于确定节点“Key”关键字在所述工程文件中的实际位置:“Key”关键字的实际位置=已写入的数据大小+“Key”关键字在内存空间中的位置,即,当前所存储数据的“Key”关键字在内存空间中的位置偏移数据所占用容量后所指示的位置;然后执行208;
步骤206,将内存空间中的数据写入工程文件,同时记录下已经写入的数据大小,用于确定节点“Key”关键字在所述工程文件中的实际位置。然后清空内存中所存在的所有数据内容;
步骤207,将待存储的数据写入内存空间;
所述将待存储的数据写入内存空间具体为:首先写入关键字“Key”,标识节点名称;之后预留“Length”长度,用于在节点存储完成后更新节点长度;之后写入节点的“Value”,即具体内容;
步骤208,写入获取的数据后,需要更新已写入数据的节点长度和父节点长度;
执行此步骤是因为:节点可以由多级构成,此时,当节点的内容增加时,子节点自身的长度增加,同时通知父节点的长度增加,依次递归直到根节点。根节点记录的Length为该根节点记录下所有数据内容的总长度;
更新方法为:将更新后的节点长度重写到已有节点的“Length”关键字对应位置,“Length”关键字位置=“Key”关键字位置+“Key”关键字长度;
具体来说,首先需要判断长度为Length的数据的写入位置是否在当前的内存中,该步骤可以通过判断是否能够直接访问并修改数据来确定,如果可以则直接修改长度,进行数据写入更新,如果不能,则记录下“Length”数据的位置和“Length”数据的内容,加入一个需要update的链表到缓存中;
步骤209,判断所有的待存储数据是否已经写完,如果是,将内存中存储的数据写入工程文件,并执行步骤210,如果否,返回执行步骤202;
该判断为非线性编辑系统所确定,并且能由系统给出显示通知。
步骤210,按照缓存中的update链表,根据“Length”数据的位置对“Length”数据的内容进行更新,即将指定内容更新到指定的工程文件位置上。
步骤211,关闭文件,存储工作结束。
对应地,本发明提供一种非线性编辑中工程文件的存储装置,如图4所示,包括:预设存储容量的存储单元、数据写入单元、处理单元和数据写入单元;其中:
所述数据获取单元:用于接收外部输入的待存储数据;
所述处理单元:用于在判断待存储数据的字节数大于所述存储单元的存储容量时,指示数据写入单元将所述数据写入外部工程文件;判断待存储数据的字节数大于所述存储单元中当前剩余字节数,且小于所述存储单元的存储容量时,指示数据写入单元将当前存储单元中的数据写入外部工程文件,且在获知当前存储单元为空时,指示数据写入单元将待存储数据写入所述存储单元;判断待存储数据的字节数小于所述存储单元中当前剩余字节数时,将待存储数据写入所述存储单元。
进一步地,所述处理单元还用于在判断所述数据获取单元中为空时,指示数据写入单元将所述存储单元中当前存储的数据写入外部工程文件。
进一步地,所述数据作为节点、以树状结构写入内存空间或者工程文件,且包括:节点关键字、节点长度和节点内容。
更进一步地,所述数据写入单元还用于将所述数据写入外部工程文件时,确定所写入数据在外部工程文件中的实际位置。
其中,确定所写入数据在所述工程文件中的实际位置进一步为:
记录所写入数据的大小;
所写入数据的节点关键字位置为:当前所存储数据的关键字在内存空间中的位置偏移数据所占用容量后所指示的位置。
更进一步地,所述数据写入单元还用于将所述数据写入存储单元或者工程文件时,更新节点长度。
其中,所述更新节点长度进一步为:
当数据的写入位置是当前内存空间时,直接更新数据的节点长度;否则,在缓存中通过链表记录该节点位置和内容。
再进一步地,所述处理单元还用于在判断所述数据获取单元中为空时,指示数据写入单元按照缓存中的所存储的节点位置和内容对外部工程文件中的相应节点内容进行更新。
利用本发明的方法和装置可以明显减小对系统资源的需求,无论工程实际的大小如何,保存工程时所需占用的内存大小始终保持在1M,这可以保证在工程很复杂时不申请额外资源,进而保证工程文件保存过程的可靠性和效率。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。