如何检测视频文件是否是纯静态的?

时间:2019-01-03 17:51:01

标签: image-processing ffmpeg imagemagick

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

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

  1. ffmpeg

  2. ffprobe

  3. HandBrake

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

A

将样本1与样本2进行比较,结果相差9%
比较样本1和样本3导致7%的差异

样本1 enter image description here

样本2 enter image description here 样品3 enter image description here 样品4 enter image description here 样品5 enter image description here 样品6 enter image description here 样品7 enter image description here

2 个答案:

答案 0 :(得分:4)

看起来静态图像是黑白的,没有任何颜色-因此,我将查看平均饱和度,如果它是低/零,我将假定它们是静态的。因此,在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是静态的。

答案 1 :(得分:1)

另一种方法是使用Imagemagick来查看边缘数量,以对噪声数量进行排名。噪点图像将具有更多边缘。

for img in *; do
edginess=`convert $img -edge 1 -scale 1x1! -format "%[fx:mean]" info:`
echo "$img $edginess"
done

1bidV.jpg 0.0472165
3FJUJ.jpg 0.275502  <---- noise image
QpQvA.jpg 0.332296  <---- noise image
b4Gxy.jpg 0.0428422
gQcXP.jpg 0.0437578
vF1YZ.jpg 0.322911  <---- noise image