我收集了一组模拟录像。大约10%的文件是完全静态的。如何以编程方式查看所有文件并删除包含大多数静态文件的文件?
下面的实用程序有命令行选项来分析视频,但是没有一个工具内置了检测视频内容缺失的功能。
我尝试使用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
发布于 2019-01-03 19:04:48
看起来这些静态图像是黑白的,没有任何颜色--所以我会看平均饱和度,如果是低/零,我会假设它们是静态的。所以,在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是静态的。
发布于 2019-01-03 23:04:49
另一种方法是使用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
https://stackoverflow.com/questions/54027354
复制相似问题