使用 FFmpeg 计算光流大小
Posted
技术标签:
【中文标题】使用 FFmpeg 计算光流大小【英文标题】:Use FFmpeg to calculate Optical Flow magnitude 【发布时间】:2020-04-01 21:19:47 【问题描述】:我正在尝试使用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)
【问题讨论】:
【参考方案1】:您正在寻找的是直接从编码的视频流中提取运动矢量。 FFmpeg 没有为此提供接口。这个 git https://github.com/jishnujayakumar/MV-Tractus 可能很有趣。
另一方面,因为您正在寻找平均运动。您可以调整输入图像的大小(下采样 2 或 4 倍)和/或使用更快的方法,如 DIS 流。另一种优化策略是使用金字塔 Lucas Kanade 方法计算非常稀疏网格的运动向量。
【讨论】:
以上是关于使用 FFmpeg 计算光流大小的主要内容,如果未能解决你的问题,请参考以下文章