maki-rxrz / Caption2Ass_PCR

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

Caption2Ass_PCR/Caption.dll: Caption concatenation bug due to DRCS external character replacement #8

Open maki-rxrz opened 4 years ago

maki-rxrz commented 4 years ago

【概要】 同一行に表示される2つの字幕データを連結する際にDRCS外字が含まれていた場合、 字幕同士の間にスペースを挿入せずに連結して出力する不具合が発生する。

【詳細】 まず発生条件に繫がる前提2つを提示。

[1] 2c769c5 (https://github.com/maki-rxrz/Caption2Ass_PCR/issues/2 参照) で追加した字幕を連結する処理では文字数確認して挿入するスペースの数を決定してる。 (ASS字幕の表示位置をARIB字幕でのレイアウトに近しい物にする為)

[2] 字幕にDRCS外字が含まれている場合、Caption.dllの処理で「DRCS外字→ini指定の代替文字」へと置き換えが行われる。この置き換えにより、ARIB字幕での文字数とCaption2Ass_PCRが扱う文字列の文字数が一致しない状況が発生する。 (Caption2Ass_PCR は代替文字による文字数の増加を検知できない)

この前提 [1][2] により、連結対象となる字幕1・字幕2において、 代替文字により文字数が増加した字幕1の文字列の表示幅が字幕2の表示位置(X座標)に到達or超えてしまう状況が発生し、字幕同士の間にスペースを挿入せずに連結して出力する不具合が生じている。

【不具合例】 下記、■ が DRCS外字 (ini指定の代替文字:[ケイタイ])

・ARIB字幕 「■セリフ1」 「セリフ2」 ・ASS字幕 「[ケイタイ]セリフ1セリフ2」

<補足> 求められる出力例 ・ASS字幕 「[ケイタイ]セリフ1 セリフ2」

【修正】 ARIB字幕での文字数を Caption2Ass_PCR 上で取り扱う事が出来る様にする。 修正方法として下記2案を提示。

案1) 置き換え前の文字数を検出可能な様に Caption.dll の返すデータに情報を追加、Caption2Ass_PCR で計算に使用 案2) 代替文字への置き換えを Caption.dll 上で行わず Caption2Ass_PCR 上で行う様に変更

どちらの案も修正による影響が大きく検討が必要。※別アプリがCaption.dllを使う場合も考慮した変更にする必要有