目前ffmpeg针对超大型视频编码,可以实现多thread,但无法分享多个计算机资源。
主要难点在于无法将计算拆分到各个机器,并高效的处理编码。由于视频数据存在前后连续性,并且不同的编码格式,对于线程级别的任务拆分各有不同。
其实应该可以在视频级别进行拆分、编码和合并,其实现思想无外乎map/reduce
比如对于MPEG2格式的视频,我们能将原视频断在closedgop处,同时分离音频,将音频断在某音频包处。这样可以实现map的功能。
对于处理完成的视频,按照先后顺序合并起来,即reduce。这里音频视频分开处理,会使得问题简单化。
这里倒没必要使用某论文所说的用hadoop来计算,完全是打肿脸充胖子。实现一个最简单的调度架构即可。
对于reduce的视频,可能重点在处理接缝处了,不过理论上目标格式也是MPEG2的话,直接叠加,考虑PTS等混乱的话,重新封装一次即可。这里IO应该还可以优化, 暂不考虑。