Улучшено извлечение эскизов из видео.

Я использую FFmpeg, чтобы найти средний кадр видеофайла h264 и извлечь миниатюру jpg для использования на потоковом портале. Это делается автоматически для каждого загружаемого видео.

Иногда кадр оказывается черным кадром или просто семантически плохим, то есть фоном или размытым снимком, который плохо соотносится с видеоконтентом.

Интересно, могу ли я использовать openCV или какой-либо другой метод/библиотеку для программного поиска лучших эскизов с помощью распознавания лиц или анализа кадров.


person Tommy Ng    schedule 22.03.2011    source источник


Ответы (3)


Я сам столкнулся с этой проблемой и придумал очень грубый, но простой алгоритм, чтобы мои миниатюры были более "интересными". Как?

  1. Создайте x миниатюры в разных точках. Например. 5 миниатюр
  2. Используйте самый большой (в байтах) файл и откажитесь от остальных

Почему это работает? Потому что jpeg-файлы монотонного «скучного» изображения, такого как полностью черный экран, сжимаются в файлы гораздо меньшего размера, чем изображение с множеством объектов и цветов.

Это не идеальное, но жизнеспособное решение 80/20. (Решает 80% проблемы с 20% работы.) Кодирование чего-то, что действительно анализирует само изображение, потребует значительно больше работы.

person Stu Thompson    schedule 22.03.2011
comment
Спасибо, это звучит грубо, но решает проблему с черными рамками без особых усилий. - person Tommy Ng; 22.03.2011

Libavfilter имеет фильтр миниатюр, который предназначен для выбора наиболее репрезентативного кадра из серии кадров. Не уверен, как это работает, но вот документы http://ffmpeg.org/libavfilter.html#thumbnail

person Cameron Martin    schedule 12.03.2012

На случай, если кому-то понадобится два вкладыша (с использованием ffmpeg и imagemagick):

(это выбирает максимум 20 кадров из видео и использует gt (scene) для выбора моментов перехода. Он использует ffmpeg для создания pngs шириной 120 пикселей, а затем imagemagick для создания gif (потому что GIF-файлы ffmpeg общеизвестно уродливы ...) Это может потерпеть неудачу, если в фильме ничего не происходит, но тогда вы не должны называть это фильмом — не так ли?

ffmpeg -i $1 -loglevel error -vf "select=gt(scene\,0.1), scale=120:-1" -frames:v 20 -f image2 -vsync 0 -an ./tmp/img%05d.png 
convert -delay 25 -loop 0 ./tmp/img*.png thumb.gif
person denjello    schedule 21.01.2014