我想用spark和hadoop并行处理mp4视频帧。我不想在处理前提取所有帧。我要寻找的是一种方法,通过视频时间按顺序读取帧数据,然后在使用yarn的hadoop集群上的spark执行器中输入帧。mp4视频文件可以位于本地文件系统或hdfs上。
我可以使用ffmpeg创建一个管道,然后读取原始帧字节(例如,image=np.fromstring(pipe.stdout.read(192010803),dtype='uint8'))。是否有任何方法将数据(即,流,帧作为可变解码时间的函数传入)馈送到spark rdd,并且具有执行某些操作(例如,计算平均强度)的map函数?
我已经阅读spark文档很长一段时间了,在这个场景中找不到任何有用的东西。我可能因为树木而错过了森林。如果可以,请提供帮助,即使不使用ffmpeg和管道。
1条答案
按热度按时间imzjd6km1#
经过反复试验,我找到了一个可行的解决办法。虽然这可能不适用于所有人,但也可能对某些人有所帮助,因此:
我首先创建了一个从视频中提取帧的脚本,该脚本必须存在于所有工作节点上:
然后,在pyspark脚本中,我使用脚本参数创建rdd:
测试现在有前1000帧。“调整大小”Map器调整每个帧的大小,如下所示:
我希望这能帮助别人。