У меня есть сотни видео в папке, для которой я хочу сделать gif. Каждая длина видео отличается, но все видео составляют дольше, чем 30 секунд. Я хочу взять 10 3 вторых изображения gif от видео в течение видео. Например, если видео 25 минут длиной, 3-секундный зарегистрированный gif должен браться каждые 2.5 минуты (150 секунд).
Законченный gifs должен также иметь то же имя как видео, но заканчивающийся в .gif все видео являются .mp4
gifs должен быть 560x340
Было бы хорошо сделать это с одной командой к.
Шаги:
ffprobe
.Сценарий в качестве примера:
#!/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
Это выполняет Ваши много требований:
ffmpeg
) команда