Сделать миниатюру из видео


11

Как я могу сделать простой захват из видео. Желательно из командной строки?

Идея: сделать 9 снимков за 9 даже размещенных (на временной шкале) времен и сохранить их в формате JPG

Пример:

Movie length = 10 min
T1= snapshot of 1 min
T2= snapshot of 2 min
......
T9= snapshot of 9 min
   |   |
 T1| T2| T3
---+---+---
 T4| T5| T6
---+---+---
 T7| T8| T9
   |   |

Какая лучшая программа для этого? Есть ли программы с открытым исходным кодом?

Ответы:


5

ffmpeg - превосходный инструмент с открытым исходным кодом для манипулирования видео, включая извлечение кадров.

Чтобы извлечь отдельный кадр из определенной временной метки, вы можете использовать команду, например

ffmpeg -i video.avi -r 1  -t 00:01:00 -f image2 image%05d.png

-r это частота кадров. Вы также можете использовать команду, как

ffmpeg -i video.avi -r 1/1440 -f image2 image%05d.png

чтобы получить один кадр каждую минуту (при условии видео 24FPS). % 05d означает, что порядковый номер каждого миниатюрного изображения должен быть отформатирован с использованием 5 цифр.

Если вы хотите объединить изображения как монтаж (вашу сетку), вы можете использовать imagemagick после извлечения кадров с помощью ffmpeg.


2

Это не программа командной строки, но вы также можете использовать qframecatcher .

Для Ubuntu / Debian следующие требования: sudo apt-get install libqt4-dev libxine-dev build-essential

wget http://download.berlios.de/qframecatcher/qframecatcher-0.4.1.tar.gz
tar xzf qframecatcher-0.4.1.tar.gz
cd qframecatcher/src
qmake
make
./qframecatcher

Источник: http://blog.radevic.com/2008/06/how-to-create-movie-or-video-frame.html


1

vcsi - это инструмент командной строки, написанный на Python, который можно использовать для создания сетки снимков размером 3 на 3 с помощью следующей команды:

vcsi -g 3x3 video.mkv -o output.jpg

0

Мой вариант использования - это всего лишь одна миниатюра из видео, просто один файл, который можно использовать в качестве <video>постера тега. Итак, что бы это был быстрый способ сделать это?

С помощью ffmpegвы можете сделать это:

ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

Это даст вам кадр около секунды 123из video.mp4сохраненных как poster.jpg.

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

Чтобы сохранить наши зависимости на низком уровне, мы будем использовать для этого сам ffmpeg:

# Get the time as h:m:s (non-padded)
l=$(ffmpeg -i video.mp4 2>&1 | grep Duration: | sed -r 's/\..*//;s/.*: //;s/0([0-9])/\1/g')
# Convert that into seconds
s=$((($(cut -f1 -d: <<< $l) * 60 + $(cut -f2 -d: <<< $l)) * 60 + $(cut -f3 -d: <<< $l)))
# Get frame at 25% as the thumbnail
ffmpeg -ss $((s / 4)) -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

25% видео кажется обычным выбором, но вы также можете сделать это 33% или 50%.

Вот скрипт, который делает это .

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