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

问题描述 投票:0回答:2

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

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

  1. ffmpeg

  2. ff探针

  3. 手刹

我尝试使用 ffmpeg 导出静态图像,然后使用 image magick 来比较这些图像之间的差异。不幸的是,静态图像和实际视频内容之间的差异返回几乎相同的差异百分比。 (9% vs 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 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

image-processing ffmpeg imagemagick
2个回答
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
投票

另一种方法是使用 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
© www.soinside.com 2019 - 2024. All rights reserved.