SSA/ASS形式で日本語の字幕を物理的に縦書きする方法。
3つの方法があります。
第3のやり方が最も便利と思います。 特殊なレイアウトについては、 第1の方法では縦中横が簡単ですが、縦書き中の英単語のような縦横混在が面倒です。 第2、第3の方法では縦中横は比較的面倒ですが、縦横混在も容易です。
第1の方法は、2003年6月、 doom9 の Japanese subtitles in SSA?スレで質問されて考え、 このメモの最初のバージョンとしたものです。 それに対するこのサイト(妖精現実)の掲示板#1291でのフィードバックが第2の方法です。 それをさらに doom9 スレに還元したところ、2004年2月に Sylf が各行ごとに frz を使わなくて良くなる方法を報告しました。 これが第3の方法です。
Alignment を 7 にすることで表示位置を右上にし、一文字ごとに\N
で強制改行することで縦書きにする。
ごく一部の行でだけ縦書きにしたいときは、{\an9}
を用いても良い。
句点、読点は縦書きだと位置が微妙に思わしくない(注1)。
ここでは改行を2回することで改善しているが、より細かくやるには絶対位置指定を用いても良い。
(一般的には、句読点を使わないスタイルのほうが良いだろう。)
縦書きの行が二行以上に渡る場合の処理は、適宜、手動で行う。
\N
の挿入を手動で行うのは面倒なので、Perlスクリプトで一括処理すると良いだろう。
Style: vertical subs,Mikachan-PB,40,16777215,0,0,0, 0,0,1, 1,1,7, 20,20,20,0,128 vertical subs,,0000,0000,0000,,わ\Nた\Nし\N、\N\N桃\N宮\Nい\Nち\Nご\N。\N\N十\N三\N歳 vertical subs,,0000,0000,0000,,ご\Nく\N普\N通\Nの\N\N中\N学\N一\N年\N生
文字コードはUTF-16が好ましいが、Shift_JIS で Encoding を128に指定しても良い。
注1: この問題は縦書き用フォント(@で始まる名前のフォント)を使うことで回避できる。 次の画像を参照。(2005年8月20日追記)
次のようにして「縦中横」を実現できる。
vertical subs,,0000,0000,0000,,わ\Nた\Nし\N、\N\N桃\N宮\Nい\Nち\Nご\N。\N\N13\N歳
縦のなかに英単語等を含める必要がある場合は、タグを使って90度回転させる。 (以下、2004年1月27日追記。掲示板での要望 #1287)
レイヤー的処理になるから ASS にしたほうが良い。 SSAでは Z-index が指定できないので、 複雑になると、自動コリジョン処理と競合して、位置指定が意図通りに働かないことがある。 ごく簡単なパターンなら、SSA でも可能だ。 SSA形式でもタグはASSタグなので、Gabest系ツール以外ではレンダリングできない点に注意。 (この割付は、方法2以下の方が簡単にできる。)
Style: Default,TheLittleBirdFont,30,&H00ffff,0,0,&H333333,-1,0,1,1,1,7,30,30,30,0,128 [Events] Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: Marked=0,0:00:00.00,0:00:10.00,*Default,,0000,0000,0000,,昔\N\Nあ\Nる\Nと\Nこ\Nろ\Nに Dialogue: Marked=0,0:00:00.00,0:00:10.00,*Default,,0000,0000,0000,,{\an7\pos(612,260)}{\frz270}faireal Dialogue: Marked=0,0:00:00.00,0:00:10.00,*Default,,0000,0000,0000,,{\an7\pos(580,360)}と\Nい\Nう Dialogue: Marked=0,0:00:00.00,0:00:10.00,*Default,,0000,0080,0000,,サ\Nイ\Nト\Nが\N\Nあ\Nっ\Nた\Nそ\Nう\Nな Dialogue: Marked=0,0:00:00.00,0:00:10.00,*Default,,0000,0130,0000,,そ\Nし\Nて\N\Nそ\Nこ\Nに\Nは\N・\N・\N・
(2004年1月28日 掲示板での情報 #1291)
次のように名前が@から始まるフォントを使う方法もあります。 この方法のメリットは、一文字ずつ\Nをタイプしなくてもいいこと、句読点を使った場合に良い位置に来る確率が非常に高いことで、 さらに横文字は自動的に90度倒れてくれます。 デメリットは一行ごとにposタグを打つ必要があること、縦中横が面倒なことです。 Perl処理する場合、どちらでもほぼ同じ手間とは思いますが、文字ごとに\Nが入らないので、 タイプセットのあとスクリプトを更新するときなど、こちらのほうがやりやすいと思います。
Style: Default,@Mikachan-PB,30,&H00ffff,0,0,&H333333,-1,0,1,1,1,5,30,30,30,0,128 [Events] Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: Marked=0,0:00:00.00,0:00:10.00,*Default,,0000,0000,0000,,{\pos(610,30)\frz270}わたし 桃宮いちご 十三歳 Dialogue: Marked=0,0:00:00.00,0:00:10.00,*Default,,0000,0000,0000,,{\pos(560,30)\frz270}ごく普通の 中学一年生
(2004年2月19日 Sylf)
次のように ASS の [V4+ Styles] セクションで Angle を指定する方法。各行の pos 指定は依然必要。
[V4+ Styles] Style: letter,@MS Gothic,100,&H00191919&,&H00000000&,&H00000000&,&H00000000&, 0,0,0,0,100,100,0,-90,0,0.3,0,2,30,30,30,0