video - 使用 FFmpeg 计算光流大小

标签 video ffmpeg video-processing cv2 opticalflow

我正在尝试使用 FFmpeg计算短视频中的总光流值(或运动值)。有没有命令可以做到这一点?如果速度更快,也将对任何替代方法持开放态度。

我目前正在使用 PythonopenCV要做到这一点:

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 没有为此提供接口(interface)。这个 git https://github.com/jishnujayakumar/MV-Tractus可能很有趣。

另一方面,因为您正在寻找平均运动。您可以调整输入图像的大小(下采样 2 或 4 倍)和/或使用更快的方法,如 DIS 流。另一种优化策略是使用金字塔 Lucas Kanade 方法计算非常稀疏网格的运动向量。

关于video - 使用 FFmpeg 计算光流大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60980511/

相关文章:

video - 使用 FFmpeg 在特定时间将视频叠加到另一个视频上

ios - Chrome 中带有音乐的 HTML 5 视频在 Safari 中没有音乐

c - ffmpeg 音乐播放器

c++ - ffmpeg YUV420 到 RGB24 只转换一行

javascript - 从选定的持续时间循环播放视频

iphone - 是否可以以 60 fps 的速度生成视频并以 60 fps 的速度播放?

python - 使用 FFMPEG 命令读取帧并使用 opencv 中的 inshow 函数显示

video - FFMPEG裁剪大小总是错误的

c++ - OpenCV 中的 VideoReader 已弃用。是否有来自 OpenCV 的任何更新或任何替代?

video - ffmpeg 生成仅包含 ts 音频的文件