首页 > 解决方案 > 如何检测视频文件是否是纯静态的?

问题描述

我有一组模拟视频记录。大约 10% 的文件是完全静态的。我如何以编程方式查看所有文件并删除主要包含静态文件的文件?

以下实用程序具有用于分析视频的命令行选项,但没有一个内置功能来检测视频内容的缺失。

  1. ffmpeg

  2. ffprobe

  3. 手刹

我尝试使用 ffmpeg 导出静止图像,然后使用图像魔法来比较这些图像之间的差异。不幸的是,静态图像和实际视频内容之间的差异返回几乎相同的差异百分比。(9% 对 7%)

ffmpeg -ss 00:30 -i PICT0050.AVI -vframes 1 -q:v 2 output1.jpg

magick compare -metric PSNR output1.jpg output2.jpg diff.jpg
9.2191

magick compare -metric PSNR output1.jpg output3.jpg diff.jpg
7.70127

比较样品 1 和样品 2 会导致 9% 的差异
比较样品 1 和样品 3 会导致 7% 的差异

样品 1 在此处输入图像描述

样品 2 在此处输入图像描述 样品 3 在此处输入图像描述 样品 4 在此处输入图像描述 样品 5 在此处输入图像描述 样品 6 在此处输入图像描述 样品 7 在此处输入图像描述

标签: image-processingffmpegimagemagick

解决方案


看起来静态图像是黑白的,没有任何颜色 - 所以我会查看平均饱和度,如果它是低/零,我会假设它们是静态的。因此,bash假设您的图像被命名为sampleXXX.jpg

for f in sample*jpg; do 
    convert "$f" -colorspace HSL -channel S -separate -format '%M avg sat=%[fx:int(mean*100)]\n' info:
done

样本输出

sample1.jpg avg sat=0
sample2.jpg avg sat=0
sample3.jpg avg sat=21
sample4.jpg avg sat=0
sample5.jpg avg sat=39
sample6.jpg avg sat=31

这表明样本 1,2 和 4 是静态的。


推荐阅读