はじめに
ろくに規格を見ずにソースコードと振る舞いの確認のみで終わらせてしまったので間違った情報かもしれません、まったく精査してません
tl;dr
drcs_conv.ini
を育てる必要がある
詳細
VLCで撮り溜めたm2tsを見るとたまに次のようなものを見ることがある
例では薩摩の 薩 という字が 〓 に置き換えられている
これは外字置換という事象が発生している
ARIB外字とは
ひらたく言うと、放送データに添付される字幕データにはたまにShift_JISの範囲外になるような規格の文字も含まれている
そのような字のことをARIB外字と呼ぶ
(ARIB外字制定後一部はShift_JISの範疇になったらしいが、それ以外については)同時にフォントのデータも送信される
これはARIB STD-B24という規格によって定められた方法で送られるらしい
基本的にはJIS X 0208に収録されいてない文字が対象になっており、先程例としてあげた 薩
もその対象になっている
外字置換とは
外字置換とは、上記のデータが受信できなかった/送信されなかった/使用されなかった場合に代替として使われる文字に置換されることで、上で上げた例のようによく下駄文字が使われる 〓
VLCでのARIB外字の扱い方をしらべる
例で上げた通りだが、そのまま表示するだけでは下駄になってしまう
検索すると出てくる情報
この件について検索すると https://github.com/nkoriyama/vlc-aribsub パッチをあてたVLCついての話が出てくる
特別な対応を当てる必要があることの記述があるが、結果としては確認せずスキップで良さそうだった
それ以外にもおすすめのフォントについての記述があるので、それだけは見ても良さそうに思う(がこれでは解決しなさそう) VLCでARIB字幕を見る · GitHub
また、このページで紹介されているパッチやビルドがskydriveの消滅とともにリンク切れになっており内容を推測する他ないのだが、nkoriyama/aribb24というARIB STD-B24を扱うライブラリを使うパッチなのではないかと思っている
根拠として、vlc-aribsubの説明はほとんどnkoriyama/aribb24の動作と同じであることが挙げられる
であるならば、パッチがあてられたVLCを使用している前提でvlc-aribsubのREADME.mdに従うことでARIB外字を扱うことができるのではないかと推測した
実際に解決できた方法
実は最新版(少なくとも3.0.11)のVLCではnkoriyama/aribb24を使用するパッチは既にマージされていて、残りは単に所定のディレクトリにしかるべきファイルを置くだけで動作する
aribb24のbasedirを指定している箇所 https://github.com/videolan/vlc/blob/95e01f73802460ec2374894cdb769888e23b108d/modules/codec/arib/aribsub.c#L134
aribb24に使用するbasedirを指定する箇所 https://github.com/videolan/vlc/blob/95e01f73802460ec2374894cdb769888e23b108d/modules/codec/arib/aribsub.c#L200
実際にそのようにしてみる
%APPDATA%\vlc\arib
を確認してみると、既に data
ディレクトリが存在している
中身を確認すると、次のような画像が存在していた
一部外字については、ビットマップデータ自体がDRCS外字として伝送されます。 このデータを直接画面に表示することもできなくはないのですが、現状は既存の文字に置換して表示するようにしています。
(実装としてはこのあたり https://github.com/nkoriyama/aribb24/blob/5e9be272f96e00f15a2f3c5f8ba7e124862aec38/src/drcs.c )
そのため、ここで受信したような文字について、(おそらく)手動でマッピングをする必要がある
そのファイルが drcs_conv.ini
となる
drcs_conv.init
の記述方法
単純で、先程の保存されたビットマップのファイル名( b1d62062d089551469efaeb94466263e.png
の b1d62062d089551469efaeb94466263
部分)と、それに対応するUnicode文字を記述すれば良い
https://github.com/nkoriyama/vlc-aribsub/blob/master/drcs_conv.ini が参考として優秀だったが、以下に具体的な追加例を示してみる
例えば次の通り
; ここ以上は https://github.com/nkoriyama/vlc-aribsub/blob/master/drcs_conv.ini そのままか何もなしの状態 ; 薩 b1d62062d089551469efaeb94466263e=U+85A9
このようなファイルを次のパスに置いてからVLCを起動する
%APPDATA%\vlc\arib\drcs_conv.ini
すると、実際に表示される字幕も次のようになる
また、このマッピングは好きな文字を割り当てることが出来るので、ミスったりすると次のような感じになる
これで一旦対応されていないAIRB外字のマッピングに成功できた
基本的には下駄文字が表示されたときに %APPDATA%\vlc\arib\data
を確認し、追加された画像を参考に置き換える文字を探せばよいのだともう
疑問
これ、インターネットの集合知を利用して更新された健全な drcs_conv.ini
があれば良いと思うのですが、無いのでしょうか?
個人同士で管理するのはちょっと馬鹿げていると思います