我有一组模拟视频录像。大约10%的文件是完全静态的。如何以编程方式查看所有文件并删除包含大部分静态内容的文件?
以下实用程序具有用于分析视频的命令行选项,但是没有内置功能可检测视频内容的缺失。
ffmpeg
ffprobe
HandBrake
我尝试使用ffmpeg导出静止图像,然后使用image magick比较这些图像之间的差异。不幸的是,静态图像与实际视频内容之间的差异返回了几乎相同的差异百分比。 (9%vs 7%)
A
将样本1与样本2进行比较,结果相差9%
比较样本1和样本3导致7%的差异
答案 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