มีวิธีใดในการบีบอัดไฟล์. gif โดยอัตโนมัติ


11

ฉันมี 2.0 mb gif ฉันต้องการที่จะทำให้เล็กลงโดยเฉพาะอย่างยิ่งโดยการวางบางเฟรม

มียูทิลิตีบรรทัดคำสั่งหรือโปรแกรมที่จะทำเพื่อฉันโดยอัตโนมัติหรือไม่?

ขอบคุณ


คุณอาจต้องการดูในรูปแบบ webm: มันเป็น gif ที่เหมาะที่สุด!

คำตอบ:


8

ImageOptim ใช้Gifsicleสำหรับการบีบอัด Gif เท่าที่ฉันรู้มันใช้งานได้ค่อนข้างดี (โดยทั่วไปฉันไม่ได้ใช้ Gif ในปัจจุบัน) จากเว็บไซต์ของพวกเขา:

ปรับปรุงภาพเคลื่อนไหวของคุณ! วิธีนี้จะเก็บเฉพาะส่วนที่เปลี่ยนแปลงของแต่ละเฟรมและสามารถลดขนาด GIF ของคุณได้อย่างรุนแรง คุณยังสามารถใช้ความโปร่งใสเพื่อทำให้มีขนาดเล็กลง เครื่องมือเพิ่มประสิทธิภาพของ Gifsicle นั้นทรงพลังมากและมักจะลดการเคลื่อนไหวให้น้อยที่สุดภายในไม่กี่ไบต์ของเครื่องมือเพิ่มประสิทธิภาพเชิงพาณิชย์ที่ดีที่สุด


6

คุณสามารถใช้Gimpติดตั้ง gimpเพื่อลบเฟรมบางส่วนออกจาก GIF รวมถึงเพิ่มประสิทธิภาพไฟล์อีกครั้งด้วยการบันทึกกลับเป็น GIF อีกครั้ง


คุณจะเพิ่มประสิทธิภาพไฟล์อีกครั้งในการบันทึกใน Gimp ได้อย่างไร
orschiro

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ธงจะใช้เวลาเป็นจำนวนเต็ม 30-200 เพื่อให้คุณภาพที่ดีที่สุด:

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
คุณบีบอัดใน Gimp อย่างไร
orschiro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.