4

事前にお詫び申し上げますが、これは実際にはフォトショップの質問ではありません。むしろ、私は説得力のあるものを考え出そうとしていますが、アニメーション用に可能な限り最小のファイルを生成するために、gif形式の圧縮と機能を可能な限り活用しています。

いくつかの制約:

  • 少なくとも20または30フレームである必要があります。私はもっ​​と少ないもので試しました(そしてそれらはほとんど圧縮できないので、15フレームは一般的に言えば30の半分のサイズです)
  • サイズは約256x192以上である必要があります
  • ただし、カラーである必要はなく、フルグレースケールである必要もありません。わずか16枚のグレーで説得力のある静止画を見てきました
  • パターンを持つことはできますが、人間の目にすぐにわかるパターンはありません。誰かが1つのフレームを取り、1〜2分後にパターンを見つけることができれば(これにより圧縮可能になりますか?)、問題ありません。
  • フレーム2からnはかなりのアルファを使用できますが、アルファの大きな横縞を使い始めたとき、それはすぐに目に見えました。したがって、簡単なチートでRLEの束を積み上げることはできません。
  • 上記のすべてで、30〜33msのフレーム速度で見栄えがする必要があります。可変速度はなく、それよりも大幅に速いものに依存することもありません。

上記の制約に準拠するapngも使用できます。あなたがそれを思い付くことができれば、おそらくmpegでさえあります(私はDCTがその魔法をどのように行うかについては知らない)。

理想的には250kバイトの範囲で何かを下げることができますが、先週調理した9メガの怪物よりもかなり小さいもので解決します。

ああ、最後にもう1つ、グラフィックを提供してくれる人はいないことは明らかです。最終的に自分でそこにたどり着くためのトリックを探しています。

4

4 に答える 4

3

これは非常に興味深い質問です。

静的(ランダムノイズ)は、その性質上、実際には非常に非圧縮性です。情報理論によると、真のノイズは基本的に非圧縮性であり、何かに含まれるパターンが多いほど、圧縮性が高くなります(1または0の実線が完全に圧縮可能になるまで)。

理想は、真のノイズジェネレーター(乱数のみ)を作成することですが、それは問題の制約の範囲内では役に立ちません。

私が考えることができる最も良いことは、静的な小さなタイルをいくつか保存し、それらを千鳥状に表示して、目がパターンに引っかかるのを防ぐことです。それを除けば、これを256 x 192 x 20/2または約500キロバイト(解像度256 x 192の20フレーム、4ビットの色深度を使用)を超えて圧縮することはあまりできません。

アニメーションGIFを16色モードでエンコードするだけで、そのポイントに到達するはずです。

于 2012-08-29T00:55:44.047 に答える
2

はい、不可逆GIF圧縮、またはノイズの多いLZWストリームを出力する特別に装備されたコンプレッサーを使用してこれを実現できます。

LZW圧縮の最良のシナリオは、Xピクセル、X + 1ピクセル、X+2ピクセルなどを出力することです。これをノイズにするのは簡単です。

関数を台無しにして、gfc_lookup(ほぼ)常に最長の辞書アイテムを返し、一連のノイズの多いフレームを圧縮してみてください。

https://github.com/pornel/giflossy/blob/master/src/gifwrite.c#L270

于 2013-01-10T16:12:30.567 に答える
2

古くてまだ答えられていない答え(とにかくチェックされていません)

  1. したがって、NoSignal画像データを作成します

    これをどのように読むかが明らかでない場合:

  2. gifにエンコード

    少し遊んだことがあるので、解像度を使用しました。320x240使用可能な最低ビット解像度は3 bitピクセルあたりです。下は見栄えが良くありません。単一のグローバルパレットのみ(明らか)ここでは300KBの例

    NoSignal 320x240x3

[ノート]

これが一部のアプリ専用の場合は、実行時に画像を生成します。実際には、数行のコードで、箇条書き#1のリンクされた回答を参照してください。

于 2015-05-15T18:11:05.603 に答える
1

普通は簡単ではありません。定義上、良好なランダム性(高エントロピー)は十分に圧縮されません。グレースケールにすることは役立つかもしれませんが、それほど多くはありません。

Webページでこれを実行したい場合で、(ある程度の)制御が可能な場合は、いつでも非常に小さなJSを記述して支援できます...これが実行できる場合は、次のように実行できます。

  1. 高エントロピースタティックで必要なサイズの約1.5倍のgifを作成します。
  2. クリッピングを希望のサイズに設定します。
  3. 次に、開始オフセットを変更してランダムに移動します。

オフセットが互いに適切な距離にある限り(そしてパターンを繰り返さない限り)、通常、オフセットを動きとして識別することは困難であり、実際には静的に見えます。

私は約20年前にAmigaでこのトリックを実行して、限られたメモリのデモで静的をエミュレートしましたが、非常にうまく機能しました...オフセットとコプロセッサを変更することですべてが行われたため、高速な低レベルのコードも必要ありません。プロセッサは残りをビットブリットしました。

于 2013-03-04T20:45:24.203 に答える