Видео Миниатюры с помощью ffmpeg

Я ищу хороший короткий простой способ создать серию миниатюр для любого данного видеофайла. Я почти там использую ffmpeg, вот то, что я имею:

ffmpeg -i /tmp/video.avi -r 1 -ss 60 -r 1 foo-%03d.jpeg`

Единственная проблема состоит в том, что это делает снимок каждую секунду, и я хотел бы сделать его каждую минуту или около этого. Я пытался установить -r значение к 1/60 или .02 напрасно.

Для ссылки вот старый сценарий, который я использовал, это только работало на некоторые файлы:

#!/bin/bash
# grab a screenshot every 60 seconds
file=$1
orig_dir=`pwd`
mins=`exiftool "$file" | grep "Duration" | awk -F : '{print $2}' | grep --only-matching '[0-9]*'`
dir="$file-screenshots"
mkdir "$dir"
cd "$dir"
mplayer -vo png -vf screenshot -sstep 60 -frames $mins -ao null "../$file"
cd "$orig_dir"

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

3
задан 10.05.2013, 22:29

1 ответ

См. ffmpeg страницу справочника. Вы хотите -vframes:

-vframes число
Определите номер видеокадров для записи.

Также посмотрите этот пример кого-то делающего то же самое. Исходное сообщение отмечает это -r кажется, не работает правильно с аргументами меньше чем один. Вместо этого предложение состоит в том, чтобы использовать этот вид командной строки для захвата одного кадра (где X проходит некоторое время искать вперед в файле):

ffmpeg -ss X -i input.movie.file -an -vframes 1 ouput.png

Затем используйте сценарии оболочки, чтобы циклично выполнить это и автоматически сгенерировать X на основе (a) сколько кадров Вы хотите захватить и (b) сколько времени видео. Так как Ваш старый сценарий в качестве примера уже находит (b), (a) единственный необходимый вход:

# generate NFRAMES frames in a movie 90 minutes long

mins=$(exiftool "$file" | grep "Duration" | awk -F : '{print $2}' | grep --only-matching '[0-9]*')
dir="$file-screenshots"
mkdir "$dir"

for i in $(seq 1 $NFRAMES);
do
  ffmpeg -ss $(echo "$i * $mins" | bc -l) -i "$file" -an -vframes 1 "$dir/$i.png";
done
3
ответ дан 08.12.2019, 01:10

Теги

Похожие вопросы