本記事は東京大学工学部電子情報・電気電子工学科の「大規模ソフトウェアを手探る」という実習の報告書を兼ねています。
はじめに
これはVLCで副字幕を表示させようと試行錯誤している過程で字幕の位置・内容を変えることに成功した時の記事です。
字幕の位置を変更する
字幕の描画はsrc/video_output/vout_subpictures.cで行われていて、描画の領域の設定はSpuRenderRegion関数内で行われていたのでこの部分を変更すればよい。
src/video_output/vout_subpictures.c(722~725行目)
// 字幕位置を上部に変更する例
// 画面の領域外を指定しても領域内に収まるように自動で調節される
*dst_area = spu_area_create(x_offset, y_offset - 10000,
region->fmt.i_visible_width,
region->fmt.i_visible_height,
scale_size);
字幕テキストの内容を変更する
字幕テキストデータのパースはmodules/codec/subsdec.cのParseSubtitles関数で行われていたのでこの部分を変更すればよい。
modules/codec/subsdec.c(762行目)
// 各字幕セグメントの最初に文字を追加する例
p_first_segment = p_segment = text_segment_New( "added" );
テキストの内容だけでなくスタイルの設定もこの関数内で行われていたので、特定の単語を太字や斜体にするといった処理もこの部分を編集することで実現できる。
まとめ
字幕に手を加えることはできるようになりましたが、この段階では既に選択されている言語の字幕しか送られてきていないので副字幕を表示するにはもっと前の段階に手を加えないといけないということが分かりました。