การบีบอัดไฟล์ทำงานอย่างไร
วิศวกรซอฟต์แวร์ได้พัฒนาวิธีการใหม่ ๆ ในการปรับข้อมูลให้เหมาะสมในพื้นที่ขนาดเล็ก มันเป็นความจริงเมื่อฮาร์ดไดรฟ์ของเรามีขนาดเล็กและการกำเนิดของอินเทอร์เน็ตทำให้มันสำคัญยิ่งขึ้น การบีบอัดไฟล์มีส่วนสำคัญในการเชื่อมต่อกับเราทำให้เราส่งข้อมูลน้อยลงเพื่อให้เราสามารถดาวน์โหลดได้เร็วขึ้นและเชื่อมต่อกับเครือข่ายไม่ว่างมากขึ้น.
มันทำงานอย่างไร?
เพื่อตอบคำถามนั้นเกี่ยวข้องกับการอธิบายคณิตศาสตร์ที่ซับซ้อนมากแน่นอนกว่าที่เราสามารถครอบคลุมในบทความนี้ แต่คุณไม่จำเป็นต้องเข้าใจอย่างแม่นยำว่ามันทำงานทางคณิตศาสตร์เพื่อทำความเข้าใจพื้นฐาน.
ไลบรารีที่ได้รับความนิยมสูงสุดสำหรับการบีบอัดข้อความนั้นใช้อัลกอริธึมการบีบอัดสองตัวโดยใช้ทั้งสองอย่างในเวลาเดียวกันเพื่อให้ได้อัตราส่วนการบีบอัดที่สูงมาก อัลกอริธึมทั้งสองนี้คือ "LZ77" และ "Huffman coding" การเข้ารหัส Huffman นั้นค่อนข้างซับซ้อนและเราจะไม่พูดถึงรายละเอียดของสิ่งนั้นที่นี่ ในขั้นต้นจะใช้คณิตศาสตร์แฟนซีเพื่อกำหนดให้สั้นลง รหัสไบนารี แต่ละตัวอักษรลดขนาดไฟล์ในกระบวนการ หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ลองอ่านบทความเกี่ยวกับวิธีการทำงานของรหัสหรือตัวอธิบายนี้โดย Computerphile.
ในทางกลับกัน LZ77 นั้นค่อนข้างเรียบง่ายและเป็นสิ่งที่เราจะพูดถึงที่นี่ มันพยายามที่จะลบคำที่ซ้ำกันและแทนที่ด้วยคีย์ "เล็ก" ที่แสดงถึงคำว่า.
ยกตัวอย่างข้อความสั้น ๆ นี้:
อัลกอริทึม LZ77 จะมองที่ข้อความนี้ตระหนักว่ามันซ้ำกับ "howtogeek" สามครั้งและเปลี่ยนเป็น:
จากนั้นเมื่อต้องการอ่านข้อความกลับมามันจะแทนที่ทุกตัวอย่างของ (h) ด้วย“ howtogeek” นำเรากลับไปที่วลีดั้งเดิม.
เราเรียกการบีบอัดเช่นนี้ว่า "lossless" - ข้อมูลที่คุณใส่นั้นเหมือนกับข้อมูลที่คุณได้รับ ไม่มีอะไรหายไป.
ในความเป็นจริง LZ77 ไม่ใช้รายการของคีย์ แต่จะแทนที่การเกิดขึ้นครั้งที่สองและครั้งที่สามด้วยการเชื่อมโยงกลับเข้าไปในหน่วยความจำ:
ดังนั้นเมื่อถึง (h) มันจะมองย้อนกลับไปที่ "howtogeek" และอ่านมันแทน.
หากคุณสนใจคำอธิบายโดยละเอียดเพิ่มเติมวิดีโอนี้จาก Computerphile มีประโยชน์มาก.
ตอนนี้เป็นตัวอย่างที่เงียบสงบ ในความเป็นจริงข้อความส่วนใหญ่จะถูกบีบอัดด้วยปุ่มเล็ก ๆ เพียงไม่กี่ตัวอักษร ตัวอย่างเช่นคำว่า "the" จะถูกบีบอัดแม้ว่าจะปรากฏเป็นคำเช่น "นั่น" "ของพวกเขา" และ "จากนั้น" ด้วยข้อความซ้ำคุณสามารถรับอัตราส่วนการบีบอัดที่บ้าคลั่งได้ ใช้ไฟล์ข้อความนี้โดยใช้คำว่า "howtogeek" ซ้ำ 100 ครั้ง ไฟล์ข้อความต้นฉบับมีขนาดสามกิโลไบท์ เมื่อบีบอัดแม้ว่าจะใช้เวลาเพียง 158 ไบต์เท่านั้น นั่นคือการบีบอัดเกือบ 95%.
ตอนนี้เห็นได้ชัดว่าเป็นตัวอย่างที่ดีมากเนื่องจากเราเพิ่งพูดคำซ้ำไปซ้ำมา ในทางปฏิบัติโดยทั่วไปคุณอาจได้รับการบีบอัดประมาณ 30-40% โดยใช้รูปแบบการบีบอัดเช่น ZIP ในไฟล์ที่ส่วนใหญ่เป็นข้อความ.
อัลกอริทึม LZ77 นี้นำไปใช้กับข้อมูลไบนารี่ทั้งหมดโดยวิธีการและไม่ใช่แค่ข้อความ แต่โดยทั่วไปข้อความจะง่ายกว่าในการบีบอัดเนื่องจากมีคำซ้ำหลายคำที่ภาษาส่วนใหญ่ใช้ ยกตัวอย่างเช่นภาษาจีนอาจจะบีบอัดได้ยากกว่าภาษาอังกฤษเล็กน้อย.
รูปภาพและการบีบอัดวิดีโอทำงานอย่างไร?
การบีบอัดวิดีโอและเสียงทำงานแตกต่างกันมาก แตกต่างจากข้อความที่คุณสามารถบีบอัดแบบ lossless และไม่มีข้อมูลสูญหายด้วยภาพที่เรามีสิ่งที่เรียกว่า "การบีบอัดแบบสูญเสีย" ที่คุณสูญเสียข้อมูลบางอย่าง ยิ่งคุณบีบอัดข้อมูลมากเท่าไหร่คุณก็ยิ่งสูญเสียมากเท่านั้น.
นี่คือสิ่งที่นำไปสู่ภาพ JPEG ที่ดูน่ากลัวที่ผู้คนอัพโหลดอัพโหลดและจับภาพหน้าจอหลายครั้ง ทุกครั้งที่ภาพถูกบีบอัดจะสูญเสียข้อมูลบางส่วน.
นี่คือตัวอย่าง นี่เป็นภาพหน้าจอที่ฉันถ่ายซึ่งไม่ได้รับการบีบอัดเลย.
จากนั้นฉันก็จับภาพหน้าจอนั้นและวิ่งผ่าน Photoshop หลาย ๆ ครั้งแต่ละครั้งที่ส่งออกเป็น JPEG คุณภาพต่ำ นี่คือผลลัพธ์.
ดูไม่ดีเลยใช่ไหม?
นี่เป็นเพียงสถานการณ์ที่เลวร้ายที่สุดเท่านั้นการส่งออกที่คุณภาพ JPEG 0% ในแต่ละครั้ง สำหรับการเปรียบเทียบนี่คือ JPEG คุณภาพ 50% ซึ่งเกือบจะแยกไม่ออกจากอิมเมจ PNG ต้นทางเว้นแต่ว่าคุณจะระเบิดและดูอย่างใกล้ชิด.
PNG สำหรับภาพนี้มีขนาด 200 KB แต่ JPEG คุณภาพ 50% นี้มีเพียง 28 KB.
ดังนั้นมันจะประหยัดพื้นที่ได้อย่างไร อัลกอริทึม JPEG นั้นเป็นสิ่งที่ดี ภาพส่วนใหญ่จัดเก็บรายการตัวเลขโดยแต่ละหมายเลขแสดงพิกเซลเดียว.
JPEG ไม่ได้ทำสิ่งนี้ มันเก็บภาพโดยใช้สิ่งที่เรียกว่า Discrete Cosine Transform ซึ่งเป็นชุดของคลื่นไซน์ที่รวมเข้าด้วยกันในความเข้มที่แตกต่างกัน มันใช้ 64 สมการที่แตกต่างกัน แต่ส่วนใหญ่ไม่ได้ใช้ นี่คือสิ่งที่ตัวเลื่อนคุณภาพสำหรับ JPEG ใน Photoshop และแอพรูปภาพอื่น ๆ ไม่ได้เลือกว่าจะใช้สมการกี่สมการ แอพนั้นใช้การเข้ารหัส Huffman เพื่อลดขนาดไฟล์ให้ดียิ่งขึ้น.
สิ่งนี้ทำให้ JPEG มีอัตราส่วนการบีบอัดสูงอย่างไม่น่าเชื่อซึ่งสามารถลดไฟล์ที่มีหลายเมกะไบต์ลงเหลือสองสามกิโลไบต์ขึ้นอยู่กับคุณภาพ แน่นอนถ้าคุณใช้มันมากเกินไปคุณจะได้สิ่งนี้:
ภาพนั้นน่ากลัว แต่การบีบอัด JPEG จำนวนเล็กน้อยอาจส่งผลกระทบอย่างมีนัยสำคัญต่อขนาดไฟล์และสิ่งนี้ทำให้ JPEG มีประโยชน์มากสำหรับการบีบอัดภาพในเว็บไซต์ รูปภาพส่วนใหญ่ที่คุณเห็นทางออนไลน์จะถูกบีบอัดเพื่อประหยัดเวลาในการดาวน์โหลดโดยเฉพาะอย่างยิ่งสำหรับผู้ใช้มือถือที่มีการเชื่อมต่อข้อมูลไม่ดี อันที่จริงรูปภาพทั้งหมดใน How-To Geek ถูกบีบอัดเพื่อให้การโหลดหน้าเว็บเร็วขึ้นและคุณอาจไม่เคยสังเกต.
การบีบอัดวิดีโอ
วิดีโอทำงานแตกต่างจากภาพเล็กน้อย คุณคิดว่าพวกเขาจะบีบอัดวิดีโอแต่ละเฟรมโดยใช้ JPEG และพวกเขาก็ทำเช่นนั้น แต่มีวิธีที่ดีกว่าสำหรับวิดีโอ.
เราใช้สิ่งที่เรียกว่า "การบีบอัดเฟรม" ซึ่งคำนวณการเปลี่ยนแปลงระหว่างแต่ละเฟรมและเก็บเฉพาะเฟรมเหล่านั้น ตัวอย่างเช่นหากคุณมีภาพนิ่งที่ค่อนข้างใช้เวลานานหลายวินาทีในวิดีโอพื้นที่จำนวนมากได้รับการบันทึกเพราะอัลกอริทึมการบีบอัดไม่จำเป็นต้องเก็บทุกสิ่งในฉากที่ไม่เปลี่ยนแปลง การบีบอัดเฟรมเป็นเหตุผลหลักที่เรามีทีวีดิจิตอลและวิดีโอบนเว็บเลย หากไม่มีวิดีโอจะเป็นกิกะไบต์หลายร้อยกว่าขนาดฮาร์ดไดรฟ์เฉลี่ยในปี 2548 เมื่อเปิดตัว YouTube.
นอกจากนี้เนื่องจากการบีบอัดอินเตอร์เฟรมทำงานได้ดีที่สุดกับวิดีโอที่อยู่กับที่ส่วนใหญ่นี่คือเหตุผลที่ทำให้คุณภาพวิดีโอของ Confetti เป็นที่เสียหาย.
หมายเหตุ: GIF ไม่ทำสิ่งนี้ซึ่งเป็นสาเหตุที่ทำให้ GIF เคลื่อนไหวสั้นและเล็ก แต่ก็ยังมีขนาดไฟล์ที่ค่อนข้างใหญ่.
สิ่งที่ควรคำนึงถึงเกี่ยวกับวิดีโอก็คือปริมาณข้อมูลที่อนุญาตในทุก ๆ วินาที ตัวอย่างเช่นหากอัตราบิตของคุณคือ 200 kb / s วิดีโอของคุณจะดูแย่มาก คุณภาพสูงขึ้นเมื่อบิตเรตเพิ่มขึ้น แต่หลังจากสองสามเมกะไบต์ต่อวินาทีคุณจะได้รับผลตอบแทนลดลง.
นี่เป็นเฟรมที่ซูมจากวิดีโอของแมงกะพรุน ด้านซ้ายอยู่ที่ 3Mb / s และอีกอันอยู่ทางขวาคือ 100Mb / s.
ขนาดไฟล์เพิ่มขึ้น 30x แต่คุณภาพเพิ่มขึ้นไม่มาก โดยทั่วไปวิดีโอ YouTube จะมีความเร็วประมาณ 2-10Mb / s ขึ้นอยู่กับการเชื่อมต่อของคุณ.
การสาธิตนี้ทำงานได้ดีกับวิดีโอจริงดังนั้นหากคุณต้องการตรวจสอบด้วยตัวคุณเองคุณสามารถดาวน์โหลดวิดีโอทดสอบบิตเรตเดียวกับที่ใช้ที่นี่.
การบีบอัดสัญญาณเสียง
การบีบอัดสัญญาณเสียงทำงานคล้ายกับการบีบอัดข้อความและรูปภาพ ในกรณีที่ JPEG ลบรายละเอียดออกจากภาพที่คุณไม่เห็นการบีบอัดสัญญาณเสียงก็เหมือนกับเสียง คุณอาจไม่จำเป็นต้องได้ยินเสียงลั่นดังเอี๊ยดของการเลือกกีต้าร์บนสายถ้ากีต้าร์ที่เกิดขึ้นจริงดังกว่ามาก.
MP3 ยังใช้บิตเรตตั้งแต่ระดับต่ำสุดของ 48 และ 96 kbps (ต่ำสุด) ถึง 128 และ 240kbps (ค่อนข้างดี) ถึง 320kbps (เสียงระดับไฮเอนด์) และคุณจะได้ยินเพียงความแตกต่างกับหูฟังที่ดีเป็นพิเศษ ( และหู).
นอกจากนี้ยังมีตัวแปลงสัญญาณบีบอัดแบบ lossless สำหรับเสียง - ตัวหลักคือ FLAC ซึ่งใช้การเข้ารหัส LZ77 เพื่อส่งมอบเสียงแบบไม่สูญเสียทั้งหมด บางคนสาบานด้วยคุณภาพเสียงที่สมบูรณ์แบบของ FLAC แต่ด้วยความแพร่หลายของ MP3 ดูเหมือนว่าคนส่วนใหญ่ไม่สามารถบอกหรือไม่สนใจความแตกต่าง.