これまでに、kodiによる字幕放送表示は何度も取り上げている。
少々ffmpegにパッチをあてるだけでライブ視聴時のarib字幕が表示できるのだ。
クライアント側での使用には概ね満足しているので、今更記すことはない。


しかし、今回はtvサーバー側で使用するffmpegのこと。

先日、TV録画を字幕付きでエンコードした際、開始から数十秒の所で落ちていた。
EPGStationからエンコードしたのだが、「エンコード後削除」設定がONのため取り返しがつかない事に;
これまで一度のトラブルも無かったのに...
事前にドロップチェック済みなので、データ破損等の原因は考え難い。
念のため何度か試してみたが、やはりダメ。

少し焦り始めたとき、ハッと思いだした。
遡ること数日前に、関連箇所を若干修正したのである。

そもそも、上記パッチはffmpegからlibaribcaptionを使用してarib字幕のデコードを可能にするもの。
仕様として、取得データの字幕表示時間が未指定なら、次字幕のタイミングまで表示される。
しかしながら、この条件だと本編からCMに移行した際、字幕が残ることがある。
家電TVの挙動も同様なので、そんなものなのだろう。
ただ、個人的には気になるため、5秒表示に変えている。

クライアント側のkodiでライブ視聴するには、これくらいが丁度良い。
では、tvサーバー側はどうか?
こちらにも字幕付きでエンコードする場合があるので、ffmpegには同様の修正を加えていた。
しかし、普通ならCMを残してエンコードするのは考え難い。
そう、この場合は字幕を継続表示した方が良いのである。

そんな事で、クライント側の5秒表示は弄らずそのまま。
サーバー側のみを次データまで継続表示するよう戻した。
で、これが数日前のことであり、エンコード失敗の原因であった。
必すエンコードが死ぬパッチを加えていたのである。

修正したり戻したりで、話しがややこしくなった。
要は、字幕付きでエンコードする場合、表示時間指定が必要ということ。

ただ、全てのプラットフォーム、環境、又は条件で同様なのか不明である。
今回試したのは次のようなもの。

tvサーバー: Raspberry Pi 4
os: Raspberry Pi OS
fork: rpi-ffmpeg-dev-6.0-rpi_import_1
videoエンコード: h264_v4l2m2m
subtitleエンコード: dvd_subtitle

字幕付きエンコードに関しては、以前の記事「骨メガネ」にも記しています。

さて、今迄ffmpegからlibaribcaptionを使用するにはパッチが必要だった。
ffmpeg 6.0では上記通り必要なのだが、6.1では取り込まれているようである。
ただ、当該箇所を確認したが変更はなさそうだ。
結局「必死のパッチ」は不要となったが、多少の手間は必要なのかもしれない。