我对视频压缩的有限(也可能是错误的)理解是帧内完全独立。换句话说,帧内(关键帧)的所有图像数据全部存储在该帧中。它是以下帧间帧(我认为是H.264中的P和B帧),它们依赖于其他帧中的数据来“绘制”。
如果这些帧内帧完全独立,为什么不编码一个令人尴尬的并行问题呢?如果你有N个处理器和X I帧,你可以给每个处理器提供X / N块来独立编码,然后在最后将它们全部打补丁,对吗?但似乎情况并非如此 - 或者至少,我没有看到任何编程器具有能够做到这一点的那种并行化。我不理解的是什么?
答案 0 :(得分:2)
首先要考虑的是你想放置帧内帧的地方。为了获得最佳压缩效果,您需要明智地选择它,例如,更喜欢将场景更改为静态序列的中间位置。要找到分析原始视频所需的最佳位置,可以在额外的通道中完成(昂贵),也可以在编码时动态决定。
因此,要将流分成块,您需要额外传递分析它,或者只是任意分割它并失去一些压缩效率。
然后你必须考虑如何编码这个原始视频。它可以从某个地方流入您的压缩程序,也可以在磁盘上使用。
如果是流式传输,那么您运气不好,因为您没有随机访问流的不同部分。是的,你可以缓冲它但是快速计算显示这需要大量内存或你必须缓冲到磁盘,这导致下一点:
如果您将整个原始文件存储在本地,那么您可以将部分分成不同的进程或线程。除了您的问题现在将是磁盘访问!考虑到原始1080p,24fps视频的数据速率约为每分钟4 GB。使用单个进程对其进行编码,磁盘将占用大量原始数据。它甚至可能是这个过程中最慢的部分(尽管可能除非您的硬盘驱动器非常分散!)
现在考虑让4个进程访问同一个文件,所有进程都试图以极高的速率获取原始数据。这种硬盘驱动器无法使编码器保持数据输入 - 弱链路不会是慢速处理器,而是数据访问速度慢。
因此,除非您有一些非常专业的工具包来存储您的未压缩视频,否则为并行编码分配不同的部分是不切实际的。
答案 1 :(得分:1)