VideoKit

Nén GIF

Thu nhỏ ảnh GIF động quá nặng để đáp ứng giới hạn dung lượng của nhãn dán, tệp đính kèm diễn đàn, email và tốc độ tải trang

Ba hướng nén cùng lúc

Kích thước khung hình, số khung hình và chất lượng màu chỉnh riêng được — chỉ cần giảm kích thước một nửa là dung lượng thường còn khoảng một phần tư

Bỏ khung hình không đổi tốc độ phát

Thời gian của khung hình bị bỏ được chuyển sang khung hình liền kề, nên tổng thời lượng và nhịp phát giữ nguyên, không bị thành tua nhanh

Xử lý cục bộ, không tải lên

Toàn bộ quá trình giải mã và mã hóa lại chạy trong trình duyệt, tệp không rời khỏi thiết bị và không giới hạn dung lượng hay số lần dùng

Trường hợp sử dụng

  • Nhãn dán tùy chỉnh của WeChat giới hạn GIF ở mức 1MB và 240×240 — ảnh động vượt mức chỉ cần nén xong là thêm được ngay
  • Diễn đàn và các nền tảng cộng đồng đều giới hạn dung lượng tệp đính kèm và hình ảnh, ảnh GIF quay màn hình vài chục MB đơn giản là không tải lên được
  • Ảnh động minh họa thao tác trong tài liệu, README hay mô tả sản phẩm sau khi nén sẽ tải nhanh hơn, không làm người đọc phải chờ
  • Tệp đính kèm email thường bị giới hạn 10–25MB, nên ảnh động dài phải giảm dung lượng trước khi gửi đi

Vì sao GIF nặng đến vậy và có thể nén được những gì

GIF là định dạng từ năm 1987: mỗi khung hình chỉ dùng được tối đa 256 màu và không có nén liên khung như video hiện đại. Vì thế cùng một nội dung, lưu dưới dạng GIF thường nặng hơn MP4 hơn chục lần. Chỉ còn ba thứ có thể nén: kích thước khung hình, số khung hình và số màu trên mỗi khung hình.

Công cụ này dùng gifuct-js để giải mã GIF theo từng khung hình (đồng thời khôi phục mỗi khung thành ảnh hoàn chỉnh theo quy tắc disposal của GIF), sau đó dùng gif.js lượng tử hóa lại bảng màu và mã hóa đầu ra. Trong ba tham số, kích thước mang lại hiệu quả lớn nhất — giảm một nửa chiều rộng và chiều cao thì số điểm ảnh chỉ còn một phần tư; kế đến là bỏ bớt khung hình; chất lượng màu giảm ít hơn nhưng rất hữu ích khi bạn không muốn hy sinh kích thước. Toàn bộ tính toán diễn ra cục bộ trong trình duyệt.

Công cụ GIF liên quan

Nếu vẫn không thể nén xuống mức cần thiết, hãy cân nhắc đổi định dạng: chuyển ảnh động thành video sẽ nhẹ hơn hẳn một bậc — dùng GIF sang video. Ngược lại, muốn cắt một đoạn video thành ảnh động thì dùng Video sang GIF, muốn ghép nhiều ảnh thành ảnh động thì dùng Ảnh sang GIF, tạo xong quay lại trang này để nén.

Câu hỏi thường gặp

GIF có thể nén nhỏ đến mức nào?

Tùy vào tệp gốc và thiết lập. Kích thước là yếu tố hiệu quả nhất: giảm chiều rộng và chiều cao còn một nửa thì số điểm ảnh chỉ còn một phần tư, dung lượng thường về mức 25%–35% so với ban đầu. Nếu bỏ thêm một nửa số khung hình, phần lớn ảnh GIF còn khoảng 15% dung lượng gốc. Nếu chỉ hạ chất lượng màu mà giữ nguyên kích thước và khung hình, mức giảm thường là 10%–30%.

Bỏ bớt khung hình có làm ảnh động chạy nhanh hơn không?

Không. Thời gian hiển thị của khung hình bị bỏ sẽ được cộng vào khung hình giữ lại ngay trước đó, nên tổng thời lượng và tốc độ phát vẫn giữ nguyên, chỉ độ mượt giảm đi. Với ảnh GIF vốn đã ít khung hình, nên giữ lại toàn bộ.

Làm sao đưa GIF về dưới giới hạn dung lượng của nhãn dán?

Chẳng hạn nhãn dán tùy chỉnh của WeChat giới hạn mỗi tệp không quá 1MB và 240×240. Trước tiên hãy chọn mức kích thước sao cho chiều rộng và chiều cao đều dưới 240, bỏ một nửa số khung hình, để chất lượng màu ở mức «Cân bằng», rồi xem dung lượng ở khu vực kết quả. Nếu vẫn vượt, hãy đổi chất lượng màu sang «Nhẹ nhất» hoặc tiếp tục giảm kích thước.

Vì sao nén xong dung lượng lại tăng lên?

Một số ít ảnh GIF vốn đã được tối ưu rất mạnh — mỗi khung hình chỉ lưu một vùng thay đổi cực nhỏ — nên khi mã hóa lại, mỗi khung hình được ghi thành ảnh hoàn chỉnh và triệt tiêu phần tối ưu đó. Gặp trường hợp này, hãy đặt kích thước về 50% hoặc thấp hơn, hoặc bỏ một nửa số khung hình, dung lượng sẽ giảm trở lại.

File GIF của tôi có bị tải lên máy chủ không?

Không. Việc giải mã, thay đổi kích thước và mã hóa lại đều diễn ra cục bộ trong trình duyệt của bạn. Tệp GIF không rời khỏi thiết bị và không được tải lên bất kỳ đâu.

Nén ảnh GIF lớn có làm máy bị giật không?

Nén GIF phải giải mã rồi mã hóa lại từng khung hình, nên càng nhiều khung hình càng lâu; ảnh động vài trăm khung hình có thể mất khá nhiều thời gian trên điện thoại. Nếu mục tiêu chính là giảm dung lượng, việc hạ kích thước xuống 50% cũng rút ngắn đáng kể thời gian xử lý.