Wie kann ich aus einem langen zufälligen Video ein 30-Sekunden-GIF erstellen?

8

Ich habe Hunderte von Videos in einem Ordner, für den ich ein GIF erstellen möchte. Jede Videolänge ist unterschiedlich, aber alle Videos sind länger als 30 Sekunden. Ich möchte im Verlauf des Videos 10 3-Sekunden-GIF-Bilder aus einem Video aufnehmen. Zum Beispiel , wenn das Video ist 25 Minuten lang ein 3 Sekunden aufgezeichnet gif sollten alle 2,5 Minuten (150 Sekunden) genommen werden.

Die fertigen Gifs müssen ebenfalls den gleichen Namen wie das Video haben, enden jedoch mit .gif. Alle Videos sind .mp4

Die Gifs sollten 560x340 sein

Es wäre schön, dies mit einem Befehl zu tun.

Toodarday
quelle

Antworten:

9

Schritte:

  1. Holen Sie sich die Dauer mitffprobe .
  2. Verwenden Sie die Dauer als Wert im Auswahlfilter .
  3. Gif erstellen .
  4. Alles schreiben.

Beispielskript:

#!/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

Dies erfüllt Ihre vielen Anforderungen:

  • Ausgabe 30 Sekunden GIF, bestehend aus 3 Sekunden Segmenten, die sich gleichermaßen über die Eingabedauer erstrecken
  • 560x340 Ausgabegröße
  • Ein ( ffmpeg) Befehl
  • Verwenden Sie eine Bash for-Schleife, damit Sie automatisch Hunderte von Videos konvertieren können
  • Der Ausgabename ist der gleiche wie der Eingabename, jedoch wird .mp4 durch .gif ersetzt
llogan
quelle
Eine etwas späte Antwort, da ich dachte, dass dies beim ersten Mal funktioniert. Aber es zeichnet nur die ersten 3 Sekunden (1/10 des Videos in) auf und friert für die verbleibenden 27 Sekunden ein.
Toodarday
@ Goodarday Funktioniert für mich. Verwenden Sie eine Pastebin-Site, um einen Link bereitzustellen, der Ihren Befehl und das vollständige Protokoll anzeigt.
llogan