|
好像有点跑题了,所以我打算说一下为什么视频前期处理很难跑成多线程优化。
对于非常简单的处理,比如调个颜色加个字幕什么的,这些都是可以做成多线程的。
而复杂的处理,多线程化是非常难的。
视频处理,本质上是一个黑箱,接受一串帧序列,输出一串帧序列。但是对于复杂的处理来说,输出和接受的帧不一定是一一对应的。
举个简单的栗子,画面稳定器 pan stabilizer ,这东西会根据前后数帧的画面来计算 global motion vector ,然后在 motion vector 上加上一个阻尼来减小画面抖动。所以假如要输出第3帧,则至少要从上游取出1 2 3 4 5帧来做大量的数学运算。
而对于AAD这样的滤镜,如果要输出第20帧,可能需要拿第24-26帧的数据来做运算。
而对于AAD+MCTD这样的组合来说,如果要输出第20帧,则需要从原始数据里拿第20-30帧的所有数据来做参考做运算。所以处理的过程不是线性的,也就不能从源头用push模型来推送数据,而只能从最后一个滤镜开始,往管道的源头pull数据。而pull模型的话,要么只能单线程(就像现在的AVS一样),要么就用multi-pull但是要承担重复运算的时间惩罚(就像MT-Pipeline一样)。不管哪种都很慢。
所以对这种高强度的资源密集型滤镜来说,CPU的单核性能就决定了一切,这也就是为什么4770 (包括手头的另一台i5 4570S)压制速度可以翻1090T一倍的原因。 |
|