- ベストアンサー
こんな圧縮技術はある?
例えば音声データの場合は人間に聴こえない音を削除したりして圧縮をしているかと思いますが、バイナリデータ?を書き換えて圧縮している物はあるのでしょうか? 例えば、ff EEといったデータがある場合、ffをF,eeをEに置き換える(もちろんこんな単純な物ではないでしょうが)といったものはあるのでしょうか? また、jpegなどのデータをバイナリエディタで読むと、ff,eeのような16進数が出てきますよね?それをテキストで保存して、またjpegに戻すにはどうしたらいいのでしょうか?・・というか、そういうことは可能でしょうか? よろしくお願いします。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
★結論からすると『出来る』です。 ・バイナリデータを 16 進数で出力してファイルに保存し、そのファイルから 16 進数 2桁を バイナリ値の1バイトに変換してくれるツールがあれば可能です。また、なければ自作する 手もあります。そんなに難しくはありません。 ・あとバイナリデータを 16 進数で出力すると圧縮よりもデータ量が増加しますよ。 よって圧縮技術というよりは、データ変換ですかね。 正しく、エンコード(Encode)、デコード(Decode)をすれば jpeg などのデータも元の状態に戻せます。 ・BASE64 はバイナリ値の1バイトを 6 ビットの文字に変換します。これはバイナリ値の3バイトを 4桁の文字に変換することになるため、サイズは4/3倍に増加します。 ・まぁ、ちょっとした好奇心の質問ですのでこんな程度のアドバイスになります。 ・それでは。
その他の回答 (10)
- jjon-com
- ベストアンサー率61% (1599/2592)
>音楽や画像がlhaやzipで小さくなりにくい。 >でも、それが「なぜ」なのかよくわかりません。 単純に「JPEG/MP3/MPEGそれら自身が,画像圧縮/音声圧縮/動画圧縮の技術だから」で分かりやすいように思うのですけれど。それぞれに適した圧縮が済んでいるファイルに対して,さらに圧縮をかけても小さくなりにくいのは当然のような感じがしませんか? http://ja.wikipedia.org/wiki/データ圧縮 >http://oku.edu.mie-u.ac.jp/~okumura/compression/020130/ ># 私は細部を理解していません(笑) 「圧縮と詐欺」の箇所で述べられていることは誰にも納得できるしごく単純なことですよ。 例えば,任意の8bit長のデータが可逆圧縮できるとしよう。可逆圧縮は完全に元のデータに戻るのだから,圧縮前パターン←→圧縮後パターン が1対1に対応せねばならない。では2の8乗=256通りの全パターンを表現できる最短のbit長はなにか,それは8bitである。 つまり,任意のbit長のデータをそれ以下のbit長にいつでも可逆圧縮できると言うこと自体ナンセンスだということです。逆の言い方をするなら,テキストデータにしろバイナリデータにしろ,それが可逆圧縮できるということはすなわち「元データは任意bitの集合ではなく,ある種のパターンが含まれているbit列である」ということです。
- SortaNerd
- ベストアンサー率43% (1185/2748)
>ffをf、eeをeに置き換える これの意味がちょっとよく分からないのですが、 a.桁数を減らすということでしょうか。 つまりf0~ffまではf、e0~eeまではeといった形に。 b.あるいは、ffはfに変えて、逆にfはffに戻せる(劣化しない)ということでしょうか。 bなら、それは普通の可逆圧縮です。 もちろん、ffをf、eeをeなどとやっては文字が足りなくなりますから、どこかで「feはffffe」などと文字が増える変換をしなければいけません。 それをいかにして全体で文字数を減らすかというのが圧縮技術の基本です。 可逆圧縮というのは、任意のbit列をもってきたときに、それが圧縮でまともに小さくなるのは全体の1%程度です。残りのものは圧縮でサイズが増加します。 aなら、あまり圧縮という言い方はしませんが、音声で言えば量子化ビット数を下げることに相当します。16bit,44.1kHzのwavを8bit,44.1kHzにすればサイズが半分になります。 これは相当音質が劣化します。人間に聞こえる音も聞こえない音もまとめて切り捨てるわけですから。 なお、可逆圧縮は2回連続で行ってもほとんど効果がありません。 これは上で言った「圧縮できるbit列は全体の1%」に関連しますが、圧縮されて出来上がったbit列は非常に圧縮しづらいものになっているのです。 これは非可逆圧縮でも同じです。 なぜなら非可逆圧縮というのは、元のデータを適に改竄したのちに可逆圧縮をかけるものだからです。結局最終的には可逆圧縮がかかっています。
- kmihara
- ベストアンサー率50% (3/6)
> でも、WMVをZIPで圧縮しても容量はほとんど変わりませんね。。 可逆圧縮(全く同じビット列に戻せる圧縮)には、数学的な限界があるんです。物理的な限界ではないので、1 + 1 = 3 にならない(なったら間違い)のに似て、どうしても超えられません。 簡潔に書かれているサイトを引用します。 http://oku.edu.mie-u.ac.jp/~okumura/compression/020130/ # 私は細部を理解していません(笑) WMV は数学的限界のぎりぎりにきているはず(でなきゃ、金返せ!)なので、ZIP 圧縮で小さくならなくてもおかしくありません。これは MPEG や JPEG や ZIP 自体や LZH でも同じです。
お礼
なるほど・・ぎりぎりなんですね。 回答ありがとうございました。
- Tasuke22
- ベストアンサー率33% (1799/5383)
>WMVをZIPで圧縮しても容量はほとんど変わりませんね。。 音楽や画像がlhaやzipで小さくなりにくいことは知られています。 なので、jpegや音楽では様々な圧縮技術が生まれたのです。
お礼
えぇ、確かにそれは知られていますね。でも、それが「なぜ」なのかよくわかりません。。。
- gungnir7
- ベストアンサー率43% (1124/2579)
>理解できないのに回答して頂きどうもです #2です。技術系の質問の場合、質問者の考えが漠然としていると 質問内容と本来質問したいことに違いが生ずることがよくあるので・・・ 自分でも回答を書きながら、意図がつかみきれなかったので 補足要求的に回答を出しておきました。 とりあえず他の回答で間に合ったようなので良かったです。
お礼
そうですね、それは良くあることですね。私も(回答者側で)しょっちゅう・・w ご回答ありがとうございました。
- jjon-com
- ベストアンサー率61% (1599/2592)
#3に関連した補足(蛇足)です。 画像ファイル ~.jpg を電子メールに添付するとバイナリ→テキスト変換が,電子メールを受信して添付データをファイルとして保存するとテキスト→バイナリ変換が,いつも裏側でおこなわれています。電子メールが扱えるのはテキストデータだけなので。 http://ja.wikipedia.org/wiki/Base64
お礼
補足ありがとうございます。 勉強になりました。
- siddhaartha
- ベストアンサー率25% (45/175)
>バイナリデータ?を書き換えて圧縮している物はあるのでしょうか? あります。LZHやZIP圧縮などがそうです。 LZH圧縮などは元になるデータの連続した部分を 「いくつ連続しているか」に書き換える技術です。 例えば「FF FF FF FF FF FF FF EE EE EE」(=10bit)を FFが7、EEが3という風に「FF 07 EE 03」(=4bit)のように 書き換えることによってデータサイズを小さくしています。 (基本的な概念ですよ^^; 実際はもっと複雑です) ちなみに、こういうのを可逆圧縮と言います。逆は不可逆圧縮。 (可逆・・・元に戻せる/不可逆・・・元に戻せない) #例に挙げられている音の圧縮(MPEG-4)等は聞こえない音を #間引いちゃってるので、元には戻せない。 #上記のLZHやZIPは元に戻せる。 >それをテキストで保存して、またjpegに戻すにはどうしたらいいのでしょうか? テキストの編集にはメモ帳などのテキストエディターを使いますよね? 同様にバイナリの編集にはバイナリエディターがあります。 テキストで保存したバイナリデータをバイナリエディターに貼り付ければ jpegに戻ると思いますよ。(やったことないけど)
お礼
あ、そうか!バイナリエディターに貼り付ければいいんですねw ご回答ありがとうございました。
- sakusaker7
- ベストアンサー率62% (800/1280)
今使われているので大きいのは、メールの添付などで使われる BASE64でしょう。 適当なjpegファイルを添付したメールを作ってみて、 そのメールを直接エディタで見れば、 --------------030506030507090004090103 Content-Type: application/octet-stream; name="mogera.jpeg" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="mogera.jpeg" Ozs7IGF1dG9pbnNlcnQubCAtLS0gYXV0b21hdGljIG1vZGUtZGVwZW5kZW50IGluc2VydGlv biBvZiB0ZXh0IGludG8gbmV3IGZpbGVzCjs7OyAtKi0gTW9kZTogTGlzcDsgUGFja2FnZTog RURJVE9SIC0qLQo7OwoKOzsgQ29weXJpZ2h0IChDKSAxOTg1LCA4NiwgODcsIDk0LCA5NSwg こんな感じの部分が見つかると思います。 このような変換をしてくれるツールはありますので、 それを使ってみるとか。 あるいはunix環境であるなら uuencode が使えるでしょう。
お礼
調べたとき、メールのことは書いてあったのでそこは理解できたのですが、メールではなく普通に書き換えることができるのか教えて頂けるとありがたいです。 ご回答ありがとうございます。
- gungnir7
- ベストアンサー率43% (1124/2579)
すみません。言っている意味がイマイチ理解できません。 >バイナリデータ?を書き換えて圧縮している物はあるのでしょうか それが普通ではないでしょうか。 音声データの圧縮を例にあげていますが、それもバイナリの書き換えです。 >例えば、ff EEといったデータがある場合、ffをF,eeをEに置き換える Jpegなどは近似による圧縮なのでそうなります。 >それをテキストで保存して、またjpegに戻すにはどうしたらいいか >というか、そういうことは可能でしょうか? 楽勝です。原理としては単純です。 しかし、簡単といっても一般の方はツールを探し出してこないといけない。 一応回答してみたものの、やはり何かが違う気がします。
お礼
理解できないのに回答して頂きどうもです。
- Tasuke22
- ベストアンサー率33% (1799/5383)
> バイナリデータ?を書き換えて圧縮している物はあるのでしょうか? lha,zip等の昔からの圧縮技術がそれに当たりますね。 > jpegなどのデータをバイナリエディタで読むと、ff,eeのような > 16進数が出てきますよね?それをテキストで保存して、またjpegに > 戻すにはどうしたらいいのでしょうか? 出来るでしょう。昔、まだインターネットが一般で無かった頃、 プログラムをそのようにしておくっていましたねえ。まだ、その手 のソフトは生き残っているのかな?
お礼
あぁ、ZIPもそうなんですね。 でも、WMVをZIPで圧縮しても容量はほとんど変わりませんね。。 回答ありがとうございました。
お礼
あ、そうか。データ量が増えたら圧縮技術じゃありませんよねw ご回答ありがとうございました。