CRIWARE Unity Plugin Manual  Last Updated: 2024-04-24
サブタイトルムービー
Sofdec では字幕付き動画 (サブタイトルムービー) を利用できます。
動画ファイル内に字幕データを埋め込み、ランタイムで字幕を読み出すことができます。

字幕付きデータの作成

Sofdec2 Encoding Wizard でのエンコード時に字幕ファイルを指定することで字幕付き動画データを作成することができます。

  • [入力字幕素材の指定] ページで、字幕情報ファイルを指定します。
  • 字幕情報は0~15の任意の字幕チャンネルに登録可能であり、最大16種の字幕パターンを埋め込み可能です。
  • 埋め込まれる字幕データの文字コードは指定した字幕ファイルの文字コードに従います。
    詳しくは 「Sofdecツール」ユーザーズマニュアル をご参照ください。

字幕付きデータの取得

再生時に字幕データを取得することで、動画に同期した字幕を表示することが可能です。
字幕データを利用するには次の処理が必要です。

  • 取得する字幕データのチャンネルを指定
  • 字幕データのポインタから文字列を取得
取得する字幕のチャンネルを指定
CriMana.Player.SetSubtitleChannel(int) を利用して字幕チャンネルを指定します。
チャンネルを指定しない場合は字幕の取得ができません。
/* 初期化時に CriMana.Player を取得してチャンネルを指定 */
player = GetComponent<CriManaMovieMaterial>().player;
player.SetSubtitleChannel(0);
字幕データのポインタから文字列を取得
CriMana.Player.subtitleBuffer から文字列を取得します。
字幕データの取得時には、Sofdecツールに入力した字幕ファイルの文字コードに応じて文字列への変換を行う必要があります。
注意
ポインタが示す文字列はnull終端を持たない場合があります。必ずポインタと共にバッファサイズを指定するAPIを使用してください。
  • UTF-8 または ASCII の場合
System.Runtime.InteropServices.Marshal.PtrToStringAnsi を利用して System.String へ変換可能です。
/* 字幕取得 */
IntPtr buffer = player.subtitleBuffer;
string subtitle = Marshal.PtrToStringAnsi(buffer, player.subtitleSize);
  • UTF-16 の場合
System.Runtime.InteropServices.Marshal.PtrToStringUni を利用して System.String へ変換可能です。
/* 字幕取得 */
IntPtr buffer = player.subtitleBuffer;
string subtitle = Marshal.PtrToStringUni(buffer, player.subtitleSize);
  • その他の場合
字幕データを byte[] として取得し、System.Text.Encoding クラスを利用することでSystem.Stringへ変換可能です。
System.Text.Encoding クラスについては下記の URL をご参照ください。
https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding
IntPtr buffer = player.subtitleBuffer;
/* byte 配列を作成して 字幕バッファの内容をコピー */
var array = new byte[player.subtitleSize];
Marshal.Copy(buffer, array, 0, player.subtitleSize);
/* Shift-JIS の Encoding を作成して byte 配列から文字列へ変換 */
var encoding = Encoding.GetEncoding("shift_jis");
string subtitle = encoding.GetString(array);