九州のごみすてば

九州のごみすてば

あああああ

MENU

AviUtlで使用できるフォント名を名前順に列挙して出力したい

「Local Font 2」プラグインでいらないフォントを非表示にする時、タイトルの行為ができるといいんだけどな~ と思ったので記事を書きました

 

これはAviUtlのコミュニティで詳しい方に教えてもらいました ありがとうございます

 

①patch.aulプラグインを導入する

もう入れて当然だと思いますが、まだ入れていない人は入れてください→

https://kh40qsh1388.hatenablog.com/entry/2022/12/28/000005#patch.aul

 

なぜ入れるのかというと、「コンソール」が必要になるからです

これです

 

ちなみに、このコンソールは右上の×ボタンを押さないでください AviUtlが落ちます

これはバグではなくそういう設計思想だからです

邪魔なときは最小化ボタンを押してください

 

②LuaJITを更新する

これも大半の人は済んでいると思いますが→

https://scrapbox.io/ePi5131/LuaJIT

 

③タイムラインに適当なオブジェクトを用意します

 

④用意したオブジェクトにスクリプト制御フィルタをかけます

 

スクリプト制御のテキストボックスに、以下のコードをコピペします

local ffi = require"ffi";
if not ffi_defined then
ffi.cdef[[
typedef struct {
char pad[28];
char lfFaceName[32];
} LOGFONTA;
typedef int (__stdcall *FONTENUMPROCA)(LOGFONTA*, void*, uint32_t, uint32_t);
int EnumFontFamiliesA(void*, const char*, FONTENUMPROCA, uint32_t);
void* GetDesktopWindow();
void* GetDC(void*);
int ReleaseDC(void*,void*);
]];
ffi_defined=true;
end
local hwnd = ffi.C.GetDesktopWindow();
local hdc = ffi.C.GetDC(hwnd);
debug_print("enumerating fonts...")
ffi.C.EnumFontFamiliesA(hdc, nil, function(lf, _, _, _)
local str = ffi.string(lf.lfFaceName);
if str:sub(1,1) ~= "@" then
debug_print(str);
end
return 1;
end, 0);
ffi.C.ReleaseDC(hwnd, hdc);
debug_print("...end of fonts.")

 

⑥コンソールを表示すると、フォント一覧が取得されています

 

⑦コンソール内のテキストを[Ctrl+A]で全選択し、[Ctrl+C]でコピーします

 

Excelを開いて[Ctrl+V]で貼り付けます

 

⑨例えばC2のセルを選択した状態で、「数式」リボンの「関数の挿入」をクリックします

 

⑩「関数の挿入」ウインドウでREPLACE関数を選択し、OKを押します

 

⑪「関数の引数」ウインドウで、以下の通り入力します

ここでは、フォント名の前にある「[時刻](スペース文字)」を無に置き換えて、フォント名だけを抽出するということをしています

 

「文字列」の項目は⑧の手順でExcelシートのどこに貼り付けたかによりますが、うまく空気を読んでください

 

⑫時刻とスペース文字を排除して、フォント名だけを抜き出せたことを確認します(画像はフォント名ではないだろ)

 

⑬抜き出せたセルと同じように、全てのフォント名でも同じことをするためにオートフィルをします

 

オートフィルがわからない人は、C2セルを選択した状態で、

[Ctrl+Shift+↓]キーを同時押しした後、Alt→H→F→I→Sのキーを順番に押します

「種類」項目の「オートフィル(F)」のラジオボタンを選択し、OKを押します

 

⑭同じようにフォント名だけを抜き出せたことを確認します



⑮C列を右クリックし、コピーを選択します

画像で言う緑がけの部分を右クリックすればよいです

 

⑯E列を右クリックして、「貼り付けのオプション」から「値」をクリックして貼り付けます

 

⑰E列一番上の「enumerating fonts...」から一番下の「...end of fonts.」の間のセルを選択した状態で、「ホーム」リボンの「並べ替えとフィルター」→「昇順(S)」をクリックします

 

⑱E列のフォント名一覧が名前順に並べ替えられたことを確認します

⑯でわざわざ同じものをコピペしたのは、関数を参照しているのでこのままだと並べ替えができないからです

 

⑲テキストファイルに並べ替えたフォント一覧をコピペします

 

⑳AviUtlのフォント一覧を名前順で取得することができました

あとはここからコピペして、「Local Font 2」プラグインのExclude.txtに除外したいフォント名をぶち込みましょう