我正在尝试使用FFmpeg
计算短视频中的总光流值(或运动值)。有命令执行此操作吗?如果更快,也将对任何其他方法都开放。
我目前正在使用Python
和openCV
来做到这一点:
def getOpticalMag(prev_image, curr_image):
prev_image_gray = cv2.cvtColor(prev_image, cv2.COLOR_BGR2GRAY)
curr_image_gray = cv2.cvtColor(curr_image, cv2.COLOR_BGR2GRAY)
flow = cv2.calcOpticalFlowFarneback(prev_image_gray, curr_image_gray, flow=None,
pyr_scale=0.5, levels=1, winsize=15,
iterations=2,
poly_n=5, poly_sigma=1.1, flags=0)
mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])
return np.mean(mag)
您正在寻找的是直接从编码的视频流中提取运动矢量。 FFmpeg没有为此提供接口。这个git https://github.com/jishnujayakumar/MV-Tractus可能很有趣。
另一方面,由于您正在寻找平均运动。您可以调整输入图像的大小(按2或4倍缩减采样)和/或使用更快的方法,例如DIS flow。另一种优化策略是使用金字塔形的Lucas Kanade方法为非常稀疏的网格计算运动矢量。