複数のフォントを使ったAviUtlのテキストオブジェクトを量産するために、Python3用のregexモジュールを使ってみた。

By | 2018年10月1日 , Last update: 2018年10月29日

はじめに

前の記事の説明用の動画にpandanote.info公式チャンネルにアップロードした説明系動画とはちょっと違った雰囲気の動画にしたいと思い、英語と日本語のフォントとして別のものを組み合わせた説明文を入れようと考えています。

↓のような感じにすることを考えているわけです。

上記の動画では日本語用のフォントにメイリオ、英語用のフォント(厳密には正しくないかもしれませんが、便宜上この記事では一般的な日本語の記述の際に使用するフォントを「日本語用のフォント」、一般的な英語の記述の際に使用するフォントのことを「英語用のフォント」と書くことにします。)はここからダウンロードしてきたFutura Lt BTを使っています。このFutura Lt BTには日本語のグリフが存在しないため、メイリオを使って補完しているわけです。

AviUtlのテキストオブジェクトでは、オブジェクト内でタグ指定をするとフォントの大きさ、種類、色等をタグによって指定する機能がありますので、動画内で使用するテキストオブジェクトが少ない場合には以下のように手で入力することで何とか対応できます(上記の動画ではこの方法で対応しました)。

(※上記の図に登場する地名等は架空のものであり、実在の地名等とは関係ありません。)

一方で、説明用動画の場合には、動画内に挿入する文章の個数が多くなりがちです。そこで、上図のようなおしゃれな文字の入ったテキストオブジェクトを作るとなると、できればフォント指定用のタグは自動的に入れたいところです。自動的に入れることができれば、いろいろと捗ると思います。

以上、例によって前置きがかなり長くなりましたが、AviUtlでテキストオブジェクトを作るときに英語用のフォントを第1優先、日本語用のフォントを第2優先として文字列の各文字に使用できるフォントのタグ付けを行うPython3のコードを書いてみたところ、Python3の正規表現の仕組みがよくわかっていなかったために微妙にハマったので、この記事ではそれについて書きます。

スポンサーリンク

まずは、問題の設定から。

以下のテキストファイルで英語用のフォントでグリフが存在する文字については英語用のフォントを割り当て、それ以外の文字については日本語のフォントを割り当てるようにタグ付けを行うことを考えます。なお、1行につき1個のテキストオブジェクトとするので、行をまたぐ設定は考えないことにします。

eclipse-installerというディレクトリの下でインストーラを起動します。
すると、インストーラが起動します。
今回のインストールでは、"Eclipse IDE for Java EE Developers"をクリックします。
すると、以下の画面に切り替わりますので…
"Installation Folder"を確認後…
"INSTALL"をクリックします。
インストールが開始されますので、しばし待ちます。
ライセンスの確認画面が表示されることがありますので…
その場合には、ライセンスの内容を確認した上で…
"Remember accepted licenses"のチェックボックスにチェックを入れて…
"Accept"ボタンをクリックすると…
インストールが続行されます。
ダウンロードのスピードが遅くても気にしません。(`・ω・´)
ひたすら待ちます…
証明書を信頼するか確認する画面が表示された場合には…
証明書の情報を確認した上で…
"Select"ボタンをクリックしてから…
"Accept selected"をクリックすると…
インストールが続行されます。
インストールが完了すると、インストーラの表示が以下のように切り替わりますので…
"LAUNCH"をクリックすると…
インストールされたEclipseが起動します。
Eclipseが起動すると、スプラッシュ画面が表示されてから…
ワークスペースの選択画面が表示されることがあります。
以下のような画面が表示された場合には…
"Workspace:"のディレクトリ名を確認後…
"Launch"ボタンをクリックすると…
起動を続行させることができます。
しばらく待つと、"Welcome"画面が表示されます。
そこで、画面右上の"Workbench"ボタンを押します。
ワークベンチが表示されると、Eclipseのインストール作業は完了です。
お疲れさまでした。(`・ω・´)
次にPhoton対応のScala IDEをインストールします。
メニューバーから"Help"→"Install New Software"を選択します。
Install画面が表示されますので…
"Work with:"にPhoton対応のScala IDEのインストール用のURLを入力して…
"Add"ボタンをクリックします。
すると…
Add Repository画面が表示されますので…
"Name"に適当なリポジトリ名を入力し…
"Add"ボタンを押します。
すると、上図のポップアップ画面が消去されて…
Install画面にインストール可能なソフトウェアが表示されますので…
すべてのチェックボックスにチェックを入れて…
"Next>"ボタンをクリックします。
画面表示が切り替わり、"Install Details"画面が表示されますので…
"Next>"ボタンをクリックします。
さらに画面表示が切り替わり…
"Review Licences"画面が表示されますので…
ライセンスの内容を確認後…
"I accept the terms of the licence agreements"のラジオボタンをチェックし…
"Finish"ボタンを押します。
"Review Licences"画面が消え、Scala IDE for Eclipseのインストールが開始されます。
インストールの途中で"Security Warning"ポップアップが表示されますので…
内容を確認後、"Install anyway"ボタンをクリックします。
"Security Warning"ポップアップが消去された後しばらくすると…
"Software Updates"画面が表示されますので…
"Restart Now"をクリックします。
Eclipseが再起動し、Scala IDE for Eclipseのインストールが完了します。(`・ω・´)
最後に動作確認も兼ねて、Scalaのアプリケーションを開発してEclipse上で動かしてみます。
メニューバーから"Window"→"Perspective"→"Open Perspective"→"Other…"を選択します。
"Open Perspective"ポップアップが表示されますので…
"Scala"をクリックして選択後…
"Open"ボタンをクリックします。
"Scala"パースペクティブが表示されますので…
"Package Explorer"を右クリックすると表示される…
ポップアップメニューから"New"→"Scala Project"を選択します。
“New Scala Project"ウィザードが表示されますので…
Scalaのプロジェクトを作成していきます。
ソースフォルダはJavaの例に倣い…
src/main/scalaとします。
ソースコード用のパッケージを作り…
ソースコード用のファイルを作ります。
とりあえず、"Hello World"的な文字列を…
標準出力に表示させてみます。
コンソールの部分をちょっと広げてから…
"Package Explorer"内で、Scalaのプログラムが記述されたファイルを右クリックして…
"Run As"→"Scala Application"を選択します。
コンソールに下図の矢印のように表示されれば、動作確認は成功です。
お疲れさまでした。(`・ω・´)

また、タグ付けがうまくいった暁にはこのファイルをtxt2exo.py(詳しくはこの記事参照。)の入力として与えることでテキストオブジェクトを量産する予定なので、量産する方法についてもここでは考慮しなくてもよいものとします。

さくさくとPython3でプログラムを書きます…

と行きたいところですが…

ここで、

「Python3での日本語の正規表現って、どうやって記述すればいいんだっけ?」

という問題にいきなり直面するわけです。Python3では文字コードはUnicodeになる上に、最終的な出力先であるAviUtlのexoファイルにおいても文字コードはUTF-16になりますので、漢字の範囲を”[一-龠]”的な感じで指定してしまい、

「龠ってなんですか?」

って質問されても困るだけなので、もうちょいエレガントな解答が欲しいところです。

結論としてはUnicodeの文字種指定をすることで、(少なくとも建前上は、)日本語を記述する際に使われる文字に対応する文字コードの範囲を正規表現の表現上意識させないようにすることを考えます。


スポンサーリンク

ところが、Python3の正規表現モジュールであるreモジュールはUnicodeの文字種指定には対応していないので、PyPIのサイトにドキュメントがあるregexモジュール(Python2の途中まで存在していたregexモジュールとは別物のようです。)をインストールし、これをPython3のプログラムでimportして使用することにします。

regexモジュールのインストール

regexモジュールは以下のコマンドでインストールできます(pipコマンドへのパスなどが通っていることが前提です)。

$ pip install regex

 

1st try: 漢字、ひらがな及びカタカナが連続する部分の直前並びにそれ以外の文字が連続する部分の直前にタグを挿入してみる。

regexモジュールがインストールできたら、以下のような正規表現を使って漢字、ひらがな及びカタカナが連続する部分の直前並びにそれ以外の文字が連続する部分の直前にタグを挿入することができるかどうか試してみます。

なお、変数lineにはファイルからテキストを1行読み込んだ結果が格納されているものとします。

import regex line = regex.sub(r'([^\p{Katakana}\p{Hiragana}\p{Han}\r\n]+)’,”<“+textConfig+”>\1”,line) print(regex.sub(r'([\p{Katakana}\p{Hiragana}\p{Han}]+)’,”<“+multiByteTextConfig+”>\1″,line),end=”)

 
上記のコード片を組み込んだPython3のプログラムを使ってタグを挿入した結果は以下の通りになります。

<s50,Futura Lt BT>eclipse-installer<s50,メイリオ>というディレクトリの下でインスト<s50,Futura Lt BT><s50,メイリオ>ラを起動します<s50,Futura Lt BT>。 <s50,メイリオ>すると<s50,Futura Lt BT>、<s50,メイリオ>インスト<s50,Futura Lt BT><s50,メイリオ>ラが起動します<s50,Futura Lt BT>。 <s50,メイリオ>今回のインスト<s50,Futura Lt BT><s50,メイリオ>ルでは<s50,Futura Lt BT>、Eclipse IDE for Java EE Developers<s50,メイリオ>をクリックします<s50,Futura Lt BT>。 <s50,メイリオ>すると<s50,Futura Lt BT>、<s50,メイリオ>以下の画面に切り替わりますので<s50,Futura Lt BT>… <s50,Futura Lt BT>Installation Folder<s50,メイリオ>を確認後<s50,Futura Lt BT>… <s50,Futura Lt BT>INSTALL<s50,メイリオ>をクリックします<s50,Futura Lt BT>。 <s50,メイリオ>インスト<s50,Futura Lt BT><s50,メイリオ>ルが開始されますので<s50,Futura Lt BT>、<s50,メイリオ>しばし待ちます<s50,Futura Lt BT>。 <s50,メイリオ>ライセンスの確認画面が表示されることがありますので<s50,Futura Lt BT>… <s50,メイリオ>その場合には<s50,Futura Lt BT>、<s50,メイリオ>ライセンスの内容を確認した上で<s50,Futura Lt BT>… <s50,Futura Lt BT>Remember accepted licenses”<s50,メイリオ>のチェックボックスにチェックを入れて<s50,Futura Lt BT>… <s50,Futura Lt BT>Accept<s50,メイリオ>ボタンをクリックすると<s50,Futura Lt BT>… <s50,メイリオ>インスト<s50,Futura Lt BT><s50,メイリオ>ルが続行されます<s50,Futura Lt BT>。 <s50,メイリオ>ダウンロ<s50,Futura Lt BT><s50,メイリオ>ドのスピ<s50,Futura Lt BT><s50,メイリオ>ドが遅くても気にしません<s50,Futura Lt BT>。(`・ω・´) <s50,メイリオ>ひたすら待ちます<s50,Futura Lt BT>… <s50,メイリオ>証明書を信頼するか確認する画面が表示された場合には<s50,Futura Lt BT>… <s50,メイリオ>証明書の情報を確認した上で<s50,Futura Lt BT>… <s50,Futura Lt BT>Select<s50,メイリオ>ボタンをクリックしてから<s50,Futura Lt BT>… <s50,Futura Lt BT>Accept selected”<s50,メイリオ>をクリックすると<s50,Futura Lt BT>… <s50,メイリオ>インスト<s50,Futura Lt BT><s50,メイリオ>ルが続行されます<s50,Futura Lt BT>。 <s50,メイリオ>インスト<s50,Futura Lt BT><s50,メイリオ>ルが完了すると<s50,Futura Lt BT>、<s50,メイリオ>インスト<s50,Futura Lt BT><s50,メイリオ>ラの表示が以下のように切り替わりますので<s50,Futura Lt BT>… <s50,Futura Lt BT>LAUNCH<s50,メイリオ>をクリックすると<s50,Futura Lt BT>… <s50,メイリオ>インスト<s50,Futura Lt BT><s50,メイリオ>ルされた<s50,Futura Lt BT>Eclipse<s50,メイリオ>が起動します<s50,Futura Lt BT>。 <s50,Futura Lt BT>Eclipse<s50,メイリオ>が起動すると<s50,Futura Lt BT>、<s50,メイリオ>スプラッシュ画面が表示されてから<s50,Futura Lt BT>… <s50,メイリオ><s50,Futura Lt BT><s50,メイリオ>クスペ<s50,Futura Lt BT><s50,メイリオ>スの選択画面が表示されることがあります<s50,Futura Lt BT>。 <s50,メイリオ>以下のような画面が表示された場合には<s50,Futura Lt BT>… <s50,Futura Lt BT>Workspace:”<s50,メイリオ>のディレクトリ名を確認後<s50,Futura Lt BT>… <s50,Futura Lt BT>Launch<s50,メイリオ>ボタンをクリックすると<s50,Futura Lt BT>… <s50,メイリオ>起動を続行させることができます<s50,Futura Lt BT>。 <s50,メイリオ>しばらく待つと<s50,Futura Lt BT>、Welcome<s50,メイリオ>画面が表示されます<s50,Futura Lt BT>。 <s50,メイリオ>そこで<s50,Futura Lt BT>、<s50,メイリオ>画面右上の<s50,Futura Lt BT>Workbench<s50,メイリオ>ボタンを押します<s50,Futura Lt BT>。 <s50,メイリオ><s50,Futura Lt BT><s50,メイリオ>クベンチが表示されると<s50,Futura Lt BT>、Eclipse<s50,メイリオ>のインスト<s50,Futura Lt BT><s50,メイリオ>ル作業は完了です<s50,Futura Lt BT>。 <s50,メイリオ>お疲れさまでした<s50,Futura Lt BT>。(`・ω・´) <s50,メイリオ>次に<s50,Futura Lt BT>Photon<s50,メイリオ>対応の<s50,Futura Lt BT>Scala IDE<s50,メイリオ>をインスト<s50,Futura Lt BT><s50,メイリオ>ルします<s50,Futura Lt BT>。 <s50,メイリオ>メニュ<s50,Futura Lt BT><s50,メイリオ><s50,Futura Lt BT><s50,メイリオ>から<s50,Futura Lt BT>HelpInstall New Software<s50,メイリオ>を選択します<s50,Futura Lt BT>。 <s50,Futura Lt BT>Install<s50,メイリオ>画面が表示されますので<s50,Futura Lt BT>… <s50,Futura Lt BT>Work with:”<s50,メイリオ><s50,Futura Lt BT>Photon<s50,メイリオ>対応の<s50,Futura Lt BT>Scala IDE<s50,メイリオ>のインスト<s50,Futura Lt BT><s50,メイリオ>ル用の<s50,Futura Lt BT>URL<s50,メイリオ>を入力して<s50,Futura Lt BT>… <s50,Futura Lt BT>Add<s50,メイリオ>ボタンをクリックします<s50,Futura Lt BT>。 <s50,メイリオ>すると<s50,Futura Lt BT>… <s50,Futura Lt BT>Add Repository<s50,メイリオ>画面が表示されますので<s50,Futura Lt BT>… <s50,Futura Lt BT>Name<s50,メイリオ>に適当なリポジトリ名を入力し<s50,Futura Lt BT>… <s50,Futura Lt BT>Add<s50,メイリオ>ボタンを押します<s50,Futura Lt BT>。 <s50,メイリオ>すると<s50,Futura Lt BT>、<s50,メイリオ>上図のポップアップ画面が消去されて<s50,Futura Lt BT>… <s50,Futura Lt BT>Install<s50,メイリオ>画面にインスト<s50,Futura Lt BT><s50,メイリオ>ル可能なソフトウェアが表示されますので<s50,Futura Lt BT>… <s50,メイリオ>すべてのチェックボックスにチェックを入れて<s50,Futura Lt BT>… <s50,Futura Lt BT>Next><s50,メイリオ>ボタンをクリックします<s50,Futura Lt BT>。 <s50,メイリオ>画面表示が切り替わり<s50,Futura Lt BT>、Install Details<s50,メイリオ>画面が表示されますので<s50,Futura Lt BT>… <s50,Futura Lt BT>Next><s50,メイリオ>ボタンをクリックします<s50,Futura Lt BT>。 <s50,メイリオ>さらに画面表示が切り替わり<s50,Futura Lt BT>… <s50,Futura Lt BT>Review Licences<s50,メイリオ>画面が表示されますので<s50,Futura Lt BT>… <s50,メイリオ>ライセンスの内容を確認後<s50,Futura Lt BT>… <s50,Futura Lt BT>I accept the terms of the licence agreements”<s50,メイリオ>のラジオボタンをチェックし<s50,Futura Lt BT>… <s50,Futura Lt BT>Finish<s50,メイリオ>ボタンを押します<s50,Futura Lt BT>。 <s50,Futura Lt BT>Review Licences<s50,メイリオ>画面が消え<s50,Futura Lt BT>、Scala IDE for Eclipse<s50,メイリオ>のインスト<s50,Futura Lt BT><s50,メイリオ>ルが開始されます<s50,Futura Lt BT>。 <s50,メイリオ>インスト<s50,Futura Lt BT><s50,メイリオ>ルの途中で<s50,Futura Lt BT>Security Warning<s50,メイリオ>ポップアップが表示されますので<s50,Futura Lt BT>… <s50,メイリオ>内容を確認後<s50,Futura Lt BT>、Install anyway”<s50,メイリオ>ボタンをクリックします<s50,Futura Lt BT>。 <s50,Futura Lt BT>Security Warning<s50,メイリオ>ポップアップが消去された後しばらくすると<s50,Futura Lt BT>… <s50,Futura Lt BT>Software Updates<s50,メイリオ>画面が表示されますので<s50,Futura Lt BT>… <s50,Futura Lt BT>Restart Now<s50,メイリオ>をクリックします<s50,Futura Lt BT>。 <s50,Futura Lt BT>Eclipse<s50,メイリオ>が再起動し<s50,Futura Lt BT>、Scala IDE for Eclipse<s50,メイリオ>のインスト<s50,Futura Lt BT><s50,メイリオ>ルが完了します<s50,Futura Lt BT>。(`・ω・´) <s50,メイリオ>最後に動作確認も兼ねて<s50,Futura Lt BT>、Scala<s50,メイリオ>のアプリケ<s50,Futura Lt BT><s50,メイリオ>ションを開発して<s50,Futura Lt BT>Eclipse<s50,メイリオ>上で動かしてみます<s50,Futura Lt BT>。 <s50,メイリオ>メニュ<s50,Futura Lt BT><s50,メイリオ><s50,Futura Lt BT><s50,メイリオ>から<s50,Futura Lt BT>WindowPerspectiveOpen PerspectiveOther<s50,メイリオ>を選択します<s50,Futura Lt BT>。 <s50,Futura Lt BT>Open Perspective<s50,メイリオ>ポップアップが表示されますので<s50,Futura Lt BT>… <s50,Futura Lt BT>Scala<s50,メイリオ>をクリックして選択後<s50,Futura Lt BT>… <s50,Futura Lt BT>Open<s50,メイリオ>ボタンをクリックします<s50,Futura Lt BT>。 <s50,Futura Lt BT>Scala<s50,メイリオ><s50,Futura Lt BT><s50,メイリオ>スペクティブが表示されますので<s50,Futura Lt BT>… <s50,Futura Lt BT>Package Explorer<s50,メイリオ>を右クリックすると表示される<s50,Futura Lt BT>… <s50,メイリオ>ポップアップメニュ<s50,Futura Lt BT><s50,メイリオ>から<s50,Futura Lt BT>NewScala Project<s50,メイリオ>を選択します<s50,Futura Lt BT>。 <s50,Futura Lt BT>New Scala Project<s50,メイリオ>ウィザ<s50,Futura Lt BT><s50,メイリオ>ドが表示されますので<s50,Futura Lt BT>… <s50,Futura Lt BT>Scala<s50,メイリオ>のプロジェクトを作成していきます<s50,Futura Lt BT>。 <s50,メイリオ><s50,Futura Lt BT><s50,メイリオ>スフォルダは<s50,Futura Lt BT>Java<s50,メイリオ>の例に倣い<s50,Futura Lt BT>… <s50,Futura Lt BT>src/main/scala<s50,メイリオ>とします<s50,Futura Lt BT>。 <s50,メイリオ><s50,Futura Lt BT><s50,メイリオ>スコ<s50,Futura Lt BT><s50,メイリオ>ド用のパッケ<s50,Futura Lt BT><s50,メイリオ>ジを作り<s50,Futura Lt BT>… <s50,メイリオ><s50,Futura Lt BT><s50,メイリオ>スコ<s50,Futura Lt BT><s50,メイリオ>ド用のファイルを作ります<s50,Futura Lt BT>。 <s50,メイリオ>とりあえず<s50,Futura Lt BT>、Hello World<s50,メイリオ>的な文字列を<s50,Futura Lt BT>… <s50,メイリオ>標準出力に表示させてみます<s50,Futura Lt BT>。 <s50,メイリオ>コンソ<s50,Futura Lt BT><s50,メイリオ>ルの部分をちょっと広げてから<s50,Futura Lt BT>… <s50,Futura Lt BT>Package Explorer<s50,メイリオ>内で<s50,Futura Lt BT>、Scala<s50,メイリオ>のプログラムが記述されたファイルを右クリックして<s50,Futura Lt BT>… <s50,Futura Lt BT>Run AsScala Application<s50,メイリオ>を選択します<s50,Futura Lt BT>。 <s50,メイリオ>コンソ<s50,Futura Lt BT><s50,メイリオ>ルに下図の矢印のように表示されれば<s50,Futura Lt BT>、<s50,メイリオ>動作確認は成功です<s50,Futura Lt BT>。 <s50,メイリオ>お疲れさまでした<s50,Futura Lt BT>。(`・ω・´)

 


スポンサーリンク

上記の出力結果をじーっと観察すると、長音記号、句読点などが英語用のフォントを使用するものと判定されていることがわかります。

「参考文献」の節にあります「Unicode Character Database」によりますと、長音記号はCommonという文字種に分類されていて、以下のように定義されています。

30FC ; Common # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK

 
また、句点、読点及び中黒(「・」)も同様に以下のように定義されています。

3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK 30FB ; Common # Po KATAKANA MIDDLE DOT

 
さらに顔文字で使われているωのUnicodeにおける符号位置はU+03C9ですので、以下の範囲内にありますね。

03A3..03E1 ; Greek # L& [63] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER SAMPI

 
Greekは顔文字やAAで登場することが意外に多いので、文字種として指定する価値はありそうですが、どうしますかね…

2nd try: 長音記号及び顔文字のところだけアドホックになります。

スポンサーリンク

文字種Commonについては雑多な記号が含まれていて、日本語フォントにおいてグリフがあるかどうかを調べ上げるのは手間がかかりそうなので、必要な文字だけを日本語フォントを使用する対象に追加することを考えます。

日本語フォントを使用する対象となる文字を追加するためには、タグを挿入するコードを以下のように変更します。なお、文字種としてGreekも追加しておきます。また、前節の1st tryでは正規表現中に「・」が2回登場していますが、これは1回だけでよいので、こっそり修正しておきます。


スポンサーリンク

上記のコードを含めたPython3の全体のコードは以下のようになります。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 事前準備:
# 正規表現を用いてひらがな、カタカナ及び漢字並びにギリシャ文字とそれ以外の文字を
# 識別するために、regexパッケージを使用していますので、
# https://pypi.org/project/regex/
# からインストールする必要があります。
# 使用法: タグを挿入したファイルは標準出力から出力されます。
# python3 txt2exo_multifont.py [-t <半角文字に対するフォント等の設定>] [-m <全角文字に対するフォントの設定>] -f <字幕ファイル>
#
import io
import sys
import regex
import codecs
from struct import *
from binascii import hexlify
import argparse
# 標準出力の文字コードを変更する。
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='UTF-8')
parser = argparse.ArgumentParser(description='Command line options of txt2exo_multifont.py')
parser.add_argument('-t','--text-config',type=str,default='s50,Futura Lt BT',help='Text configurations for 1-byte characters.')
parser.add_argument('-m','--multi-byte-text-config',type=str,default='s50,Meiryo UI',help='Text configurations for 1-byte characters.')
parser.add_argument('-f','--input-file',type=str,default='',help='Input file to configure.')
args = parser.parse_args()
params = vars(args)
textConfig = params['text_config']
multiByteTextConfig = params['multi_byte_text_config']
inFile = params['input_file']
if (inFile == ''):
parser.print_help()
sys.exit(1)
with open(inFile,encoding='UTF-8') as f:
for line in f:
line = regex.sub(r'([^\p{Katakana}\p{Hiragana}\p{Han}\p{Greek}…ー。、→`・´\r\n]+)',"<"+textConfig+">\1",line)
print(regex.sub(r'([\p{Katakana}\p{Hiragana}\p{Han}\p{Greek}…ー。、→`・´]+)',"<"+multiByteTextConfig+">\1",line),end='')

実行結果は以下の通りになります。適切にタグが挿入されているように見えます。

<s50,Futura Lt BT>eclipse-installer<s50,メイリオ>というディレクトリの下でインストーラを起動します <s50,メイリオ>するとインストーラが起動します <s50,メイリオ>今回のインストールでは、<s50,Futura Lt BT>Eclipse IDE for Java EE Developers<s50,メイリオ>をクリックします <s50,メイリオ>すると以下の画面に切り替わりますので <s50,Futura Lt BT>Installation Folder<s50,メイリオ>を確認後 <s50,Futura Lt BT>INSTALL<s50,メイリオ>をクリックします <s50,メイリオ>インストールが開始されますのでしばし待ちます <s50,メイリオ>ライセンスの確認画面が表示されることがありますので <s50,メイリオ>その場合にはライセンスの内容を確認した上で <s50,Futura Lt BT>Remember accepted licenses”<s50,メイリオ>のチェックボックスにチェックを入れて <s50,Futura Lt BT>Accept<s50,メイリオ>ボタンをクリックすると <s50,メイリオ>インストールが続行されます <s50,メイリオ>ダウンロードのスピードが遅くても気にしません。<s50,Futura Lt BT>(<s50,メイリオ>`・ω・´<s50,Futura Lt BT>) <s50,メイリオ>ひたすら待ちます <s50,メイリオ>証明書を信頼するか確認する画面が表示された場合には <s50,メイリオ>証明書の情報を確認した上で <s50,Futura Lt BT>Select<s50,メイリオ>ボタンをクリックしてから <s50,Futura Lt BT>Accept selected”<s50,メイリオ>をクリックすると <s50,メイリオ>インストールが続行されます <s50,メイリオ>インストールが完了するとインストーラの表示が以下のように切り替わりますので <s50,Futura Lt BT>LAUNCH<s50,メイリオ>をクリックすると <s50,メイリオ>インストールされた<s50,Futura Lt BT>Eclipse<s50,メイリオ>が起動します <s50,Futura Lt BT>Eclipse<s50,メイリオ>が起動するとスプラッシュ画面が表示されてから <s50,メイリオ>ワークスペースの選択画面が表示されることがあります <s50,メイリオ>以下のような画面が表示された場合には <s50,Futura Lt BT>Workspace:”<s50,メイリオ>のディレクトリ名を確認後 <s50,Futura Lt BT>Launch<s50,メイリオ>ボタンをクリックすると <s50,メイリオ>起動を続行させることができます <s50,メイリオ>しばらく待つと、<s50,Futura Lt BT>Welcome<s50,メイリオ>画面が表示されます <s50,メイリオ>そこで画面右上の<s50,Futura Lt BT>Workbench<s50,メイリオ>ボタンを押します <s50,メイリオ>ワークベンチが表示されると、<s50,Futura Lt BT>Eclipse<s50,メイリオ>のインストール作業は完了です <s50,メイリオ>お疲れさまでした。<s50,Futura Lt BT>(<s50,メイリオ>`・ω・´<s50,Futura Lt BT>) <s50,メイリオ>次に<s50,Futura Lt BT>Photon<s50,メイリオ>対応の<s50,Futura Lt BT>Scala IDE<s50,メイリオ>をインストールします <s50,メイリオ>メニューバーから<s50,Futura Lt BT>Help<s50,メイリオ>→<s50,Futura Lt BT>Install New Software<s50,メイリオ>を選択します <s50,Futura Lt BT>Install<s50,メイリオ>画面が表示されますので <s50,Futura Lt BT>Work with:”<s50,メイリオ><s50,Futura Lt BT>Photon<s50,メイリオ>対応の<s50,Futura Lt BT>Scala IDE<s50,メイリオ>のインストール用の<s50,Futura Lt BT>URL<s50,メイリオ>を入力して <s50,Futura Lt BT>Add<s50,メイリオ>ボタンをクリックします <s50,メイリオ>すると <s50,Futura Lt BT>Add Repository<s50,メイリオ>画面が表示されますので <s50,Futura Lt BT>Name<s50,メイリオ>に適当なリポジトリ名を入力し <s50,Futura Lt BT>Add<s50,メイリオ>ボタンを押します <s50,メイリオ>すると上図のポップアップ画面が消去されて <s50,Futura Lt BT>Install<s50,メイリオ>画面にインストール可能なソフトウェアが表示されますので <s50,メイリオ>すべてのチェックボックスにチェックを入れて <s50,Futura Lt BT>Next><s50,メイリオ>ボタンをクリックします <s50,メイリオ>画面表示が切り替わり、<s50,Futura Lt BT>Install Details<s50,メイリオ>画面が表示されますので <s50,Futura Lt BT>Next><s50,メイリオ>ボタンをクリックします <s50,メイリオ>さらに画面表示が切り替わり <s50,Futura Lt BT>Review Licences<s50,メイリオ>画面が表示されますので <s50,メイリオ>ライセンスの内容を確認後 <s50,Futura Lt BT>I accept the terms of the licence agreements”<s50,メイリオ>のラジオボタンをチェックし <s50,Futura Lt BT>Finish<s50,メイリオ>ボタンを押します <s50,Futura Lt BT>Review Licences<s50,メイリオ>画面が消え、<s50,Futura Lt BT>Scala IDE for Eclipse<s50,メイリオ>のインストールが開始されます <s50,メイリオ>インストールの途中で<s50,Futura Lt BT>Security Warning<s50,メイリオ>ポップアップが表示されますので <s50,メイリオ>内容を確認後、<s50,Futura Lt BT>Install anyway”<s50,メイリオ>ボタンをクリックします <s50,Futura Lt BT>Security Warning<s50,メイリオ>ポップアップが消去された後しばらくすると <s50,Futura Lt BT>Software Updates<s50,メイリオ>画面が表示されますので <s50,Futura Lt BT>Restart Now<s50,メイリオ>をクリックします <s50,Futura Lt BT>Eclipse<s50,メイリオ>が再起動し、<s50,Futura Lt BT>Scala IDE for Eclipse<s50,メイリオ>のインストールが完了します。<s50,Futura Lt BT>(<s50,メイリオ>`・ω・´<s50,Futura Lt BT>) <s50,メイリオ>最後に動作確認も兼ねて、<s50,Futura Lt BT>Scala<s50,メイリオ>のアプリケーションを開発して<s50,Futura Lt BT>Eclipse<s50,メイリオ>上で動かしてみます <s50,メイリオ>メニューバーから<s50,Futura Lt BT>Window<s50,メイリオ>→<s50,Futura Lt BT>Perspective<s50,メイリオ>→<s50,Futura Lt BT>Open Perspective<s50,メイリオ>→<s50,Futura Lt BT>Other<s50,メイリオ>…<s50,Futura Lt BT><s50,メイリオ>を選択します <s50,Futura Lt BT>Open Perspective<s50,メイリオ>ポップアップが表示されますので <s50,Futura Lt BT>Scala<s50,メイリオ>をクリックして選択後 <s50,Futura Lt BT>Open<s50,メイリオ>ボタンをクリックします <s50,Futura Lt BT>Scala<s50,メイリオ>パースペクティブが表示されますので <s50,Futura Lt BT>Package Explorer<s50,メイリオ>を右クリックすると表示される <s50,メイリオ>ポップアップメニューから<s50,Futura Lt BT>New<s50,メイリオ>→<s50,Futura Lt BT>Scala Project<s50,メイリオ>を選択します <s50,Futura Lt BT>New Scala Project<s50,メイリオ>ウィザードが表示されますので <s50,Futura Lt BT>Scala<s50,メイリオ>のプロジェクトを作成していきます <s50,メイリオ>ソースフォルダは<s50,Futura Lt BT>Java<s50,メイリオ>の例に倣い <s50,Futura Lt BT>src/main/scala<s50,メイリオ>とします <s50,メイリオ>ソースコード用のパッケージを作り <s50,メイリオ>ソースコード用のファイルを作ります <s50,メイリオ>とりあえず、<s50,Futura Lt BT>Hello World<s50,メイリオ>的な文字列を <s50,メイリオ>標準出力に表示させてみます <s50,メイリオ>コンソールの部分をちょっと広げてから <s50,Futura Lt BT>Package Explorer<s50,メイリオ>内で、<s50,Futura Lt BT>Scala<s50,メイリオ>のプログラムが記述されたファイルを右クリックして <s50,Futura Lt BT>Run As<s50,メイリオ>→<s50,Futura Lt BT>Scala Application<s50,メイリオ>を選択します <s50,メイリオ>コンソールに下図の矢印のように表示されれば動作確認は成功です <s50,メイリオ>お疲れさまでした。<s50,Futura Lt BT>(<s50,メイリオ>`・ω・´<s50,Futura Lt BT>)

 

AviUtlにインポートできるかどうかの確認。

次に、前節までの手順でタグを挿入したテキストファイルを入力としてtxt2exo.pyを実行(実行の方法はこちら参照です。)し、さらにテキストオブジェクトが定義されているexoファイルを作成します。それがAviUtl上で使えるものになっていることを確認してみます。

※このテストを行っている最中にtxt2exo.pyにバグを発見しましたので、修正しました。詳しくはこちら(上記のリンクと同じです。)を参照ください。

現在制作中の動画のタイムラインに作成したexoファイルを読み込ませた結果は以下のようになりました。

上図の(a)が読み込ませたテキストオブジェクトのうちの1個で表示させる文字列を、(b)がexoファイルを読み込ませた結果追加されたテキストオブジェクト群を、(c)が(a)のテキストオブジェクトの動画上への表示時のプレビューをそれぞれ表します。

表示時間などの細かい調整は必要ですが、テキストオブジェクトとしては読み込めていて、かつ日本語用と英語用のフォントを使い分けることだできているようです。

まとめ

ここまでの作業で、最初に設定した問題はほぼ解くことができました。

regexモジュールの仕様では文字種だけでは必要な範囲の文字がカバーしきれないことがわかりましたが、普段使うこともなく、意味もわからないような漢字を文字コードの領域の一方の端にあるからといって指定する方法よりはいくらかはマシなのではないかと思います。

この記事は以上です。

References / 参考文献