@
happinessnch #81 你回不回的,又如何,at 你的楼层是为了明确上下文,写了又不是只给你一个人看的。就算你不特意说明接下来不回,难不成我还催着你回复吗?我要真那么做了,屏蔽是干嘛用的?虽然我自己坚决不拉黑别人,但并不认为这个功能的存在有何不妥。
为什么总有人要把视频编解码这么复杂的体系看成一个单独的算法?哪怕是这个体系中的每一个环节,也都是由多个不同算法构成的,并且有些算法还不是强制的、固定的,是可增减的、根据条件选择的。选择的根据不仅仅是用户指定的参数,还取决于各个软件、硬件的具体实现,即使严格遵照标准依然有巨大的灵活发挥空间。
再说用户只能指定更改哪些参数,剩下大量参数既然没有被用户指定,那就保持默认值,而这个默认值不同的软硬件实现也可以不一样。至于参数本身,标准体系内的参数也不是非得全部暴露出来,标准之外的参数也不是不可以加进来。
说到底,还是前述的那样,标准体系之下有着巨大的灵活发挥空间,软硬件编码器怎么实现、怎么设计、怎么在标准的基础上取舍、乃至魔改,八仙过海各凭本事。
你心心念念的所谓“一样的算法”“一样的参数”这些前提,从一开始就不存在。除非我们是在讨论同一个软硬件实体的同一个版本,而不是现在这样在讨论众多不同的软硬件实现。
运动预测这方面,标准只规定要按照怎样的“语法”来描述运动,至于这些运动偏移是怎么估算出来的,标准才不管那么多。其他方面也是,标准的存在是为了统一用来描述静态和动态画面的方式及相关的数据结构,只要能保证这方面的统一性,就能保证统一的可解码性,并能保证解码结果的统一性,至于是怎么编码出来的,根本不在乎,反正编码结果数据的语义和数据结构符合标准就行了。
所以编码器在对画面作运动预测时,是以一整个画面为范围,还是划分成 4 个、16 个、64 个小块来提高并行度,这是编码器的自由,也不会违反编码标准,反正不管用何种方式进行预测,只要预测的结果能被其他解码器读懂就行。给 CPU 用的软件编码器有着充足的内存空间和强大的运算单元,不需要再考虑把单帧画面进一步切割。GPU 上的运算单元都是些功能孱弱的弱单元,显存也不够一众核心分,所以在给核心分配任务的同时限定各自的搜索范围,这都是在客观因素制约下的因地制宜的手段。
所以你结尾总算说了一句事实,(同一视频编码标准下的,各种不同的软件编码器实现,和各种硬件编码器)压根就不是一个算法。所以也别拿自己参与过的项目来类比这个项目之外的、更广阔的的、你所不熟悉的领域了。