【AviUtl2】JPEG Crush
AviUtl ExEdit2 で利用できる、JPEGグリッチエフェクトのアニメーション効果スクリプトを作成しました。
オブジェクトのピクセルデータを意図的に壊れたJPEGとしてエンコード・デコードすることで、独特のグリッチ映像表現を生成します。圧縮アーティファクト、バイナリ破壊、量子化テーブル改ざんなど、複数のアプローチを組み合わせて多彩なグリッチを作り出せます。
興味があれば、以下のリンクからダウンロードしてご活用してみてください。
ご意見やフィードバックも歓迎致します。
以下の変更を行いました。お手数ですが必要ならば再度ダウンロードをお願いいたします。
範囲開始(%) / 範囲終了(%)の動作を変更しました。どちらも0の時終了を100にするという不要なバリテーションが残っていたので削除しました。
インストール
JPEGCrush.mod2 と JPEGCrush.anm2 を AviUtl ExEdit2 の script フォルダ(またはそのサブフォルダ)に配置してください。
圧縮品質
JPEG エンコード時の品質を 1〜100 で指定します(デフォルト: 50)。値が低いほど強い圧縮アーティファクトが現れます。
バイナリ破壊
エンコードされた JPEG バイナリのエントロピーコード部分(SOSマーカー以降、EOIマーカー直前まで)に対してランダムな書き換えを行います。
バイナリ破壊 (チェック)
このグループの処理を有効にします。
破壊バイト数
ランダムに選択して書き換えるバイトの数を 0〜1000 で指定します(デフォルト: 10)。対象範囲のバイト数を超える値を指定した場合、対象範囲のバイト数が上限になります。
範囲開始(%) / 範囲終了(%)
破壊対象とするエントロピーデータの開始・終了位置を全体に対するパーセントで指定します。
シード
乱数シードを 0〜65535 で指定します。同じシードは常に同じ結果を生成するため、アニメーションでの再現や固定グリッチに利用できます。
破壊モード
書き換え後のバイト値の決定方法を選びます。
ランダム値置換: 指定した最小値・最大値の範囲でランダムな値に書き換えます。
固定値置換: すべての破壊バイトを指定した固定値に置換します。
量子化テーブル改ざん(輝度)
JPEG エンコード時に輝度(Y)成分の量子化テーブル(64要素)を改ざんします。量子化値を大きくすると対応する周波数成分の情報が荒くなり、独特のブロックノイズが発生します。
「単一改ざん」と「ランダム改ざん」を個別に ON/OFF 可能です。両方が有効な場合、ランダム改ざんが先に適用され、その後に単一指定が上書きされます。
輝度テーブル改ざん (チェック)
このグループの処理を有効にします。
単一改ざん有効 / テーブル位置 / 上書き値
テーブルの特定インデックス(0〜63)を指定した量子化値(1〜255)で上書きします。
ランダム改ざん有効 / 改ざん個数
ランダムに選択した位置へランダム値を書き込む回数を指定します(0〜1000)。同じ位置に複数回書き込む場合があります。
ランダム最小値 / ランダム最大値
ランダム改ざん時の量子化値の範囲を指定します(1〜255)。
ランダム開始位置 / ランダム終了位置
ランダム改ざんの対象インデックス範囲を 0〜63 で指定します。
シード
ランダム改ざんの乱数シードを 0〜65535 で指定します。
量子化テーブル改ざん(色差)
色差(Cb/Cr)成分の量子化テーブルを改ざんします。パラメータの意味・挙動は輝度グループと同一です。
デコードバイパス
JPEG デコード処理の内部ステップを意図的に省略し、通常とは異なる中間状態をピクセルとして出力します。3つのチェックを組み合わせることで挙動が変化します。
周波数成分スキップ
逆DCT(IDCT)をスキップします。
色変換スキップ
YCbCr→RGB への色変換をスキップし、Y/Cb/Cr の値をそのまま R/G/B として出力します。
量子化スキップ
逆量子化をスキップします。
アルファチャンネル設定
アルファ保持
ON のとき、エフェクト適用後に元のアルファ値を復元します(デフォルト: ON)。OFF のとき、出力のアルファ値をすべて 255(完全不透明)に固定します。
アルファ破壊
ON かつ「アルファ保持」が ON のとき、アルファチャンネルに対してもバイナリ破壊と同じパラメータでグリッチ処理を行います。アルファ値をグレースケール画像として JPEG エンコード→破壊→デコードします。
注意: 「アルファ破壊」は「アルファ保持」が ON のときのみ動作します。
リスタートマーカー設定
JPEG にリスタートマーカー(RSTn)を挿入します。リスタートマーカーがあると、バイナリ破壊によるエラーの伝播がマーカー単位でリセットされるため、グリッチが画面全体に広がらず局所的になりやすくなります。
リスタートマーカー有効 (チェック)
リスタートマーカーの挿入を有効にします。
リスタート間隔
何 MCU 行ごとにリスタートマーカーを挿入するかを 1〜64 で指定します(デフォルト: 8)。値が小さいほどマーカーが密になりグリッチが局所化されます。
PIテーブルによる外部制御
その他 グループの PI 値を利用することで、スクリプト制御(アニメーション等)からパラメータを動的に上書きできます。PI テーブルに設定したキーはスライダーの値より優先されます。
-- 例: スクリプト制御からシードをフレーム番号で変化させる
PI = { seed = obj.frame }
