BMS2のVIERA GT3用スクリプトでアスペクト比をできるだけ維持するようにしてみました

BEER Media Server 2のVIERA GT3用のLuaスクリプトのアップデートです。
今回は元映像のアスペクト比をできる限り維持するようにしてみました。



BEER Media Server 2のVIERA GT3用スクリプトを作り直しました で一通りのビデオファイルをそれっぽく表示できるようにはなりました。ちょっとくらいアスペクト比がずれても気づくような事はないかな・・・と。基本的に4:3と16:9のビデオしか考慮していないスクリプトになっていました。
たまにビスタサイズなのかDisplay Aspect Ratio(DAR)が1.667のファイルがありますが、16:9にしても気づかなかったりします。

トランスコード再生を使わなかった時は事前に16:9か4:3にエンコードしたビデオを扱うことがほとんです。ちょっとトランスコード再生がまともに動くようになったのでエンコード後のビデオファイルではなく元のビデオファイルをDLNA再生するようにしてみました。すると、とんでもないDAR値のビデオファイルがそこそこある事に気づいてしまいました。
シネマスコープ、パナビジョン、もっと横長なものもありました。気づかないふりをしても良いのですが気づいちゃったら気になって気持ち悪い!

テレビ側がDAR値やSAR値を正しく反映してくれれば面倒なことはなく計算した値を設定するだけで良いのですが、残念ながらテレビのビデオ再生はそんなにビデオファイルの解釈が良くありません。

そんな状況でビデオファイルのDAR値を極力反映させてみます。今回は16:9より横長の映像のみ考慮しています。横長になるだけなら、ffmpegのpadオプションで上下に黒帯を追加すれば良いからです。
ビデオファイルのDAR値を基準にすべて計算しアスペクト比を決定するため、ビデオファイルのDAR値が間違っていると変になってしまいます。

今回の計算方法をメモしておくと・・・

ソース映像 解像度 w,h
ソース映像 Display Aspect Ratio  DAR,
出力映像 解像度 x,y
出力映像 Display Aspect Ratio  DAR2 = 16/9 固定
とする。

pixel aspect ratioを
par = DAR・h / w
par2 =DAR2・y/x
と求める。
出力映像におけるソース映像の高さは
y2 = floor((h * (x / w) * (par2 / par)) + 0.5)
と求める。
y2をpadして上下黒帯表示にする。

ソース映像の条件によってはy2の値がyを超えてしまいます。640x480でDAR値16/9などです。この時はpadしないようにしてます。何か計算で足りないものがあるようですけど、頭が飽和状態です。何か勘違いがあればコメントください。

前回記事でコメント頂いたビエラで画面モード1で全画面表示する方法で解像度が1920x1080、1280x720と960x540の時のSAR値を決め打ちしています。他に見逃している解像度があるかもしれません。
無駄に解像度を細かく場合分けしている気もするので削ってもいいかなと思っています。720x480と1920x1080さえあればいい?

音声のマルチトラックは3音声でも動くようです。4音声以上は試していません。
最近のマイブームはMatroskaになんでも突っ込んでおく事です。昔のmp4もばらして詰め込み直してます。
DLNA再生も字幕とチャプターがつけられれば文句なしの環境になるんですけどね。チャプタはBMS本体の改造が必要そうです。字幕はまったく目途無し。

トランスコードを行う場合、高速に変換を行う必要は無いと思います。リアルタイムよりちょっと速いくらいが最適です。ffmpegのthreadsオプションでお使いのCPU能力に合わせて少しでもCPUを使わない値にした方が良いと思います。
CPUが非力な場合はffmpegの"-re"オプションを付けても良いと思います。入力ファイルのfpsに合わせたリアルタイムの読み込みを行うオプションです。しかし、この場合は変換が間に合わずちょっとカクカクする場合もあります。

QSVEncCの使用はお勧めしません。プロセスが終わらず残ってしまうことが多いです。何となくボケて変換されてしまいます。何か設定が悪いのかもしれません。
QSVが使えるCPUならffmpegトランスコードは余裕でしょう。QSVは無線LAN経由でどうしてもビットレートを低く抑えたい場合に使う程度が良いでしょう。

それでは、今回のVIERA GT3用Luaスクリプトを載せておきます。


VIERA-GT3.lua

※より新しいLuaスクリプトを"BMS2用Luaスクリプト"に公開しています。

コメント

  1. 字幕は結構簡単に対応できますよ
    ffmpegは発展途上なのでmencoderがオススメです
    arib字幕なら対応しているvlcを使えばOKです

    返信削除
    返信
    1. コメントありがとうございます。
      mencoderを使えば字幕を焼き付ける事ができますね。ISO DVDと同じ処理をすればできそうです。
      でも、私がやりたいのはソフトサブです。テレビのメニューで字幕切り替えをしたいんです。
      VLCの方はvlc-aribsubの事でしょうか?こちらもトランスコードで使うにはハードサブしかないですよね?

      個人的にはarib字幕ソースはまったく必要としていません。テレビで字幕を出すにはそれしかないようなので、いろいろな字幕ファイルをarib字幕へエンコードする術があればできそうだなぁ・・・と指をくわえてます。

      そもそもテレビがいろいろな字幕を受け付けてくれればと思います。こういうマイナーな不満が日本製テレビから外国製テレビを使い始めるきっかけを作っていると思うんですよね。

      削除

コメントを投稿

最近のコメント

Threaded Recent Comments will be here.