Video sang GIF

Video sang GIF - Trình tạo GIF động trực tuyến — Biến một đoạn video thành GIF động lặp với tốc độ khung hình, chiều rộng và chất lượng bảng màu bạn chọn. GIF là định dạng mở lâu đời, được hầu hết thiết bị và nền tảng trò chuyện hiểu. Mọi xử lý được thực hiện cục bộ trong trình duyệt của bạn, tệp không bao giờ được tải lên máy chủ.
Đầu vào được hỗ trợ: WebM, OGV (Ogg Video), MKV, AVI, GIF, WebP, APNG và các định dạng video phổ biến khác. Mọi thứ được chuyển đổi cục bộ trong trình duyệt của bạn; tệp không bao giờ được tải lên máy chủ.
Lần sử dụng đầu tiên sẽ tải một engine xử lý video khoảng 30MB vào trình duyệt hiện tại. Engine được lưu đệm và tái sử dụng sau đó, vì vậy vui lòng kiên nhẫn.
🎥
Nhấn để chọn hoặc kéo và thả một tệp video
Hỗ trợ WebM, OGV, MKV, AVI, GIF và các định dạng video phổ biến khác; nên dưới 500MB
Tốc độ khung hình: cao hơn = mượt hơn nhưng file lớn hơn
Chiều rộng tối đa: tự động co để giữ tỷ lệ khung hình
Số màu bảng màu: ít màu hơn = file nhỏ hơn, mất một chút chất lượng
Chuyển đổi GIF động: trích xuất khung ở tốc độ khung hình đã chọn, co về chiều rộng tối đa, và dựng bảng màu đã tối ưu cho vòng lặp. Bản âm thanh (nếu có) bị bỏ.
Vì sao GIF lại lớn đến vậy? Bảng màu, rắc điểm và định dạng 1987 làm nhiệm vụ video

GIF (Graphics Interchange Format, 1987) được thiết kế như một định dạng ảnh tĩnh với một chút thưởng hoạt ảnh, và điều đó lộ rõ. Hai thuộc tính điều khiển mọi thứ trên trang này: mỗi khung giới hạn ở 256 màu chọn từ một bảng màu được lưu, và các khung được nén bằng LZW — một bộ nén byte đa dụng từ thời zip, không hề biết rằng một video đang được lưu. Không có bù chuyển động, không có phép tính kiểu "khung này gần như giống khung trước" như các codec video thực; mỗi khung về cơ bản là một bức ảnh được nén riêng lẻ. Hiểu bảng màu là chìa khóa để có GIF nhỏ mà đẹp.

Năm sự thật làm nền cho phần còn lại của trang:
• mỗi khung chứa tối đa 256 màu (28) lấy từ một bảng màu; video màu thật phải được lượng tử hóa xuống
• rắc điểm giả các màu thiếu bằng cách rải các chấm của các mục bảng màu lân cận — file lớn hơn, chuyển sắc mượt hơn
• thời gian khung được lưu theo đơn vị 10 ms: 10 fps → độ trễ 10 (100 ms); mức sàn thực tế là độ trễ 2 (20 ms = 50 fps)
• các khung được nén LZW độc lập — không nén giữa các khung là kẻ làm phình dung lượng số một
• ít màu hơn, ít khung hơn, kích thước nhỏ hơn: mỗi núm vặn đều làm giảm đầu vào LZW, và hiệu ứng được nhân lên
Bảng 256 màu và hiện tượng dải màu

Một điểm ảnh video màu thật cần 24 bit (16,7 triệu khả năng); một điểm ảnh GIF là một chỉ số 8 bit vào bảng tối đa 256 màu. Vì vậy chuyển video sang GIF phải chạy lượng tử hóa bảng màu: chọn 256 màu đại diện tốt nhất cho nội dung, rồi kéo mọi điểm ảnh về màu gần nhất. Chuyển sắc phải trả giá — một bầu trời cần 4.000 màu xanh hơi khác nhau chỉ nhận được 30 màu, và dải chuyển mượt sụp đổ thành các sọc nhìn thấy được gọi là hiện tượng dải màu. Đồ họa phẳng tương phản cao (logo, sprite trò chơi, biểu đồ) hầu như không nhận ra; ảnh và video chịu thiệt nhiều nhất. Chất lượng bảng màu của bộ chuyển đổi là phần lớn chất lượng đầu ra của nó.

Rắc điểm: đổi nhiễu lấy độ mượt

Rắc điểm là cách sửa cổ điển cho hiện tượng dải màu: thay vì kéo mỗi điểm ảnh về màu gần nhất trong bảng, rải một hỗn hợp của hai màu gần nhất để trung bình trên một vùng nhỏ khớp với tông gốc. Chuyển sắc trông mượt hơn hẳn — các sọc tan thành nhiễu mịn mà mắt hòa vào ở khoảng cách xem bình thường. Cái giá là dung lượng file: nhiễu là chi tiết tần số cao, và LZW nén các sọc đều tốt hơn nhiều so với các chấm rải rác. Đó là sự đánh đổi GIF cơ bản mà trang này phơi bày: tắt rắc điểm để file nhỏ hơn nhưng có dải màu, bật để chuyển sắc mượt với chi phí dung lượng cao hơn.

Thời gian khung: sàn 20 ms

GIF lưu độ trễ giữa các khung theo đơn vị 1/100 giây. 10 fps là độ trễ 10 (100 ms mỗi khung); 20 fps là độ trễ 5 (50 ms). Giá trị hữu ích nhỏ nhất là 2 (20 ms, tức 50 fps), và trong thực tế hầu hết trình duyệt kéo mọi giá trị dưới mức đó lên 100 ms — xin 60 fps sẽ lặng lẽ cho ra phát chậm hơn. Trên mức sàn, mỗi lần tăng fps nhân số khung lên: 15 fps → 50 fps cho cùng một đoạn clip nghĩa là hơn ba lần số khung, và dung lượng GIF gần như tỷ lệ tuyến tính với số khung. Một đoạn 10 giây ở 15 fps là 150 khung; ở 50 fps sẽ là 500.

Vì sao GIF phình ra so với video thật

Các codec video hiện đại tiêu phần lớn bit để mô tả sự thay đổi giữa các khung — một máy quay khóa vị trí khiến các khung sau gần như không tốn gì. LZW của GIF xem mỗi khung như một ảnh mới (mẹo giữa các khung duy nhất của nó là một cờ trong suốt bỏ qua các điểm ảnh giống khung trước, và điều này giúp ít hơn nhiều so với bù chuyển động thật). Quy tắc ngón tay cái: với cùng một đoạn clip, hãy kỳ vọng một GIF lớn gấp nhiều lần một WebM được mã hóa tốt ở cùng độ phân giải. Nếu nơi nhận chấp nhận video thật, hãy ưu tiên nó; GIF chỉ thắng khi tính phổ dụng và hành vi tự phát/lặp của nó quan trọng.

Những hiểu lầm phổ biến
  • "GIF đã được nén, nên nó hiệu quả cho video." LZW là bộ nén mức byte từ năm 1987, không có mô hình chuyển động; với cảnh đang chuyển động, nó là định dạng phổ biến trên web kém hiệu quả nhất.
  • "Nguồn của tôi 60 fps, nên GIF cũng phải vậy." Mức sàn độ trễ 20 ms giới hạn GIF ở 50 fps, và trình duyệt kéo các độ trễ dưới mức sàn lên. Độ trung thành từng khung không phải thứ GIF có thể đảm bảo.
  • "Rắc điểm chỉ là nhiễu nên nên tắt đi." Đó là một sự đánh đổi chất lượng/dung lượng có chủ đích: tắt thì file nhỏ hơn nhưng có dải màu, bật thì chuyển sắc mượt nhưng tốn byte.
  • "Ít màu thì luôn trông tệ." Với đồ họa phẳng và hoạt ảnh tương phản cao, thậm chí 64 màu có thể trông giống hệt 256 — và làm file nhỏ hơn nữa.

Công cụ liên quan: Video sang WebP/APNG cho hoạt ảnh màu thật với nén thật, GIF sang Video cho chiều ngược lại (bảng màu sang màu thật), Video sang WebM cho cùng đoạn clip dưới dạng video thật, và Bộ cắt video để cắt nguồn trước khi chuyển đổi.