Быстрый инструмент для создания миниатюрных видео-галерей для командной строки


14

Я использую gframecatcher для создания миниатюр видео-галерей, то есть что-то вроде этого:

введите описание изображения здесь

Однако это инструмент с графическим интерфейсом, и я хочу рекурсивно создавать галерею для каждого видео в структуре каталогов, поэтому я ищу быстрый инструмент командной строки для этого.

Ответы:


28

Вытащите снимки (они имеют высоту 100 пикселей и сохраняют соотношение сторон), скорость ( -r) равна одной секунде (это дает один кадр каждые ~ 5 минут), это также добавляет метку времени к выходному изображению.

ffmpeg  -i MOVIE.mp4 -r 0.0033 -vf scale=-1:120 -vcodec png capture-%002d.png

Затем используйте ImageMagickдля создания изображения вашей галереи:

montage -title "Movie Name\nSubtitle" -geometry +4+4 capture*.png output.png

7
Вы можете использовать дроби для оценки ( -r). Это позволяет проще и точнее указывать время. 5 минут = 300 секунд ffmpeg -i MOVIE.mp4 -r 1/300 -vf scale=-1:120 -vcodec png capture-%02d.png.
DutGRIFF

avconvработает так же, если у вас нет ffmpegдоступных (некоторые выпуски Ubuntu).
Кен Шарп

2
Это работает, но требует прохождения через весь видеофайл. superuser.com/questions/538112/… предоставляет несколько примеров, которые пытаются найти значимые миниатюры, а также избегают необходимости сидеть и обрабатывать все видео, чтобы получить несколько кадров.
Скрылар

Это не добавляет метку времени к изображению.
17

Как бы вы сделали это в пакетном режиме для нескольких видео в каталоге?
Пол Джонс

12

Мне нравится использовать простой в использовании скрипт командной строки Unix VCS - Video Contact Sheet. Их официальная страница: http://p.outlyer.net/vcs/

Его намного проще использовать даже проще, чем графический интерфейс

'' Это скрипт bash, предназначенный для создания видео-контактных листов (превью) или миниатюр или превью видео. Любое видео, поддерживаемое mplayer и ffmpeg, может использоваться этим сценарием. «Вам нужно будет либо установить, ffmpegлибо mplayerустановить в своей системе.

Использование:

vcs input-filename -U0 -i 1m -c 3 -H 200 -a 300/200 -o save-filename.jpg

Как работает команда

Отредактируйте input-filname к имени вашего видео файла!

  • -U0(без имени в нижнем колонтитуле - иначе оно отображает имя хоста - обратите внимание, это ноль, а не буква O)

  • -i 1m(устанавливает интервал времени захвата в минутах - в данном случае это каждую минуту - вы также можете использовать -nвместо него, который задает количество снимков, например -n 21, создаст 21 изображение, но не используйте оба)

  • -c устанавливает количество столбцов (здесь 3 столбца)

  • -H 200 -a 300/200 (устанавливает размер и формат, чтобы файл не был слишком большим - кажется, вы должны сделать оба)

  • -o filename.jpg(используйте .jpgпо умолчанию, так как .pngон слишком большой - и измените имя файла на любое другое!)


7

Этот, кажется, отвечает всем требованиям , он бесплатный и с открытым исходным кодом и даже работает на Windows :)

У него даже есть продвинутые вещи, например, вместо того, чтобы слепо выбирать любой кадр на определенном интервале, он может выбирать те, которые достаточно близки, но не выглядят слишком размытыми, поэтому вместо этого:

Скриншот

Вы можете передать ему параметр ( -D6), чтобы он сделал это:

лучший скриншот

Плюс мне очень не нравятся никакие границы, так что изображения могут быть немного больше.


7

Есть решение с форума ffmpeg.

Чтобы сделать несколько снимков экрана и поместить их в один файл изображения (создание плиток), вы можете использовать видеофильтр FFmpeg для видеочерепицы, например так:

ffmpeg -ss 00:00:10 -i movie.avi -vf 'select=not(mod(n\,1000)),scale=320:240,tile=2x3' out.png

Это будет искать 10 секунд в фильме, выбирать каждый 1000-й кадр, масштабировать его до 320x240 пикселей и создавать плитки размером 2x3 в выходном изображении out.png.

Оригинальный пост здесь - http://ffmpeg.gusari.org/viewtopic.php?f=25&t=597


Кроме того, ffmpeg, кажется, поддерживает «кадрирование» с тем же синтаксисом.
некоторые идеи

4

Вот как я обрабатываю простой контактный лист с помощью AWS EC2 с моего компьютера Mac.

Шаг № 1: Создайте экземпляр EC2 в Amazon Web Services

Я использовал:

Amazon Linux AMI 2015.03.1 (HVM), SSD Volume Type - ami-0d4cfd66
t2.medium

Шаг № 2: Настройте экземпляр

Это все для моего компьютера Mac для удобства, но вы также можете запустить только команды "sudu su ..." из командной строки EC2.

ssh -i "/local/path/to/key/your_ec2_key.pem" ec2-user@11.22.33.44 "sudo su root; curl -O http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.latest.tar.gz"
ssh -i "/local/path/to/key/your_ec2_key.pem" ec2-user@11.22.33.44 "sudo su root; gunzip ffmpeg.static.64bit.latest.tar.gz"
ssh -i "/local/path/to/key/your_ec2_key.pem" ec2-user@11.22.33.44 "sudo su root; tar -xf ffmpeg.static.64bit.latest.tar"

Замена 11.22.33.44 на ваш IP EC2.

Шаг № 3: Обработка видео

Отправить видео:

rsync -Pav -e 'ssh -i /local/path/to/key/your_ec2_key.pem pem' /Users/mdouma/Desktop/myVideo.mov ec2-user@11.22.33.44:/home/ec2-user/

Обработайте это в контактный лист:

ssh -i "/local/path/to/key/your_ec2_key.pem" ec2-user@11.22.33.44 "rm -f out.png ; ./ffmpeg -ss 00:00:00 -i myVideo.mov -vf 'select=not(mod(n\,1)),scale=113:111,crop=111:111,tile=18x36' out.png"

Измените / Users / mdouma на ваш локальный корень. Измените «, 1» на другой номер, например, «, 7», если вы хотите использовать только каждый 7-й кадр. Измените 111 на любой другой размер

Скопируйте его обратно на мой Mac:

rsync -Pav -e 'ssh -i /local/path/to/key/your_ec2_key.pem'  ec2-user@11.22.33.44:/home/ec2-user/out.png  /Users/mdouma/Desktop/out.png
open /Users/mdouma/Desktop/out.png

Это отличный совет. Обратите внимание, что sudo suэто бесцельно.
Кен Шарп

2
Почему вы отправляете это на ec2? Почему бы просто не запустить его на своем Mac локально? видеофайлы могут быть большими ГБ ...
проверялось

4

Этот инструмент мне помог (2019-02) - и он поддерживается. Множество опций - сетка, качество, шрифты, цвета, границы, интервал, ...

https://github.com/amietn/vcsi

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

Вам нужны только ffmpeg и python.


Это очень хорошо - спасибо!
Пепел

1

В пакете 'imagemagick' есть утилиты для подобных вещей.

http://www.imagemagick.org/Usage/thumbnails/

Существуют библиотеки API, использующие imagemajick для нескольких языков .


Какой будет соответствующая команда?
студент

convertвероятно, самый общий. Посмотрите на раздел « Создание общих миниатюр» на первой странице, на которую я ссылаюсь.
Златовласка

1

Totem - видеоплеер по умолчанию для 14.04 и некоторых более ранних версий Ubuntu - имеет опцию меню с простыми опциями (в меню «Правка» «Создать галерею скриншотов ...»). Есть также эквивалент командной строки (ish) под названием "totem-video-thumbnailer", в котором есть страница руководства, в которой рассказывается, как ее использовать; Я написал простой bash-скрипт, который использовал вывод команды find (стараясь не разделять файлы с пробелами в именах), чтобы автоматически генерировать галерею миниатюрных скриншотов (или контактный лист, как также упоминалось выше) для любых файлов выше определенного размер в каталоге, который еще не был.

Я могу загрузить его на свой github под ~ jgbreezer, если кому-то захочется поохотиться за ним. Хотя решения, использующие ffmpeg и другие, могут быть более гибкими и надежными; Кажется, я получаю сообщения об ошибках от команды totem о том, что не удается найти определенные кадры, но, похоже, все равно работает в большинстве случаев.


0

Я хотел то же самое, и поиск в Google закончился использованием ffmpeg и imagemagick. НЕ "быстро" ИМХО. Затем нашел bash-скрипт с именем SlickSlice (последний раз обновлялся в 2008 году, но отлично работал со вчерашнего дня). Установил и настроил по своему вкусу, используя файл конфигурации и сам скрипт. Кстати, скрипт использует ImageMagick и MPlayer.

Я сделал подробные инструкции и настройки после того, как я успешно использовал его. После успешной установки вы можете создать миниатюру временной шкалы видео с помощью простой команды:
slickslice -x "InputFile.mp4"(по умолчанию 4 столбца x 15 строк) или
slickslice -x "InputFile.mp4" -S 6x10(для 6 столбцов x 10 строк).

Он выводит как SLICKSLICED_InputFile.mp4.jpegи я настроил его для производства InputFile.mp4-screen.jpegпутем редактирования самого скрипта bash.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.