Как я могу создать 30-секундный GIF из длинного случайного видео?

У меня есть сотни видео в папке, для которой я хочу сделать gif. Каждая длина видео отличается, но все видео составляют дольше, чем 30 секунд. Я хочу взять 10 3 вторых изображения gif от видео в течение видео. Например, если видео 25 минут длиной, 3-секундный зарегистрированный gif должен браться каждые 2.5 минуты (150 секунд).

Законченный gifs должен также иметь то же имя как видео, но заканчивающийся в .gif все видео являются .mp4

gifs должен быть 560x340

Было бы хорошо сделать это с одной командой к.

7
задан 21 March 2019 в 10:42

1 ответ

Шаги:

  1. Получите продолжительность с ffprobe.
  2. Используйте продолжительность в качестве значения в избранном фильтре.
  3. Создайте gif.
  4. Напишите сценарий всего.

Сценарий в качестве примера:

#!/bin/bash
mkdir 30gif
for f in *.mp4; do
  duration=$(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 "$f")
  ffmpeg -i "$f" -filter_complex "[0:v]select='lt(mod(t,${duration}/10),3)',setpts=N/(FRAME_RATE*TB),scale=560:340:force_original_aspect_ratio=decrease,pad=560:340:(ow-iw)/2:(oh-ih)/2,setsar=1,split[v0][v1];[v0]palettegen[p];[v1][p]paletteuse[v]" -map "[v]" "30gif/${f%.mp4}.gif"
done

Это выполняет Ваши много требований:

  • Произведите 30-секундное включение GIF из 3-секундных сегментов, одинаково охватывающих входную продолжительность
  • 560x340 выходной размер
  • Один (ffmpeg) команда
  • Используя удар для цикла, таким образом, можно автоматически преобразовать сотни видео
  • Выходное имя - то же как входное имя, но с .mp4, замененным .gif
9
ответ дан 23 November 2019 в 06:28

Другие вопросы по тегам:

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