Nén tệp hoạt động như thế nào?

Mục lục:

Nén tệp hoạt động như thế nào?
Nén tệp hoạt động như thế nào?

Video: Nén tệp hoạt động như thế nào?

Video: Nén tệp hoạt động như thế nào?
Video: CÁCH ĐỂ HIỆN THÔNG SỐ TRONG GAME: Theo Dõi Nhiệt Độ, Xung Nhịp Phần Cứng Với MSI Afterburner - YouTube 2024, Tháng tư
Anonim
Các kĩ sư phần mềm đã luôn phát triển những cách thức mới để gắn nhiều dữ liệu vào một không gian nhỏ. Đó là sự thật khi ổ đĩa cứng của chúng tôi rất nhỏ, và sự ra đời của Internet đã làm cho nó trở nên quan trọng hơn. Nén tệp đóng vai trò quan trọng trong việc kết nối chúng tôi, cho phép chúng tôi gửi ít dữ liệu hơn xuống để chúng tôi có thể tải xuống nhanh hơn và phù hợp với nhiều kết nối hơn vào mạng bận.
Các kĩ sư phần mềm đã luôn phát triển những cách thức mới để gắn nhiều dữ liệu vào một không gian nhỏ. Đó là sự thật khi ổ đĩa cứng của chúng tôi rất nhỏ, và sự ra đời của Internet đã làm cho nó trở nên quan trọng hơn. Nén tệp đóng vai trò quan trọng trong việc kết nối chúng tôi, cho phép chúng tôi gửi ít dữ liệu hơn xuống để chúng tôi có thể tải xuống nhanh hơn và phù hợp với nhiều kết nối hơn vào mạng bận.

Vì vậy, làm thế nào nó hoạt động?

Để trả lời câu hỏi đó sẽ liên quan đến việc giải thích một số bài toán rất phức tạp, chắc chắn hơn chúng ta có thể đề cập đến trong bài viết này, nhưng bạn không cần phải hiểu chính xác cách hoạt động toán học để hiểu những điều cơ bản.

Các thư viện nén văn bản phổ biến nhất dựa trên hai thuật toán nén, sử dụng cả hai cùng một lúc để đạt được tỷ lệ nén rất cao. Hai thuật toán này là “LZ77” và “mã hóa Huffman.” Mã hóa Huffman khá phức tạp và chúng tôi sẽ không đi sâu vào chi tiết ở đây. Chủ yếu, nó sử dụng một số toán học ưa thích để gán ngắn hơnmã nhị phân cho từng chữ cái, thu nhỏ kích thước tệp trong quy trình. Nếu bạn muốn tìm hiểu thêm về nó, hãy xem bài viết này về cách mã hoạt động, hoặc giải thích này bởi Computerphile.

LZ77, mặt khác, là tương đối đơn giản và là những gì chúng ta sẽ nói về ở đây. Nó tìm cách loại bỏ các từ trùng lặp và thay thế chúng bằng một "khóa" nhỏ hơn đại diện cho từ đó.

Lấy đoạn văn bản ngắn này, ví dụ:

Thuật toán LZ77 sẽ xem xét văn bản này, nhận ra rằng nó lặp lại "howtogeek" ba lần, và thay đổi nó thành:
Thuật toán LZ77 sẽ xem xét văn bản này, nhận ra rằng nó lặp lại "howtogeek" ba lần, và thay đổi nó thành:
Sau đó, khi nó muốn đọc lại văn bản, nó sẽ thay thế mọi thể hiện của (h) bằng "howtogeek", đưa chúng ta trở lại cụm từ gốc.
Sau đó, khi nó muốn đọc lại văn bản, nó sẽ thay thế mọi thể hiện của (h) bằng "howtogeek", đưa chúng ta trở lại cụm từ gốc.

Chúng tôi gọi nén như thế này "lossless" - dữ liệu bạn đưa vào giống như dữ liệu bạn nhận được. Không có gì bị mất.

Trên thực tế, LZ77 không sử dụng danh sách khóa, mà thay vào đó thay thế lần xuất hiện thứ hai và thứ ba bằng một liên kết trong bộ nhớ:

Vì vậy, bây giờ, khi nó được đến (h), nó sẽ nhìn lại "howtogeek" và đọc mà thay vào đó.
Vì vậy, bây giờ, khi nó được đến (h), nó sẽ nhìn lại "howtogeek" và đọc mà thay vào đó.

Nếu bạn quan tâm đến một lời giải thích chi tiết hơn, video này từ Computerphile là khá hữu ích.

Bây giờ, đây là một ví dụ lý tưởng. Trong thực tế, hầu hết văn bản được nén bằng các phím nhỏ như chỉ một vài ký tự. Ví dụ, từ "the" sẽ được nén ngay cả khi nó xuất hiện trong các từ như "có", "của họ", và "sau đó." Với văn bản lặp đi lặp lại, bạn có thể nhận được một số tỷ lệ nén điên. Lấy tập tin văn bản này với từ "howtogeek" lặp đi lặp lại 100 lần. Tệp văn bản gốc có kích thước ba kilobyte. Khi nén, mặc dù, nó chỉ chiếm 158 byte. Đó là nén gần 95%.

Bây giờ rõ ràng, đó là một ví dụ khá khắc nghiệt vì chúng tôi chỉ có cùng một từ lặp đi lặp lại. Nói chung, bạn có thể sẽ nhận được khoảng 30-40% nén bằng cách sử dụng định dạng nén như ZIP trên một tệp chủ yếu là văn bản.
Bây giờ rõ ràng, đó là một ví dụ khá khắc nghiệt vì chúng tôi chỉ có cùng một từ lặp đi lặp lại. Nói chung, bạn có thể sẽ nhận được khoảng 30-40% nén bằng cách sử dụng định dạng nén như ZIP trên một tệp chủ yếu là văn bản.

Thuật toán LZ77 này áp dụng cho tất cả các dữ liệu nhị phân, bằng cách này, và không chỉ là văn bản, mặc dù văn bản nói chung là dễ dàng hơn để nén do có bao nhiêu từ lặp đi lặp lại hầu hết các ngôn ngữ sử dụng. Ví dụ, một ngôn ngữ như tiếng Trung có thể khó khăn hơn một chút so với tiếng Anh.

Nén hình ảnh và video hoạt động như thế nào?

Nén video và âm thanh hoạt động rất khác nhau. Không giống như văn bản mà bạn có thể nén không mất dữ liệu và không có dữ liệu nào bị mất, với hình ảnh chúng tôi có cái gọi là "Nén tổn hao", nơi bạn mất một số dữ liệu. Và bạn càng nén, càng có nhiều dữ liệu bạn mất.
Nén video và âm thanh hoạt động rất khác nhau. Không giống như văn bản mà bạn có thể nén không mất dữ liệu và không có dữ liệu nào bị mất, với hình ảnh chúng tôi có cái gọi là "Nén tổn hao", nơi bạn mất một số dữ liệu. Và bạn càng nén, càng có nhiều dữ liệu bạn mất.

Đây là những gì dẫn đến những ảnh JPEG khủng khiếp mà mọi người đã tải lên, chia sẻ và chia sẻ nhiều lần. Mỗi khi ảnh được nén, nó sẽ mất một số dữ liệu.

Đây là một ví dụ. Đây là một ảnh chụp màn hình tôi chụp mà chưa được nén ở tất cả.

Sau đó tôi chụp ảnh màn hình đó và chạy nó qua Photoshop nhiều lần, mỗi lần xuất nó dưới dạng JPEG chất lượng thấp. Đây là kết quả.
Sau đó tôi chụp ảnh màn hình đó và chạy nó qua Photoshop nhiều lần, mỗi lần xuất nó dưới dạng JPEG chất lượng thấp. Đây là kết quả.
Trông khá tệ, phải không?
Trông khá tệ, phải không?

Vâng, đây chỉ là trường hợp xấu nhất, xuất ra ở chất lượng JPEG 0% mỗi lần. Để so sánh, dưới đây là một JPEG chất lượng 50%, gần như không thể phân biệt được với hình ảnh PNG nguồn trừ khi bạn thổi nó lên và nhìn kỹ.

PNG cho hình ảnh này có kích thước 200 KB, nhưng chất lượng 50% JPEG này chỉ là 28 KB.
PNG cho hình ảnh này có kích thước 200 KB, nhưng chất lượng 50% JPEG này chỉ là 28 KB.

Vậy làm thế nào nó tiết kiệm được rất nhiều không gian? Vâng, thuật toán JPEG là một kỳ tích của kỹ thuật. Hầu hết các hình ảnh lưu trữ một danh sách các số, với mỗi số đại diện cho một điểm ảnh duy nhất.

JPEG không thực hiện điều này. Thay vào đó, nó lưu trữ hình ảnh bằng cách sử dụng một cái gì đó gọi là một biến đổi Cosin rời rạc, đó là một tập hợp các sóng sin được thêm vào với nhau ở cường độ khác nhau. Nó sử dụng 64 phương trình khác nhau, nhưng hầu hết các phương trình này không được sử dụng. Đây là những gì thanh trượt chất lượng cho JPEG trong Photoshop và các ứng dụng hình ảnh khác - chọn bao nhiêu phương trình để sử dụng. Các ứng dụng sau đó sử dụng mã hóa Huffman để giảm kích thước tệp hơn nữa.

Điều này cho phép JPEG có tỷ lệ nén cực cao, có thể giảm một tệp có thể là nhiều megabyte xuống còn vài kilobyte, tùy thuộc vào chất lượng. Tất nhiên, nếu bạn sử dụng nó quá nhiều, bạn kết thúc với điều này:

Hình ảnh đó thật khủng khiếp.Nhưng một lượng nhỏ nén JPEG có thể có tác động đáng kể đến kích thước tệp và điều này làm cho JPEG rất hữu ích cho việc nén hình ảnh trên các trang web. Hầu hết hình ảnh bạn xem trực tuyến được nén để tiết kiệm thời gian tải xuống, đặc biệt là đối với người dùng thiết bị di động có kết nối dữ liệu kém. Trong thực tế, tất cả các hình ảnh trên How-To Geek đã được nén để làm cho trang tải nhanh hơn, và bạn có thể không bao giờ nhận thấy.
Hình ảnh đó thật khủng khiếp.Nhưng một lượng nhỏ nén JPEG có thể có tác động đáng kể đến kích thước tệp và điều này làm cho JPEG rất hữu ích cho việc nén hình ảnh trên các trang web. Hầu hết hình ảnh bạn xem trực tuyến được nén để tiết kiệm thời gian tải xuống, đặc biệt là đối với người dùng thiết bị di động có kết nối dữ liệu kém. Trong thực tế, tất cả các hình ảnh trên How-To Geek đã được nén để làm cho trang tải nhanh hơn, và bạn có thể không bao giờ nhận thấy.

Nén video

Image
Image

Video hoạt động hơi khác so với hình ảnh. Bạn nghĩ rằng họ sẽ chỉ nén từng khung hình của video bằng cách sử dụng JPEG và chắc chắn họ sẽ làm điều đó, nhưng có một phương pháp tốt hơn cho video.

Chúng tôi sử dụng một cái gì đó gọi là "nén interframe", tính toán các thay đổi giữa mỗi khung và chỉ lưu trữ những thay đổi đó. Vì vậy, ví dụ: nếu bạn có cảnh quay tương đối tĩnh mất vài giây trong một video thì rất nhiều không gian được lưu vì thuật toán nén không cần lưu trữ tất cả nội dung trong cảnh không thay đổi. Nén interframe là lý do chính khiến chúng tôi có truyền hình kỹ thuật số và video trên web. Nếu không có nó, video sẽ có hàng trăm gigabyte, nhiều hơn kích thước ổ cứng trung bình trong năm 2005 khi YouTube ra mắt.

Ngoài ra, kể từ khi nén interframe hoạt động tốt nhất với hầu hết các video tĩnh, đây là lý do tại sao confetti hủy hoại chất lượng video.

Lưu ý: GIF không làm điều này, đó là lý do GIF động thường rất ngắn và nhỏ nhưng vẫn có kích thước tệp khá lớn.

Một điều khác cần lưu ý về video là tốc độ bit của nó - lượng dữ liệu được phép trong mỗi giây. Ví dụ: nếu tốc độ bit của bạn là 200 kb / s, video của bạn sẽ trông khá tệ. Chất lượng tăng lên khi tốc độ bit tăng lên, nhưng sau một vài megabyte mỗi giây, bạn nhận được lợi nhuận giảm dần.

Đây là một khung thu nhỏ được lấy từ video của một con sứa. Một bên trái là 3Mb / s, bên trái là 100Mb / s.

Kích thước tệp tăng 30 lần nhưng không tăng nhiều về chất lượng. Nói chung, các video trên YouTube nằm trong khoảng 2-10Mb / giây tùy thuộc vào kết nối của bạn, vì mọi thứ có thể sẽ không được chú ý nhiều.
Kích thước tệp tăng 30 lần nhưng không tăng nhiều về chất lượng. Nói chung, các video trên YouTube nằm trong khoảng 2-10Mb / giây tùy thuộc vào kết nối của bạn, vì mọi thứ có thể sẽ không được chú ý nhiều.

Bản trình diễn này hoạt động tốt hơn với video thực tế, vì vậy nếu bạn muốn tự mình kiểm tra, bạn có thể tải xuống các video thử nghiệm tốc độ bit giống nhau được sử dụng tại đây.

Nén âm thanh

Nén âm thanh hoạt động rất giống với nén văn bản và hình ảnh. Trong trường hợp JPEG xóa chi tiết khỏi một hình ảnh mà bạn sẽ không nhìn thấy, nén âm thanh sẽ làm tương tự cho âm thanh. Bạn có thể không cần phải nghe tiếng ọp ẹp của việc lựa chọn cây đàn guitar trên dây nếu cây đàn guitar thực sự là nhiều, to hơn nhiều.
Nén âm thanh hoạt động rất giống với nén văn bản và hình ảnh. Trong trường hợp JPEG xóa chi tiết khỏi một hình ảnh mà bạn sẽ không nhìn thấy, nén âm thanh sẽ làm tương tự cho âm thanh. Bạn có thể không cần phải nghe tiếng ọp ẹp của việc lựa chọn cây đàn guitar trên dây nếu cây đàn guitar thực sự là nhiều, to hơn nhiều.

MP3 cũng sử dụng tốc độ bit, từ mức thấp đến 48 và 96 kbps (mức thấp) đến 128 và 240kbps (khá tốt) đến 320kbps (âm thanh cao cấp) và bạn sẽ chỉ nghe thấy sự khác biệt với tai nghe đặc biệt tốt ( và tai).

Ngoài ra còn có codec nén lossless cho âm thanh - một trong những chính là FLAC-sử dụng mã hóa LZ77 để cung cấp âm thanh hoàn toàn lossless. Một số người thề bởi chất lượng âm thanh hoàn hảo của FLAC, nhưng với sự phổ biến của MP3, có vẻ như hầu hết mọi người không thể nói hoặc không nhớ sự khác biệt.

Đề xuất: