स्वचालित रूप से .gif फ़ाइल को संपीड़ित करने का कोई तरीका?


11

मेरे पास 2.0 mb gif है जिसे मैं छोटा करना चाहता हूं, अधिमानतः कुछ फ्रेम को गिराकर।

क्या एक कमांड लाइन उपयोगिता या एक प्रोग्राम है जो इसे मेरे लिए स्वचालित रूप से करेगा?

धन्यवाद।


आप वेब प्रारूप में देखना चाहते हैं: यह एक अधिक अनुकूलित gif जैसा है!

जवाबों:


8

ImageOptim अपनी Gif संपीड़न के लिए Gifsicle का उपयोग करता है । जहां तक ​​मुझे पता है, यह काफी अच्छी तरह से काम करता है (मैं आमतौर पर इन दिनों जीआईएफ का उपयोग नहीं करता हूं)। उनकी साइट से:

अपने एनिमेशन का अनुकूलन! यह प्रत्येक फ़्रेम के केवल परिवर्तित भाग को संग्रहीत करता है, और आपके GIF को मौलिक रूप से सिकोड़ सकता है। आप उन्हें और भी छोटा बनाने के लिए पारदर्शिता का उपयोग कर सकते हैं। Gifsicle का ऑप्टिमाइज़र बहुत शक्तिशाली है, और आमतौर पर सर्वश्रेष्ठ वाणिज्यिक ऑप्टिमाइज़र के एक जोड़े बाइट के भीतर एनिमेशन को कम कर देता है।


6

आप जीआईएफ का उपयोग जीआईएफ से कुछ फ्रेम को हटाने के लिए कर सकते हैं औरजिम्प स्थापित करें साथ ही फाइल को फिर से जीआईएफ में सेव करके फिर से ऑप्टिमाइज़ कर सकते हैं।


जिम्प में सेव करने पर आप फाइल को दोबारा कैसे ऑप्टिमाइज़ करते हैं?
orchichiro

2

मैं ezgif.com/optimize का उपयोग करता हूं , क्योंकि GIMP और अन्य उपकरण इस काम में अच्छे नहीं हैं। अंतर यह है कि ezgif एक gifsicleमॉडिफिकेशन (एक lossyध्वज के साथ ) का उपयोग करता है , aptसंस्करण पर उपलब्ध नहीं है । यहां 1.82.1 रिलीज देखें ( /usr/bin/gifsicleअपने सिस्टम के लिए उपयुक्त के साथ बदलें (बाइनरी एंडिंग के साथ -static)।

एक पूर्ण gif अनुकूलन वर्कफ़्लो पर मेरे नोट्स यहाँ हैं

संपादित करें : वर्तमान स्क्रिप्ट जो उपयोग में रखी गई है, यहाँ GitHub पर अपडेट की जाएगी

मैं यह वर्णन नहीं करूँगा कि मैं यह सब यहाँ कैसे करता हूँ, सामान्य विचार कुछ बाश कार्य / उपनाम है:

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"
}

--lossyझंडा तो अच्छी गुणवत्ता के लिए, 200 30 से एक पूर्णांक लेता है:

gifsicle -O3 --lossy=30 -o output.gif input.gif

उपरोक्त फ़ंक्शन के साथ gifoptआप मामलों को सरल बना सकते हैं, क्योंकि यह 30 तक चूकता है

gifopt input.gif

... आउटपुट स्वचालित रूप से नाम दिया जाएगा input-opt.gif। आप --batchइन-प्लेस संपादन के लिए ध्वज का उपयोग करने के लिए फ़ंक्शन बदल सकते हैं, लेकिन मैं आपकी शुरुआती सामग्री को अधिलेखित करने की अनुशंसा नहीं करूंगा।

यह फंक्शन _reduced_xफ्रेम काउंट रिडक्शन फंक्शन द्वारा जोड़े गए किसी भी प्रत्यय को हटाने का काम करता है , यानी आपके पास एक इंटरमीडिएट फाइल हो सकती है input_reduced_x2.gif(एक ऐसा कदम जो हर दूसरे फ्रेम को ड्रॉप करके फाइल साइज को आधा कर देगा)।

यदि आपने ऐसा किया है कि गति बदल सकती है, gifspeedchange input-opt.gif 5उदाहरण के लिए, 50ms फ्रेम देरी का उपयोग करने के लिए तय किया गया है ।


1

आप अपनी .gif फ़ाइल को Gimp पर आसानी से ऑप्टिमाइज़ कर सकते हैं।

बस .gif के रूप में सहेजें और फिर संपीड़ित करें या .jpeg या अन्य के रूप में अन्य एक्सटेंशन में सहेज सकते हैं।


1
आप जिम्प में कैसे संपीड़ित करते हैं?
orchichiro
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.