![فشرده سازی](https://static.digiato.com/digiato/2018/08/File-Compression.png.webp)
چگونه انواع فایل فشرده سازی میشوند؟
مهندسین نرم افزار همیشه راههای جدیدی برای ذخیره سازی تعداد زیادی از دادهها به طوری که فضای کمتری اشغال کند، ارائه دادهاند. در واقع فشرده سازی از زمانی که هارد درایوها مقدار بسیار کمی از ...
![مانی میرجوادی](https://digiato.com/wp-content/uploads/avatars/60974-32x32.jpg)
مهندسین نرم افزار همیشه راههای جدیدی برای ذخیره سازی تعداد زیادی از دادهها به طوری که فضای کمتری اشغال کند، ارائه دادهاند. در واقع فشرده سازی از زمانی که هارد درایوها مقدار بسیار کمی از دادهها را در خود ذخیره میکردند کمک کننده بود و حتی امروزه، بعد از پیشرفت چشمگیر استفاده از اینترنت ضروریتر به نظر میرسد.
فشرده سازی فایلها نقش پر رنگی در آسان کردن ارتباط بین افراد مختلف در سطح اینترنت بازی میکند. این اتفاق به ما اجازه میدهد تا حجم کمتری از اطلاعات را با سرعت بالاتری به یکدیگر انتقال دهیم. موضوعی که باعث بالا رفتن سرعت دانلود میشود و حجم استفادهی کمتری از فضای اینترنت را به شبکهها تحمیل میکند.
فشرده سازی چگونه اتفاق میافتد؟
برای پاسخ دادن به این سوال، در ابتدا باید به چند مطلب پیچیدهی ریاضی اشاره کنیم که به طور قطع حجمی بیشتر از یک مطلب را در بر خواهد گرفت. اما برای متوجه شدن چگونگی فشرده سازی فایلها، نیازی نیست که مطالب پیچیدهی ریاضی را به طور کامل متوجه شوید و یک آشنایی جزئی کافیست.
معروف ترین کتابخانههای فشرده سازی متون از دو الگوریتم فشرده سازی به طور همزمان استفاده میکنند تا بتوانند بازهی زیادی از متن را پوشش داده و فشرده کنند. این دو الگوریتم LZ77 و Huffman Coding نام دارند.
کد هافمن پیچیده است و در این مطلب به جزئیات آن اشاره نخواهیم کرد. این الگوریتم با استفاده از راههای خاص ریاضی، کدهای باینری کوتاهتری را به هرکدام از کلمات اختصاص میدهد. موضوعی که در نهایت منجر به کاهش حجم فایل میشود.
الگوریتم LZ77 بر خلاف کد هافمن ساده محسوب میشود و روشیست که در این مطلب بیشتر راجع به آن صحبت خواهیم کرد. این الگوریتم هدفش از بین بردن کلمات یکسان و جایگزین کردن آنها با کلیدیست که به هر کلمه اختصاص میدهد. متن کوتاه زیر را در نظر بگیرید.
وقتی الگوریتم LZ77 این متن را مشاهده میکند متوجه میشود که واژهی howtogeek سه مرتبه تکرار شده. بنابراین آن را به متن زیر تبدیل میکند:
سپس، وقتی که میخواهد متن را مجددا به نمایش برساند، همهی کلیدهای (h) که خودش ایجاد کرده بود را با howtogeek جایگذاری میکند.
اصطلاحا به این نوع فشرده سازی، فشرده سازی «از دست ندادنی» یا lossless گفته میشود. به این معنی که دادهای که دریافت میکنید بعد از فشرده سازی عینا بازخوانی خواهد شد و هیچکدام از اطلاعات دریافت شده از بین نمیرود.
در واقع، LZ77 از لیستی از کلیدها استفاده نمیکند. بلکه بعد از مشاهدهی اولین تکرار یک کلمه، آن را به کلمهی اصلی لینک میکند.
بنابراین وقتی به کلید (h) میرسد، به عقب بر میگردد و متوجه میشود که باید هرکدام از این کلیدها را با howtogeek جاگذاری کند.
حال به یک مثال واقعی تر اشاره خواهیم کرد. بیشتر فایلهای متنی با کلیدهایی به اندازهی واژههای با تعداد حروف بسیار پایین فشرده سازی میشوند. برای مثال، واژهی the حتی در کلماتی مثل there، their و then هم کلید گذاری میشود. با تکرار یک واژه در متن میتوانید به نتایج عجیبی برسید. یک فایل متنی را ایجاد کردیم و کلمهی howtogeek را ۱۰۰ بار در آن تکرار کردیم. فایل اصلی ۳ کیلوبایت حجم داشت. بعد از فشرده سازی اما حجم آن به ۱۵۸ بایت رسید. در واقع این فشرده سازی حجم فایل را تا ۹۵ درصد کاهش داد.
البته واضح است که در مثال قبلی کمی زیاده روی کردیم و با تکرار ۱۰۰ بارهی یک واژه نمیتوانستیم انتظاری جز این مقدار از فشرده سازی را داشته باشیم. اما عموما در صورت استفاده از فرمتهایی مثل ZIP با ۳۰ تا ۴۰ درصد کاهش حجم مواجه خواهید شد.
الگوریتم LZ77 فقط روی فایلهای متنی عمل نمیکند. هرچند به طور کلی فشرده سازی فایلهای متنی بسیار ساده تر است چرا که تکرار بعضی از کلمات عموما در هر زبانی اتفاق میافتد.
فشرده سازی فایلهای صوتی و ویدیویی چطور اتفاق میافتد؟
فشرده سازی فایلهای ویدیویی و صوتی کاملا متفاوت اتفاق میافتد. بر خلاف متن که شما با فشرده سازی «از دست ندادنی» رو به رو بودید، در فشرده سازی فایلهای ویدیویی و صوتی با فشرده سازی «از دست دادنی» مواجه هستید و برخی از اطلاعات هر فایل را بعد از فشرده سازی از دست خواهید داد. همچنین هرچه قدر میزان فشرده سازی شما بالاتر باشد، اطلاعات بیشتری را از دست میدهید.
این اتفاق همان چیزیست که منجر به عکسهایی با کیفیت بسیار پایین میشود. هر بار که یک عکس فشرده شود، بخشی از اطلاعات خود را از دست خواهد داد. حالا به یک مثال اشاره میکنیم.
عکسی که در بالا مشاهده میکنید تصویری از صفحهی دسکتاپ است که چندین بار توسط نرم افزار فوتوشاپ باز شده و سپس با کیفیتی پایین تر اقدام به ذخیره سازی آن کردیم. در زیر نتیجه را خواهید دید:
البته چیزی که در بالا مشاهده میکنید با کمترین کیفیت ممکن اتفاق افتاده است. برای مقایسه میتوانیم به یک فشرده سازی دیگر اشاره کنیم که این بار با فشرده سازی ۵۰ درصد رو به رو شده. در عکس زیر با یک فایل JPEG مواجه هستیم که آنچنان تفاوتی با فایل PNG اصلی خود ندارد. البته اگر نخواهید خیلی دقیق به آن نگاه کنید.
فایل PNG این عکس حدود ۲۰۰ کیلوبایت بود، اما بعد از فشرده سازی ۵۰ درصد تبدیل به فایلی با حجم ۲۸ کیلوبایت شد. بنابراین سوال اینجاست که آیا واقعا در این میان حجم قابل توجهی از هارد با صرفه جویی مواجه میشود یا نه؟
الگوریتم JPEG نتیجهی شاهکار مهندسین است. بیشتر فرمتها لیستی از اعداد را ذخیره میکنند که هر عدد نشان دهندهی یک پیکسل است. فرمت JPEG چنین کاری نمیکند. در عوض با استفاده از روشی به نام تبدیلات گسستهی کسینوسی اقدام به ذخیره سازی تصاویر میکند. این روش با مجموعهای از موجهای سینوسی مختلف مواجه است. در این روش از ۶۴ معادلهی مختلف استفاده میشود که البته بیشترشان مورد استفاده قرار نمیگیرند.
در واقع متغیر تعیین کیفیت فایلهای JPEG که در فوتوشاپ مشاهده میکنیم، تعداد معادلههای مورد استفاده برای ذخیرهسازی عکس را مشخص میکند. نرم افزار فوتوشاپ بعد از تعیین شدن تعداد معادلات، با استفاده از کدگذاری هافمن نسبت به فشرده سازی بیشتر عکس اقدام خواهد کرد.
این اتفاق باعث میشود که عکسهای با فرمت JPEG امکان فشرده سازی بیشتری داشته باشد. البته در صورت زیاده روی ممکن است با عکسی مثل تصویر زیر مواجه شوید:
عکس بالا میتواند یک فاجعه لقب بگیرد. اما موضوع مهم اینجاست که عکسهایی با فرمت JPEG با مقدار کمی از فشرده سازی، میتوانند با کاهش حجم قابل توجهی مواجه شوند و علاوه بر این کیفیتشان آنچنان پایین نیاید. به همین دلیل است که اکثر وبسایتها از تصویرهایی با فرمت JPEG استفاده میکنند.
فشرده سازی فایلهای ویدیویی
فشرده سازی فایلهای ویدیویی تا حدی با فشرده سازی تصاویر متفاوت است. شاید فکر کنید هر فریم از ویدیو را با فرمت JPEG فشرده سازی میکنند، که یقینا این اتفاق میافتد؛ اما روش بهتری برای فشرده سازی فایلهای ویدیویی وجود دارد.
ما از اصطلاحی به نام Interframe Compression به معنی «فشرده سازی میان فریمی» استفاده میکنیم که به محاسبهی تغییرات هر بین هر دو فریم میپردازد و فقط آنها را ذخیره میکند. بنابراین به عنوان مثال اگر فیلمی دارید که صحنههای آن زیاد تغییر نمیکند میتوانید با استفاده از این روش با حجم بسیار کمتری از فایل ویدیویی مواجه شوید.
فشرده سازی میان فریمی در واقع اصلی ترین دلیلیست که ما امروزه تلویزیونهای دیجیتال و ویدیوهای تحت وب را داریم. بدون این فشرده سازی، ویدیوها چند صد گیگابایت حجم داشتند که مقدار بسیار زیادیست. البته به یاد داشته باشید که GIF از چنین روشی استفاده نمیکند و به همین دلیل است که با اینکه کوتاه هستند اما حجم نسبتا زیادی دارند.
موضوع دیگری که باید در زمینهی ویدیو به یاد داشته باشید موضوعیست با نام bitrate. بیت ریت به معنای مقدار دادههاییست که در هر ثانیه اجازهی اجرا شدن را دارند. به عنوان مثال اگر بیت ریت ۲۰۰ کیلوبایت بر ثانیه باشد، ویدیوی شما کیفیت پایینی خواهد داشت. کیفیت فایلهای ویدیویی در صورتی که بیت ریت بالاتر باشد، بیشتر خواهد شد.
تصویر زیر، فریمی از یک ویدیوست. تصویر سمت چپ با بیت ریت ۳ مگابایت بر ثانیه و تصویر سمت راست ۱۰۰ مگابایت بر ثانیه است.
ویدیوی مربوط به تصویر سمت راست ۳۰ برابر حجم بیشتری نسبت به ویدیوی تصویر سمت چپ داشت. اما عملا تفاوت کیفیت قابل توجهی را شاهد نبودیم. عموما ویدیوهای یوتوب با توجه به کیفیت اینترنتتان از بیت ریتی بین ۲ تا ۱۰ مگابایت بر ثانیه استفاده میکنند و در صورت استفاده از بیت ریت بالاتر، بعید است که کیفیت بهتری را در آنها شاهد باشیم.
فشرده سازی فایلهای صوتی
فشرده سازی فایلهای صوتی شباهت زیادی به فشرده سازی متن و تصاویر دارد. فایلهای JPEG جزئیات غیر قابل مشاهده را از تصویر حذف میکنند. اتفاقی که در فشرده سازی فایلهای صوتی هم میافتد.
فرمت MP3 هم دارای بیت ریت است. در کیفیتهای پایین این مقدار بین ۴۸ و ۹۶ کیلو بیت بر ثانیه، در کیفیتهای متوسط از ۱۲۸ تا ۲۴۰ کیلوبیت بر ثانیه و در کیفیتهای عالی از ۳۲۰ کیلوبیت بر ثانیه استفاده میشود. البته شنیدن تفاوتها بین این فایلها تنها با یک هدفون قوی و گوش تیز امکان پذیر است.
در فشرده سازی فایلهای صوتی هم بعضی متدهای فشرده سازی از دست ندادنی وجود دارد. یکی از معروف ترین آنها FLAC است که از الگوریتم LZ77 استفاده میکند و بسیاری آن را یکی از بهترین فرمتهای صوتی میدانند. اما همچنان MP3 بیشترین کاربرد و محبوبیت را دارد.
دیدگاهها و نظرات خود را بنویسید
برای گفتگو با کاربران ثبت نام کنید یا وارد حساب کاربری خود شوید.
بسیار عالی
برای من که بسیار مفید بود
عالی بود ???