oCompress hoạt động thế nào
Điều gì xảy ra khi bạn thả tệp vào, cách tự kiểm chứng không có gì bị tải lên, và nén có mất dữ liệu hay không mất dữ liệu thực ra là gì.
Tóm tắt ngắn gọn
Khi bạn mở một trang công cụ, trình duyệt tải về trang web và một chương trình nhỏ, đó là bộ nén. Khi bạn thêm tệp, trình duyệt đọc tệp, bộ nén xử lý nó trên chính bộ xử lý của bạn, và kết quả được trả lại cho bạn dưới dạng tệp tải về. Không lúc nào tệp được gửi qua mạng. Toàn bộ quá trình diễn ra như sau:
- Tải. Trang và giao diện công cụ tải trước. Bộ máy cho từng loại tệp (ảnh, video và âm thanh, hoặc tài liệu) chỉ được tải về khi bạn thêm tệp phù hợp, nên bạn không bao giờ tải mã mà mình không dùng.
- Đọc. Trình duyệt chỉ cho trang quyền truy cập đúng những tệp bạn đã chọn, không gì khác trên thiết bị của bạn.
- Nén. Công việc chạy trong một Web Worker, một luồng nền của trình duyệt, nên trang vẫn phản hồi nhanh và bạn có thể hủy bất cứ lúc nào.
- Lưu. Tệp đã nén được tạo trong bộ nhớ (video lớn thì trong bộ nhớ riêng của trình duyệt) và được lưu qua cơ chế tải xuống thông thường của trình duyệt, từng tệp một hoặc thành một tệp ZIP.
Những gì chạy trong trình duyệt của bạn
Trình duyệt hiện đại có thể chạy mã đã biên dịch với tốc độ gần bằng phần mềm cài trên máy nhờ WebAssembly, và cho trang web truy cập các bộ mã hóa video phần cứng của thiết bị qua một giao diện gọi là WebCodecs. oCompress dùng cả hai:
- Ảnh: MozJPEG cho JPEG, OxiPNG và một bộ lượng tử hóa bảng màu cho PNG, bộ mã hóa WebP từ libwebp của Google, libavif cho AVIF, SVGO cho SVG, cùng các bộ giải mã và mã hóa chuyên dụng cho GIF và TIFF. Các codec JPEG, PNG, WebP và AVIF được biên dịch sang WebAssembly.
- Video và âm thanh: WebCodecs cùng thư viện Mediabunny để đọc và ghi các vùng chứa như MP4 và WebM. Việc mã hóa dùng bộ mã hóa phần cứng của chip đồ họa nếu có, vì vậy có thể nhanh ngay cả trong trình duyệt. Tệp MP3 được ghi bằng bộ mã hóa LAME và tệp FLAC bằng libFLAC, cả hai đều được biên dịch sang WebAssembly và chỉ tải khi cần.
- Tài liệu: mã của chính chúng tôi, dựa trên các thư viện PDF và ZIP mã nguồn mở, mở tệp PDF và Office, nén lại hình ảnh bên trong bằng các codec ảnh và ghi ra một tệp mới.
Mọi thư viện đi kèm đều là mã nguồn mở: phần lớn theo giấy phép dễ dãi như MIT, BSD và Apache 2.0, Mediabunny theo MPL 2.0, còn bộ mã hóa MP3 LAME theo LGPL dưới dạng một tệp riêng, có thể thay thế. Xem danh sách thư viện kèm phiên bản và giấy phép.
Cách tự kiểm chứng không có gì bị tải lên
Bạn không cần phải tin lời chúng tôi. Có hai phép thử đơn giản:
- Ngắt mạng. Mở một trang công cụ, nén một tệp để bộ máy được tải, rồi tắt Wi-Fi hoặc dữ liệu di động và nén một tệp khác cùng loại. Công cụ vẫn chạy, vì không có gì cần đến mạng.
- Theo dõi mạng. Trong Chrome, Edge hoặc Firefox, nhấn F12, mở tab Network (Mạng) và nén một tệp. Bạn sẽ thấy mã bộ nén được tải từ trang của chúng tôi, cùng các yêu cầu từ dịch vụ phân tích và quảng cáo, nhưng không có yêu cầu nào mang theo tệp của bạn. Một bức ảnh 10 MB sẽ hiện thành một lượt tải lên 10 MB; không hề có lượt nào như vậy.
Trang có gửi các sự kiện sử dụng ẩn danh đến Google Analytics, chẳng hạn "một tệp JPG vài megabyte đã được nén". Các sự kiện này chứa công cụ, loại tệp, cùng dung lượng, mức tiết kiệm và thời gian xử lý ở dạng khoảng ước lượng, không bao giờ chứa tên tệp hay nội dung tệp.
Nén không mất dữ liệu: cùng nội dung, ít byte hơn
Nén không mất dữ liệu tìm ra phần dư thừa, những thứ được lưu nhiều lần hoặc có thể dự đoán, và ghi chúng gọn hơn. Giải mã đảo ngược quá trình một cách chính xác. Ba ý tưởng xuất hiện trong hầu hết mọi định dạng không mất dữ liệu:
- Dự đoán. Các điểm ảnh lân cận trong ảnh hoặc các mẫu liên tiếp trong âm thanh thường giống nhau. Lưu phần chênh lệch nhỏ so với dự đoán thay vì toàn bộ giá trị sẽ để lại những con số phần lớn gần bằng 0. Bộ lọc PNG và bộ dự đoán tuyến tính của FLAC hoạt động theo cách này.
- Lặp lại. Các chuỗi lặp lại được thay bằng một tham chiếu ngắn đến bản trước đó. Đây là phần LZ77 của DEFLATE, dùng trong ZIP, PNG và tệp Office.
- Mã hóa entropy. Giá trị xuất hiện thường xuyên nhận mã ngắn, giá trị hiếm nhận mã dài (mã hóa Huffman hoặc mã hóa số học).
Nén không mất dữ liệu có một giới hạn tự nhiên: nhiễu ngẫu nhiên không thể dự đoán, nên một bức ảnh nhiều hạt hay một bản ghi nhiều tạp âm không bao giờ nhỏ đi nhiều nếu không chấp nhận mất dữ liệu. Đó cũng là lý do nén một tệp đã được nén, như ảnh JPEG trong tệp ZIP, hầu như không tiết kiệm được gì.
Nén có mất dữ liệu: bỏ đi những gì bạn sẽ không thấy thiếu
Codec có mất dữ liệu đi xa hơn bằng cách loại bỏ thông tin mà mắt và tai người hầu như không cảm nhận được. JPEG và WebP lưu màu ở độ phân giải thấp hơn độ sáng và làm tròn bỏ các chi tiết tần số cao li ti. MP3, AAC và Opus bỏ những âm thanh bị âm lớn hơn lấn át. Codec video như H.264 thỉnh thoảng lưu một hình đầy đủ, còn ở giữa chủ yếu lưu chuyển động và thay đổi.
Thiết lập chất lượng hoặc bitrate quyết định bao nhiêu bị loại bỏ. Ở mức vừa phải, mất mát rất khó nhận ra; đẩy quá xa thì các lỗi điển hình xuất hiện: ô vỡ và quầng sáng trong ảnh, tiếng kim loại hoặc như dưới nước trong âm thanh, nhòe hình ở các cảnh video chuyển động nhanh.
Công cụ cam kết gì và không cam kết gì
- Bạn không bao giờ nhận được tệp lớn hơn. Nếu kết quả không nhỏ hơn, công cụ trả lại bản gốc và báo rằng tệp đã được tối ưu.
- Tài liệu và tệp âm thanh cho ra đúng từng byte giống nhau với cùng tệp và cùng thiết lập; bộ mã hóa video phần cứng có thể chênh vài byte giữa các lần chạy.
- Chữ trong tài liệu vẫn là chữ; các trang không bao giờ bị biến thành ảnh.
- Siêu dữ liệu của ảnh như vị trí GPS bị xóa theo mặc định, còn hồ sơ màu và hướng xoay được giữ lại. Siêu dữ liệu video như vị trí, thiết bị và ngày giờ cũng bị xóa theo mặc định; âm thanh giữ thẻ thông tin và ảnh bìa trừ khi bạn tắt tùy chọn đó.
Điều chúng tôi không thể cam kết là một tỷ lệ phần trăm cụ thể. Mức tiết kiệm hoàn toàn phụ thuộc vào cách tệp được tạo ra: ảnh điện thoại hay PDF scan thường còn nhiều chỗ để giảm, còn tệp đã được tối ưu thì còn ít. Công cụ hiển thị chính xác dung lượng trước và sau của từng tệp.
Giới hạn của việc nén trong trình duyệt
Một thẻ trình duyệt là một môi trường cách ly với bộ nhớ hạn chế, và điều đó đặt ra ranh giới cho những gì khả thi. Công cụ nhận ảnh đến 200 MB và 100 megapixel, tệp PDF và Office đến 300 MB, video và âm thanh đến 4 GB trên máy tính (1 GB trên điện thoại), dù video 4K dài vẫn có thể không vừa bộ nhớ của một thẻ. Tốc độ phụ thuộc vào phần cứng: trong thử nghiệm của chúng tôi trên một máy tính Windows mạnh chạy Chrome, một phút video 1080p mất khoảng 20 giây và một bức ảnh 24 megapixel khoảng 2,5 giây; điện thoại có thể chậm hơn nhiều. Video và phần lớn thao tác chuyển đổi âm thanh cần WebCodecs, có trong Chrome, Edge, Opera bản hiện hành, Firefox 130+ và Safari 26+; WAV và AIFF vẫn có thể chuyển thành MP3, FLAC hoặc WAV ngay cả khi không có nó.
Một vài định dạng hoàn toàn không có bộ giải mã trong trình duyệt, như WMA, AVI và WMV, còn tệp Office nhị phân cũ không thể ghi lại an toàn. Với những định dạng này, công cụ giải thích các lựa chọn thay vì tạo ra một tệp có thể bị hỏng. Khi một tác vụ quá lớn với trình duyệt, một chương trình trên máy tính như HandBrake cho video hoặc LibreOffice cho tài liệu là lời khuyên trung thực.