maki-rxrz / Caption2Ass_PCR

[DL] https://1drv.ms/f/s!AtWZll0n7FiGjGj45fo564dwG5AW?e=FlPLXG
61 stars 13 forks source link

Multi-line output bug #2

Closed maki-rxrz closed 7 years ago

maki-rxrz commented 7 years ago

【概要】 2chでの以下の報告。

【開発】 TS関連ソフトウェア総合スレ Part16 http://echo.2ch.net/test/read.cgi/avi/1454953262/483 483 名前:名無しさん@編集中[sage] 投稿日:2016/12/19(月) 18:33:26.72 ID:AAdfwpQC Caption2Ass_PCR.exe使ってるんだが、 BSアニマックスのassもsrtも、 空白「」・()。で改行されてしまうわ。 無料放送のせいかな?


【原因】 該当番組の字幕データは、同一行上に表示される字幕内容の各文字列のデータ間に 画面消去(CS)の制御符号が挿入されている。

Caption2Ass_PCR はCSの制御符号を処理中の行の終端と見なして出力を行っている為、 同一行上に表示される各文字列を別行に区切った形で出力してしまう。

例) <通常番組> [じゃあ][ ][もう一度][。]['CS']   ↓↓↓ 「じゃあ もう一度。」

<BSアニマックスの一部番組> [じゃあ]['CS'][ ]['CS'][もう一度]['CS'][。]['CS']   ↓↓↓ 「じゃあ」 「 」 「もう一度」 「。」


【修正】 各文字列に設定された表示位置から、同一行上に文字列が繋がる形で表示されるかを判定、 該当文字列達を1行の字幕に連結して出力する様に修正。

maki-rxrz commented 7 years ago

28f8ed95a5033daac83af62dc65b5d7c7742a428 で修正。

maki-rxrz commented 7 years ago

BSアニマックスのデータを改めて入手確認し、本拡張における未対応項目を2点確認。


[1] 表示領域判定の間違いによる連結出力不可

文字サイズが'中形'(横1/2×縦1)の場合にCaption2Assは字幕を全角→半角 変換し出力するが、 対象が変化できない場合は全角のまま出力している。

この為、ARIB字幕における表示領域('中形'xN)と、Caption2Assが出力する字幕(全角xN)とで 表示領域のサイズが異なり、字幕データが隣接していないと判定され、分割したまま字幕を出力してしまう。


[2] 複数の別字幕が同一行に表示されるケース

出現するのは少ないケースと思われるが、以下の様に別字幕が離れて表示されるケースが存在する。

「♪」  ↓↓↓ 「♪」   「セリフ」  ↓↓↓ 「♪」

※ BGMが鳴り続けたまま、登場人物のセリフの字幕が追加表示されたケース

ASS字幕は個別に表示位置の情報を持つので同一行に表示されるが、 SRT字幕では改行されて別々の行に出力してしまう。

maki-rxrz commented 7 years ago

以下のコミットにてそれぞれ修正。

[1] 2aa20aa4f3c96875e891974e434a832facfc6481 表示領域のサイズを正しく計算できる様に文字数判定処理を修正。

[2] 2c769c5fc2f043ee7d6470e7c18d3b044df56e81 必要数(字幕間の表示位置差)分のスペースを挿入した上で字幕同士を連結する様に拡張。

「♪」  「セリフ」  ↓↓↓ 「♪    セリフ」