Как определить, является ли видео файл чисто статическим? - PullRequest
0 голосов
/ 03 января 2019

У меня есть коллекция аналоговых видеозаписей.Около 10% файлов полностью статичны.Как я могу программно просмотреть все файлы и удалить файлы, которые в основном содержат статические файлы?

Следующие утилиты имеют параметры командной строки для анализа видео, однако ни одна из них не имеет встроенных функций для обнаружения отсутствия видеоконтента.

  1. ffmpeg

  2. ffprobe

  3. Ручной тормоз

Я пытался использовать ffmpeg для экспорта неподвижных изображений, а затем использовать image magick , чтобы сравнить разницу между этими изображениями.К сожалению, разница между изображением статического и фактического видеоконтента возвращает почти одинаковый процент разницы.(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 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 голосов
/ 04 января 2019

Другой способ - посмотреть на количество ребер, используя 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
0 голосов
/ 03 января 2019

Похоже, что статические изображения черно-белые без какого-либо цвета - поэтому я бы посмотрел на среднее насыщение, и если оно будет низким / нулевым, я бы предположил, что они статичны.Итак, в 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 статические.

...