Vielleicht möchten Sie sich das WebM-Format ansehen: Es ist wie ein optimiertes GIF!
Antworten:
8
ImageOptim verwendet Gifsicle für die Gif-Komprimierung. Soweit ich weiß, funktioniert es recht gut (ich benutze Gif heutzutage im Allgemeinen nicht). Von ihrer Website:
Optimieren Sie Ihre Animationen! Dadurch wird nur der geänderte Teil jedes Frames gespeichert und Ihre GIFs können radikal verkleinert werden. Sie können Transparenz auch verwenden, um sie noch kleiner zu machen. Der Optimierer von Gifsicle ist ziemlich leistungsfähig und reduziert Animationen normalerweise auf wenige Bytes der besten kommerziellen Optimierer.
Wie optimieren Sie die Datei beim Speichern in Gimp neu?
Orschiro
2
Ich benutze ezgif.com/optimize , da GIMP und andere Tools in diesem Job nicht gut sind. Der Unterschied besteht darin, dass ezgif eine gifsicleÄnderung (mit einem lossyFlag) verwendet, die in der aptVersion nicht verfügbar ist . Siehe Release 1.82.1 hier (ersetzen Sie es /usr/bin/gifsicledurch das für Ihr System geeignete (die binäre Endung mit -static).
Meine Notizen zu einem vollständigen Workflow zur GIF-Optimierung finden Sie hier .
Bearbeiten : aktuelle Skript als in Gebrauch gehalten wird auf GitHub aktualisiert werden hier
Ich werde hier nicht beschreiben, wie ich das alles mache. Die allgemeine Idee sind ein paar Bash-Funktionen / Aliase:
function gifopt() {
# args: $input_file ($loss_level)
if [ -z "$2" ]
then
# use default of 30
local loss_level=30
elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ]
then
local loss_level=$2
else
echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2
exit 1
fi
local inputgif="${1?'Missing input file parameter'}"
local gifname="$(basename $inputgif .gif)"
local basegifname=$(echo "$gifname" | sed 's/_reduced_x[0-9]//g')
local outputgif="$basegifname-opt.gif"
gifsicle -O3 --lossy="$loss_level" -o "$outputgif" "$inputgif";
local oldfilesize=$(du -h $inputgif | cut -f1)
local newfilesize=$(du -h $outputgif | cut -f1)
echo "File reduced from $oldfilesize to $newfilesize as $outputgif"
}
function gifopt() {
# args: $input_file ($loss_level)
if [ -z "$2" ]
then
# use default of 30
loss_level=30
elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ]
then
loss_level=$2
else
echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2
exit 1
fi
local inputgif="${1?'Missing input file parameter'}"
local gifname="$(basename $inputgif .gif)"
local basegifname=$(echo "$gifname" | sed 's/_reduced_x[0-9]//g')
local outputgif="$basegifname-opt.gif"
gifsicle -O3 --lossy="$loss_level" -o "$outputgif" "$inputgif";
local oldfilesize=$(du -h $inputgif | cut -f1)
local newfilesize=$(du -h $outputgif | cut -f1)
echo "File reduced from $oldfilesize to $newfilesize as $outputgif"
}
function gifspeedchange() {
# args: $gif_path $frame_delay (1 = 0.1s)
local orig_gif="${1?'Missing GIF filename parameter'}"
local frame_delay=${2?'Missing frame delay parameter'}
gifsicle --batch --delay $frame_delay $orig_gif
local newframerate=$(echo "$frame_delay*10" | bc)
echo "new GIF frame rate: $newframerate ms"
}
Das --lossyFlag nimmt eine Ganzzahl von 30 bis 200 an, um die beste Qualität zu erzielen:
gifsicle -O3 --lossy=30 -o output.gif input.gif
Mit der obigen Funktion können gifoptSie die Dinge vereinfachen, da standardmäßig 30 verwendet wird
gifopt input.gif
... würde die Ausgabe automatisch benannt input-opt.gif. Sie können die Funktion ändern, um das --batchFlag für die direkte Bearbeitung zu verwenden, aber ich würde nicht empfehlen, Ihr Ausgangsmaterial zu überschreiben.
Diese Funktion entfernt auch alle _reduced_xSuffixe, die durch die Frame-Count-Reduction-Funktion hinzugefügt wurden, dh Sie könnten eine Zwischendatei haben input_reduced_x2.gif(ein Schritt, der die Dateigröße halbiert, indem jeder zweite Frame gelöscht wird).
Wenn Sie dies getan haben, kann sich die Geschwindigkeit ändern, gifspeedchange input-opt.gif 5z. B. um eine Bildverzögerung von 50 ms zu verwenden.
Antworten:
ImageOptim verwendet Gifsicle für die Gif-Komprimierung. Soweit ich weiß, funktioniert es recht gut (ich benutze Gif heutzutage im Allgemeinen nicht). Von ihrer Website:
quelle
Mit dem Gimp können Sie einige Frames aus dem GIF entfernen und die Datei erneut optimieren, indem Sie sie erneut in einem GIF speichern.
quelle
Ich benutze ezgif.com/optimize , da GIMP und andere Tools in diesem Job nicht gut sind. Der Unterschied besteht darin, dass ezgif eine
gifsicle
Änderung (mit einemlossy
Flag) verwendet, die in derapt
Version nicht verfügbar ist . Siehe Release 1.82.1 hier (ersetzen Sie es/usr/bin/gifsicle
durch das für Ihr System geeignete (die binäre Endung mit-static
).Meine Notizen zu einem vollständigen Workflow zur GIF-Optimierung finden Sie hier .
Bearbeiten : aktuelle Skript als in Gebrauch gehalten wird auf GitHub aktualisiert werden hier
Ich werde hier nicht beschreiben, wie ich das alles mache. Die allgemeine Idee sind ein paar Bash-Funktionen / Aliase:
Das
--lossy
Flag nimmt eine Ganzzahl von 30 bis 200 an, um die beste Qualität zu erzielen:Mit der obigen Funktion können
gifopt
Sie die Dinge vereinfachen, da standardmäßig 30 verwendet wird... würde die Ausgabe automatisch benannt
input-opt.gif
. Sie können die Funktion ändern, um das--batch
Flag für die direkte Bearbeitung zu verwenden, aber ich würde nicht empfehlen, Ihr Ausgangsmaterial zu überschreiben.Diese Funktion entfernt auch alle
_reduced_x
Suffixe, die durch die Frame-Count-Reduction-Funktion hinzugefügt wurden, dh Sie könnten eine Zwischendatei habeninput_reduced_x2.gif
(ein Schritt, der die Dateigröße halbiert, indem jeder zweite Frame gelöscht wird).Wenn Sie dies getan haben, kann sich die Geschwindigkeit ändern,
gifspeedchange input-opt.gif 5
z. B. um eine Bildverzögerung von 50 ms zu verwenden.quelle
Sie können Ihre GIF-Datei auf Gimp einfach optimieren.
Speichern Sie einfach als .gif und komprimieren Sie dann oder Sie können in einer anderen Erweiterung als .jpeg oder eine andere speichern.
quelle