{"id":2018,"date":"2009-12-19T17:52:26","date_gmt":"2009-12-20T01:52:26","guid":{"rendered":"http:\/\/multimedia.cx\/eggs\/?p=2018"},"modified":"2009-12-21T10:39:42","modified_gmt":"2009-12-21T18:39:42","slug":"better-compression-for-isos","status":"publish","type":"post","link":"https:\/\/multimedia.cx\/eggs\/better-compression-for-isos\/","title":{"rendered":"Better Compression For ISOs"},"content":{"rendered":"<p>Pursuant to my <a href=\"http:\/\/multimedia.cx\/eggs\/archivists-burden\/\">project idea of archiving a bunch of obscure, old, CD-ROM-based games<\/a>, I got an idea about possibly compressing ISO-9660 filesystems more efficiently than could be done with standard lossless compressors such as gzip, bzip2, and lzma. This is filed under <a href=\"http:\/\/multimedia.cx\/eggs\/category\/outlandish-brainstorms\/\">&#8220;outlandish brainstorms&#8221;<\/a> since I don&#8217;t intend to get around to doing this anytime in the near future, but I wanted to put the idea out there anyway.<\/p>\n<p>Game developers throughout the era of optical disc-based games have been notoriously lazy about data efficiency. A typical manifestation of this is when one opens a disc to find dozens or hundreds of sizable, uncompressed WAV audio files. Same goes for uncompressed graphical assets. General lossless compressors are able to squeeze some bytes out of uncompressed audio and video data but specialized algorithms (like FLAC for audio and PNG for images) perform better.<\/p>\n<p><strong>Here&#8217;s the pitch:<\/strong> Create a format that analyzes individual files in an ISO filesystem and uses more appropriate compression algorithms. If there&#8217;s a 16-bit PCM WAV file, use FLAC to compress it. If there&#8217;s an uncompressed BMP file, compress as a PNG file. Stuff them all in a new file with an index and a mapping to their original files.<\/p>\n<p>As an additional constraint, it obviously needs to be possible to reconstruct a bit-exact ISO from one of these compressed images. So the index will need to store information about what sector ranges different files occupied.<\/p>\n<p>The only other attempt I have seen for a specialized ISO compression format is the <a href=\"http:\/\/multimedia.cx\/eggs\/ciso-technology\/\">CISO format<\/a> used for compressing ISO filesystems for storage on flash memory to be read in PSP units. That format uses zlib to compress sector by sector which has the advantage of being able to mount and use a CISO image in place without decompressing the entire filesystem. That should be possible for this filesystem a well by using a FUSE driver. Mount the filesystem and the driver presents the file tree upon request and decompressed the files on demand.<\/p>\n<p>Many compression algorithms have assorted methods of operation depending on what is appropriate for a particular range of data. This scheme is merely an extension of that principle. I have no idea if this idea would hold water in the general case. But thanks to my archiving brainstorm, I expect I will have quite a lot of data to analyze.<\/p>\n<p><strong>See Also:<\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/multimedia.cx\/eggs\/archivists-burden\/\">Archivist&#8217;s Burden<\/a>, where I laid out the goals for archiving these old games<\/li>\n<li><a href=\"http:\/\/multimedia.cx\/eggs\/ciso-technology\/\">CISO Technology<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>I might be able to create a better compression format for ISO-9660 filesystems<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":["post-2018","post","type-post","status-publish","format-standard","hentry","category-outlandish-brainstorms"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/2018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/comments?post=2018"}],"version-history":[{"count":4,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/2018\/revisions"}],"predecessor-version":[{"id":2027,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/2018\/revisions\/2027"}],"wp:attachment":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/media?parent=2018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/categories?post=2018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/tags?post=2018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}