フィルタプラグイン

mojie

概要

登録した文字列を画像に置き換えるプラグイン

詳細説明

mojie

AviUtl2(AviUtl ExEdit2)で特定の文字列を画像に置き換えるプラグイン

mojieのサムネイル

主な機能

  • PNG、JPEG、GIF、BMP、TIFF、ICOに対応しています。
    • JPEG、GIFなどは管理用PNGへ自動変換されます。
    • アニメーションGIF未対応。先頭フレームを静止画として使用します。
  • ふりがな機能
  • 複数画像を組み合わせる画像合成機能

インストール

AviUtl2カタログから

AviUtl2カタログで mojie を検索

GitHub Releaseから

  1. GitHub Releaseから mojie.aux2mojieテキスト.object をダウンロードします。
  2. AviUtl2を終了します。
  3. AviUtl2のデータフォルダーへ、次の2ファイルを配置します。
data/
├─ Alias/
│  └─ mojieテキスト.object
└─ Plugin/
   └─ mojie/
      └─ mojie.aux2

通常インストールのデータフォルダーは C:\ProgramData\aviutl2、ポータブル構成では aviutl2.exe と同じ場所の data です。使用環境にすでに data フォルダーがある場合は、その中へ配置してください。

  1. AviUtl2を起動します。
  2. 初回だけ未確認プラグインの読み込み確認が表示された場合は、mojieの読み込みを許可します。
  3. 「設定 → プラグイン設定 → mojie」が表示されることを確認します。

更新時もAviUtl2を終了してから、上記のファイルを上書きしてください。

最初の使い方

1. 置換画像を登録する

  1. 「設定 → プラグイン設定 → mojie」を開きます。
  2. 「画像設定」タブを開きます。
  3. 画像ソースの「グローバル設定」タブで「フォルダー追加...」または「画像追加...」を選びます。画像ソースの一覧へ、フォルダーやファイルをドラッグ&ドロップして追加することもできます。
  4. フォルダー配下も探す場合は「サブフォルダーを含める」を有効にします。
  5. 「画像リストを再読み込み」を押します。
  6. 認識画像の一覧から画像を選び、置換文字列を確認または編集します。
  7. 「OK」を押して保存します。

初期状態の置換文字列は、画像の拡張子を除いたファイル名です。たとえば 7s.png7s.jpg を登録すると、 7s がその画像へ置き換わります。1枚の画像へ複数の置換文字列を設定する場合は、1行に1つずつ入力します。

認識画像のチェックを外すと、その画像を設定から削除せず一時的に無効化できます。

2. mojieテキストを追加する

レイヤーの右クリックメニューから「メディアオブジェクトを追加 → mojieテキスト」を選びます。追加されたオブジェクトの「mojie本文 → 本文」へ文章を入力してください。画像登録直後に反映されない場合は、AviUtl2を再起動してください。

標準の「テキスト」欄には、mojieの変換処理を呼び出すための式が入っています。通常は編集せず、「mojie本文 → 本文」を使用してください。

全体設定

「全体設定」タブでは、すべての置換に共通する動作を設定します。

全般

  • 「半角・全角を区別しない」
    • 7s7m7m のように文字幅だけが違う表記を同一視します。
    • 全角・半角カナと、結合文字を使った濁点・半濁点の違いにも対応します。
  • 「グローバル設定を読み込む」
    • すべてのプロジェクトで共有する画像と画像合成を使用します。
  • 「ローカル設定を読み込む」
    • 現在のプロジェクトと同じフォルダーにある設定を使用します。
    • 両方の読み込みチェックを外すと、mojieの文字列置換は無効になります。
  • 「画像キャッシュを再生成」
    • 現在の画像ソースから辿れるグローバル・ローカル画像の管理キャッシュをすべて作り直します。
    • 登録後に元画像を変更したときなど、表示へ変更が反映されない場合に使用します。

デフォルト値の設定

  • 画像サイズ
    • 「行の高さ」:現在の文字の高さに合わせます。
    • 「割合(%)」:現在の文字サイズを100%として指定します。
    • 「固定(px)」:指定した文字サイズ値で画像を表示します。
  • 横余白・縦余白
    • 置換画像の位置を横・縦方向へずらします。
    • 正負の値を使用できます。縦方向は正の値で下へ移動します。
  • ふりがなサイズ(%)
    • 画像または画像合成でふりがなを表示するときの既定サイズです。

設定の管理

存在するグローバル設定とローカル設定のファイルパスを確認し、関連付けられたアプリで直接開けます。設定画面を開いている間に外部アプリでファイルが変更された場合は、外部の変更を守るためmojieからの保存を中止します。その場合は設定画面を開き直してください。

グローバル設定とローカル設定

AviUtl2で共有するグローバル設定の他に、個別にローカル設定ファイルを管理することもできます。

グローバル設定は、AviUtl2のデータフォルダーに保存されます。

data/Plugin/mojie/config.json

ローカル設定は保存済みプロジェクトと同じフォルダーにある mojie.json を読み書きします。

<プロジェクトのフォルダー>/mojie.json
  • グローバル設定:すべてのプロジェクトで共有したい画像・画像合成向け
  • ローカル設定:そのプロジェクトまたは同じフォルダー内のプロジェクトだけで使いたい画像・画像合成向け
  • 全般設定とデフォルト値は常にグローバル側の config.json に保存
  • 未保存のプロジェクトではローカル設定を編集不可
  • 同じフォルダーに複数の .aup2 がある場合、それらは同じ mojie.json を共有

ローカル設定でプロジェクトフォルダー内の画像を選ぶと、可能な範囲で相対パスとして保存されます。プロジェクト一式を別の場所へ移動しやすくなります。

「名前を付けて保存」した場合、保存先に mojie.json があれば保存先の設定を使用します。保存先にない場合は、使用中のローカル設定を新しいフォルダーへ引き継ぎます。

同じ置換文字列が競合した場合は、長い文字列を優先します。同じ長さではローカル設定がグローバル設定より優先され、同じ設定内では後に登録された規則を優先します。画像合成と単体画像が同じ文字列を持つ場合、同じ設定内では画像合成を優先します。

単体画像の設定

「画像設定」タブの画像ソースには、「グローバル設定」と「ローカル設定」の2種類があります。認識画像一覧の「設定」列で、各画像がどちらから来たものか確認できます。

画像を選択すると、次の項目を編集できます。

  • 有効:置換に使用するかどうか
  • 置換文字列:1行に1つ、複数指定可能
  • ふりがなを表示:置換画像の上にふりがなを表示
  • ふりがな指定:表示する文字を変更。空欄なら実際に一致した置換文字列を使用

画像ファイルが見つからなくなっても、編集済みの置換文字列などは設定内に保持されます。パスを直すか画像を戻してから再読み込みしてください。

画像合成

「画像合成」タブでは、複数の登録画像を順番に並べ、1つの置換規則として使用できます。

  1. 「グローバル設定」または「ローカル設定」を選びます。
  2. 「追加」を押して画像合成を作ります。
  3. 名前と置換文字列を入力します。
  4. 左下の画像候補をダブルクリックするか、右側の「合成する画像」へドラッグ&ドロップします。
  5. 「上へ」「下へ」で表示順を調整します。
  6. 必要に応じて画像間隔とふりがなを設定します。

グローバルの画像合成ではグローバル画像だけを使用できます。ローカルの画像合成ではグローバル画像とローカル画像の両方を使用できます。無効または見つからない画像は新しく追加できません。また、すでに参照している画像が無効または見つからなくなった場合は、画像合成全体を置換に使用しません。

ふりがな

単体画像または画像合成の「ふりがなを表示」を有効にすると、置換された画像の上へAviUtl2標準のルビ機能でふりがなを表示します。

  • 単体画像の「ふりがな指定」が空欄:実際に一致した文字列を表示
  • 単体画像の「ふりがな指定」に入力あり:入力した文字を表示
  • 画像合成:画像合成の「名前」を画像列全体へ表示
  • サイズ:全体設定の「ふりがなサイズ(%)」を使用
  • フォント:その位置で使用中のフォントを継承

本文内のインライン構文を使うと、「ふりがなを表示」が無効でも、その置換箇所だけふりがなを表示できます。

置換箇所ごとのインライン構文

認識対象文字列の直後へ、空白を入れずに指定します。単体画像と画像合成の両方で使用できます。

入力例 動作
7s#チャッソー# ふりがなを「チャッソー」に変更。サイズは全体設定を使用
7s#チャッソー#50# ふりがなを変更し、サイズを50%に変更
7s[80] 画像サイズを80%に変更
7s[80,5] サイズを80%、横位置を+5に変更。縦位置は継承
7s[80,5,-2] サイズを80%、横位置を+5、縦位置を-2に変更

#...#[...] はそれぞれ1回まで併用でき、順番は問いません。

7s#チャッソー#50#[80,5,-2]
7s[80,5,-2]#チャッソー#50#

上の2つは同じ結果になります。適用の優先順位は次のとおりです。

インライン指定 > 画像設定の一括上書き > 全体設定のデフォルト値

置換画像が連続している場合は、連続した画像全体へふりがなを均等配置します。

1m4m7m#イッスーチーマン#50#

オブジェクト単位の一括上書き

「mojie本文」の「画像設定を一括上書き」を有効にすると、そのオブジェクト内で置換されるすべての画像へ同じ設定を適用できます。

  • サイズ方式:行の高さ/割合/ピクセル
  • サイズ
  • 横余白
  • 縦余白

画像合成の場合は、構成するすべての画像へ同じ値が適用されます。画像合成固有の画像間隔はそのまま使用します。

「画像設定を一括上書き」が無効なときは、下の数値が画面に表示されていても描画には使用しません。

制約と注意事項

  • PNG、JPG/JPEG、GIF、BMP、TIFF、ICOを読み込めます。DDS、JXR/WDP/HDP、WebP、HEIF、AVIFも候補として扱いますが、Windowsに対応画像コーデックがない環境では変換できません。
  • アニメーションGIFなどの複数フレーム画像は、先頭フレームだけを使用します。
  • AviUtl2の標準テキスト制御構文、スクリプト、コメントの内部は置換しません。
  • ほかのフィルタ効果を同じテキストオブジェクトへ追加すると、置換画像を含むオブジェクト全体へ適用されます。置換画像だけをフィルタ対象外にする機能はありません。
  • 画像はAviUtl2の data/Font/mojie へ管理名でコピーされます。安全のため、使われなくなったキャッシュ画像は自動削除しません。

アンインストール

  1. AviUtl2を終了します。
  2. 次のファイルを削除します。
data/Plugin/mojie/mojie.aux2
data/Alias/mojieテキスト.object

設定や管理キャッシュも不要な場合は、次も削除できます。

data/Plugin/mojie/config.json
data/Font/mojie/

ローカル設定を削除する場合は、各プロジェクトフォルダーの mojie.json を個別に削除してください。同じフォルダーにある複数プロジェクトで共有している可能性があるため、内容を確認してから削除してください。

技術ノート

方法

mojieはAviUtl2標準のテキストエンジンに描画を任せています。AviUtl2は data/Font 配下の画像をテキスト制御の <&name> で表示できるため、mojieは登録画像を data/Font/mojie へ管理名で同期し、一致した置換文字列を <&mojie_管理ID> に置き換えます。

管理IDは画像の正規化したパスから生成します。元のファイル名が同じ画像を複数登録しても衝突しにくく、同じパスであれば再起動後も同じ名前を使用します。

画像形式によって同期方法が異なります。

  • BMPと透明画素を持たないPNGは変換せず、そのまま管理キャッシュへコピーします。
  • 透明・半透明画素を持つPNGは、AviUtl2の絵文字描画で正しく合成できるようRGBをアルファ値で事前乗算した管理用PNGへ変換します。
  • JPEG、GIF、TIFF、ICOなどはWindows Imaging Component(WIC)で先頭フレームを32-bit BGRAとして読み込み、同じアルファ事前乗算を適用した管理用PNGへ変換します。
  • DDS、JXR/WDP/HDP、WebP、HEIF、AVIFも同じPNG変換経路を使いますが、必要なWICコーデックがWindowsになければ変換できません。

画像サイズ、相対位置、画像合成の間隔、ふりがなも、AviUtl2標準のテキスト制御を組み合わせて表現します。そのため、文字と画像のレイアウト、テキストオブジェクトに追加されたフィルタ効果などは、AviUtl2標準のテキスト描画と同じように動作します。

data/Font/mojie の管理キャッシュは、ファイル名だけでmojieの所有物か安全に判定できないため、不要になっても自動削除しません。
元画像を差し替えた場合は、設定画面の「画像キャッシュを再生成」で、現在辿れる画像の管理キャッシュを強制的に更新できます。

透過PNGとアルファ事前乗算

PNGのRGB値はアルファ値で事前乗算されていません。たとえば完全透明の画素でも、RGBA = (255, 255, 255, 0) のように透明部分へ白いRGB値を保持できます。一方、AviUtl2の内部画像形式は乗算済みアルファです。

同じ透過PNGを通常の「画像ファイル」オブジェクトで読み込むと正しく表示されますが、フォント画像として配置し、テキスト制御の <&name> で絵文字表示すると透明部分のRGBが白く描画される場合があります。このため、mojieは透明または半透明の画素を検出した画像について、管理キャッシュへ書き出す前に各色成分を次のように変換します。

R' = round(R * A / 255)
G' = round(G * A / 255)
B' = round(B * A / 255)

アルファ値は変更しません。完全透明の画素はRGBも0になり、半透明の画素はアルファ値に応じた乗算済みの色になります。変換対象は data/Font/mojie の管理キャッシュだけで、登録元の画像ファイルは変更しません。全画素が完全不透明なPNGは変換の必要がないため、そのままコピーします。

開発者向けセットアップ

必要な環境は、Windows x64、Visual Studio 2019のMSVC v142 x64ビルドツール、Windows 10 SDK 10.0.19041.0以降、CMake 3.16以降、Gitです。

PowerShellでリポジトリ直下から実行します。

./scripts/setup.ps1
./scripts/build.ps1

setup.ps1 はAviUtl2 SDKを .deps へ取得し、C:\Program Files\AviUtl2 を元に sandbox/AviUtl2 の隔離テスト環境を作ります。本体が別の場所にある場合は次のように指定します。

./scripts/setup.ps1 -AviUtl2Source "D:\Tools\AviUtl2"

build.ps1 はDebug版をビルドして隔離環境へ配置します。隔離環境へ配置せずビルドだけ行う場合は -NoDeploy を使用できます。

./scripts/build.ps1 -NoDeploy
./scripts/build.ps1 -Configuration Release

単体テストは次のコマンドで実行します。

Push-Location build
ctest -C Debug --output-on-failure
Pop-Location