J'ai des centaines de vidéos dans un dossier pour lequel je veux faire un gif. La durée de chaque vidéo est différente, mais toutes les vidéos durent plus de 30 secondes. Je veux prendre 10 images gif de 3 secondes à partir d'une vidéo au cours de la vidéo. Par exemple, si la vidéo dure 25 minutes, 3 secondes enregistré gif doit être pris toutes les 2,5 minutes (150 secondes).
Les gifs finis doivent également avoir le même nom que la vidéo mais se terminant par .gif toutes les vidéos sont .mp4
Les gifs devraient être 560x340
Ce serait bien de le faire avec une seule commande.
Pas:
ffprobe
.Exemple de script:
#!/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
Cela répond à vos nombreuses exigences:
ffmpeg
)