何が問題か?
Universal Media Server(UMS)は素晴らしい。
しかし,上手くTVで再生できないファイルがある…PCでは再生できるのに…
原因は,TVが気難しいからである。
コンテナが合わない,コーデックが合わない,プロファイルが,レベルが合わない…
ではどうすればよいか。
もともと,UMSにはテレビに合わせてファイルを変換する機能がある(「トランスコード」という。)。
しかし,UMSは賢いので,TVが対応しているならばトランスコードしないでファイルを送るようになっている。
この機能をオフにして,常にトランスコードすればよい。
Core i3以降のCPU,802.11n以降の無線ネットワークにはその余裕がある。
異なるファイル形式に対応する方法
トランスコードの設定はrenderersフォルダにあるconf設定ファイルで行う。
自身のTVに対応するconfファイルを編集する。
なお,GUIからもconfファイルを開くことができる。
自身のTVに対応するconfファイルを編集する。
画像ではBravia EX700用の設定を追加してある |
なお,GUIからもconfファイルを開くことができる。
ステータス タブで設定したいTVをクリック |
画像のようなダイアログが出たら赤丸部分のボタンをクリック |
そしてTranscodeExtensions = の項目を見つけるか,なければ追加する。
TranscodeExtensions = の項目には自身の知る限りの動画ファイルの拡張子を追加しておく。
TranscodeExtensions = に設定された拡張子のファイルは常にトランスコードされる。
TranscodeExtensions = の項目には自身の知る限りの動画ファイルの拡張子を追加しておく。
TranscodeExtensions = に設定された拡張子のファイルは常にトランスコードされる。
例えば,
TranscodeExtensions = mkv,flv,mpg,mpeg,mp4,webm,3gp,m4v,avi,mov,qt,wmv,asf,ts,m2t,m2ts
のようにしておく。
他にもあれば適宜追加する。
mp4とmkvがあれば大体いいだろう。
他にもあれば適宜追加する。
mp4とmkvがあれば大体いいだろう。
次にトランスコードの設定をする。
ここで変換して転送される動画の画質が決まる。
まず,UMSのGUIにある変換設定タブの動画品質(MPEG-2)設定は,複雑な設定に向かないので基本的に使用しない。
ここはconfファイルでの設定と衝突するので本当は空にしておきたいが,GUIの仕様か空にはできない。
そこでGUIの動画品質(MPEG-2)設定は,
keyint=6
とだけ設定する。
自動(有線)などの設定のままにしておいてはならない。
自動で問題ない場合が多いが,TVは最大ビットレートなどにも気難しいため,自分で固定ビットレートにしておいた方が安心である。
キーインターバルは長すぎると音ズレが起きやすくなるので6~8程度が良い。
これは実際にはGOPの設定である。
つまりkeyint=6にしておくと,Iフレームが6フレームごとにやってくる。
なお,ビデオエンジンはFFmpegのみ有効にし,tsMuxeRに切り替える設定をオフにしておく。
ここで変換して転送される動画の画質が決まる。
まず,UMSのGUIにある変換設定タブの動画品質(MPEG-2)設定は,複雑な設定に向かないので基本的に使用しない。
ここはconfファイルでの設定と衝突するので本当は空にしておきたいが,GUIの仕様か空にはできない。
そこでGUIの動画品質(MPEG-2)設定は,
keyint=6
とだけ設定する。
自動(有線)などの設定のままにしておいてはならない。
自動で問題ない場合が多いが,TVは最大ビットレートなどにも気難しいため,自分で固定ビットレートにしておいた方が安心である。
FFmpegのみ有効,GPUアクセラレーションはオフ,動画品質で「keyint=6」のみ設定 |
キーインターバルは長すぎると音ズレが起きやすくなるので6~8程度が良い。
これは実際にはGOPの設定である。
つまりkeyint=6にしておくと,Iフレームが6フレームごとにやってくる。
なお,ビデオエンジンはFFmpegのみ有効にし,tsMuxeRに切り替える設定をオフにしておく。
本番の設定は先ほどのconf設定ファイルである。
TranscodeVideo = MPEGPS-MPEG2-AC3
CustomFFmpegOptions = -b:v 20000k -maxrate 20000k -minrate 20000k -bufsize 10000k
とする。
-b:vと-maxrateと-minrateは同じ値にするとCPUの負担が少ない。
数値はお好みだが,フルHDであれば20000kで十分である。
値が大きいほど高画質だが,ネットワークの帯域やTVの処理能力を超えるとカクカクになる。
自身の環境に合わせて調節する。
大きくても24000kぐらいだろう。
-b:vと-maxrateと-minrateは同じ値にするとCPUの負担が少ない。
数値はお好みだが,フルHDであれば20000kで十分である。
値が大きいほど高画質だが,ネットワークの帯域やTVの処理能力を超えるとカクカクになる。
自身の環境に合わせて調節する。
大きくても24000kぐらいだろう。
-bufsizeは-b:vの1/4~1/2とする。
なぜならGUIの方でkeyint=6としたからである。
24フレームの動画でキーインターバルを6フレームとすると,1/4秒ごとにIフレームがくる。
-bufsizeが小さいと,Iフレームの大容量に対応できず1/4秒ごとに画質が極端に低いフレームが生じる恐れがある。
一方-bufsizeが大きすぎると,動きの激しい場面などで瞬間的に帯域が-maxrateの値を大きく超えてしまい,ネットワークの帯域やTVの処理速度を超えてカクつく恐れがある。
だから-bufsizeは-b:vの1/4~1/2がよい。
TranscodeVideo = は最も基本的な形式であるプログラムストリームのMPEG2,AC3が安全である。
H.264は対応するプロファイル,レベルがTVによって異なり設定が難しくなる。
なぜならGUIの方でkeyint=6としたからである。
24フレームの動画でキーインターバルを6フレームとすると,1/4秒ごとにIフレームがくる。
-bufsizeが小さいと,Iフレームの大容量に対応できず1/4秒ごとに画質が極端に低いフレームが生じる恐れがある。
一方-bufsizeが大きすぎると,動きの激しい場面などで瞬間的に帯域が-maxrateの値を大きく超えてしまい,ネットワークの帯域やTVの処理速度を超えてカクつく恐れがある。
だから-bufsizeは-b:vの1/4~1/2がよい。
TranscodeVideo = は最も基本的な形式であるプログラムストリームのMPEG2,AC3が安全である。
H.264は対応するプロファイル,レベルがTVによって異なり設定が難しくなる。
異なる縦横比に対応する方法
4:3の動画や,映画などで16:9より細長い動画がTVでは歪んでしまうことがある。
これもPC側で処理すれば問題が生じにくい。
これもPC側で処理すれば問題が生じにくい。
conf設定ファイルに
OverrideFFmpegVideoFilter = scale=w=trunc(ih*dar/2)*2:h=trunc(ih/2)*2,setsar=1/1,scale=w=1920:h=1080:force_original_aspect_ratio=1,pad=w=1920:h=1080:x=(ow-iw)/2:y=(oh-ih)/2:color=#000000
RescaleByRenderer = true
KeepAspectRatio = false
KeepAspectRatioTranscoding = false
見本
TranscodeVideo = MPEGPS-MPEG2-AC3
TranscodeExtensions = mkv,flv,mpg,mpeg,mp4,webm,3gp,m4v,avi,mov,qt,wmv,asf,ts,m2t,m2ts
CustomFFmpegOptions = -b:v 20000k -maxrate 20000k -minrate 20000k -bufsize 10000k
OverrideFFmpegVideoFilter = scale=w=trunc(ih*dar/2)*2:h=trunc(ih/2)*2,setsar=1/1,scale=w=1920:h=1080:force_original_aspect_ratio=1,pad=w=1920:h=1080:x=(ow-iw)/2:y=(oh-ih)/2:color=#000000
RescaleByRenderer = true
KeepAspectRatio = false
KeepAspectRatioTranscoding = false
RescaleByRenderer = true
KeepAspectRatio = false
KeepAspectRatioTranscoding = false
0 件のコメント:
コメントを投稿