Top / 設定 / MKV配信

MKV配信

ここでは PeerCastStation と FFmpeg と Icecast を使って配信用に動画をエンコードする設定を説明します。
まだまだ、配信者とリスナー共に、模索中ということをご理解下さい。
MKVで視聴・配信して気づいたことがあればwikiを更新してもらえると非常に嬉しいです。


MKV配信の特徴

MKV(H.265)配信の利点

  • 画質が良い
    • WMV(VC-1)配信よりも画質が良いFLV(H.264)配信の倍の圧縮率
  • 音質が良い
    • WMV(WMA)配信よりも音質が良いFLV(AAC)配信よりも音質が良いOpusが使えます。
  • ハードウェアのサポートがある
    • QSVとNVENCでHEVCのエンコードが出来ます
      Zeranoe FFmpegでQSVのHEVCのエンコードが出来ます※ただしSkylakeのCPUのみサポート
      QSVもNVENCもビルドツールでビルドしたffmpegでHEVCのエンコードが出来ます
      http://variedtastefinder.jp/page-388/
  • 将来性がある
    • Windows 10のWMPはh.265もMKVも対応しているので将来的にはPeerCast以外のソフトを導入しなくても見れるようになる
      ※現在(build10586)は音声にopusを使用しているとWMPの再生ができません
  • 圧倒的なビットレートの低さ
    • 低ビットレートで配信する場合QP値を調整することによりビットレートをWMVの2分の一以下に設定できる。ビットレートが低くなれば回線が細いwimaxやケーブルテレビの回線で見ることができるかも(要検証)
      リレー本数もたくさん出せるので下流切り対策にもなる。低ビットレートだからといって20本や30本もリレー出すと遅延等の原因になる。転送量のせいでプロバイダから警告が来た人はMKV配信がオススメ。

MKV配信 現時点での問題点

  • CPU使用率が高いとき?にブロックノイズが発生する。
  • 動きがない映像を映しているときにモザイクがかかるときがある。
  • 配信設定をきちんとしてないとバッファして遅延する。

MKV配信の視聴方法

MKV配信の視聴は下記のプレイヤーを使用します。現時点ではmpvとVLCがオススメです。
mpvは設定方法が分かりにくく上級者向けなので初心者の人はVLCがオススメです。
(mpv/VLCは自動再接続機能に対応しておりキャッシュが残りません。)
これ以外でもmpv、mplayer、VLC、gstreamerの再生エンジンを持つソフトなら再生できるかも知れません。
Peerstplayer/WMP/pcwmpでの再生を確認しましたが、まだ実用的ではありません。
(自動再接続機能に対応していない。キャッシュが残る。)
アンドロイド用のピアキャスとMXプレイヤーで何も意識せずMKV視聴が可能だったとリスナーから報告がありました。

mpv

Windows版のmpvの公式サイト
http://mpv.srsfckn.biz/
※更新が頻繁にされています。最新版へのこまめなチェックよろしくお願いします。

mpvの公式サイト
http://mpv.io/

PeerCastStation Version 2.1.4以降の場合の設定
PeCaRecorderの設定は
C:\Program Files\mpv\mpv.exe
引数 "$x&pls=m3u" --title="$0" --force-window=immediate
タイプ WMV|FLV|MKV|WEBM|UNKNOWN
pcypLiteの設定は
C:\Program Files\mpv\mpv.exe
引数 "<stream/>&pls=m3u" --title="<channelname/>" --force-window=immediate
タイプ WMV
タイプ FLV
タイプ MKV
タイプ WEBM
タイプ UNKNOWN
pcmp+の設定は
C:\Program Files\mpv\mpv.exe
引数 "<stream />&pls=m3u" --title="<channelname />" --force-window=immediate
タイプ WMV
タイプ FLV
タイプ MKV
タイプ WEBM
タイプ UNKNOWN
PeerCastStation Version 2.1.4以降じゃない場合の設定
PeCaRecorderの設定は
C:\Program Files\mpv\mpv.exe
引数 "$x" --title="$0" --force-window=immediate
タイプ MKV
FLVにも対応させたい時は
C:\Program Files\mpv\mpv.exe
引数 "$x" --title="$0" --force-window=immediate
タイプ FLV
WMVにも対応させたい時は
C:\Program Files\mpv\mpv.exe
引数 "mms$y" --title="$0" --force-window=immediate
タイプ WMV
「リレーに接続してから起動する」をチェック
pcypLiteの設定は
C:\Program Files\mpv\mpv.exe
引数 "<stream/>" --title="<channelname/>" --force-window=immediate
タイプ MKV
FLVにも対応させたい時は
C:\Program Files\mpv\mpv.exe
引数 "<stream/>" --title="<channelname/>" --force-window=immediate
タイプ FLV
pcmp+の設定は
C:\Program Files\mpv\mpv.exe
引数 "<stream />" --title="<channelname />" --force-window=immediate
タイプ MKV
FLVにも対応させたい時は
C:\Program Files\mpv\mpv.exe
引数 "<stream />" --title="<channelname />" --force-window=immediate
タイプ FLV

PeCaRecorderで引数保存ができない場合はPeCaRecorderを最新版に更新して下さい
http://www.geocities.jp/pecatv/

mpv.exeではなくmpv.comにするとmpvのログが見れます。

デフォルトだとストリーミングに接続してからウィンドウが立ち上がりますが、
引数に--force-window=immediateを付けるとウィンドウが立ち上がってからストリーミングに接続するようになります。

YPビューアで上記の通り設定しても他のプレイヤーがMKVに関連付けられていると他のプレイヤーが起動してしまうので、
そういう時は他のプレイヤーのMKVの関連付けを外すと設定したプレイヤーを起動することが出来ます。

mpvフォルダに以下のmpv.confとinput.confの設定ファイルを置くことによりカスタマイズ可能
自分でわかりやすいように#の後ろに説明文を書くことができますので、日本語の説明部分までコピペしても大丈夫です。

input.conf
MOUSE_BTN0_DBL cycle fullscreen
MOUSE_BTN1 cycle mute
MOUSE_BTN3 add volume 5
MOUSE_BTN4 add volume -5
Shift+MOUSE_BTN3 add volume 1
Shift+MOUSE_BTN4 add volume -1
1 set window-scale 0.5
2 set window-scale 0.75
3 set window-scale 1
4 set window-scale 1.25
5 set window-scale 1.5
6 set window-scale 1.75
7 set window-scale 2
Shift+UP add window-scale 0.1
Shift+DOWN add window-scale -0.1
p screenshot
UP add volume 5
DOWN add volume -5
DEL cycle mute
END set balance 0
LEFT add balance -0.1
RIGHT add balance 0.1
ESC quit
t cycle ontop
Alt+ENTER cycle fullscreen
SPACE cycle pause
ENTER playlist-next
mpv.conf
hwdec=auto                #ハードウェアデコードを有効
cache=no                  #キャッシュを無効にする
loop=inf                  #プレイリストをループする※接続が切れても再接続をする
input-default-bindings=no #デフォルトのキーバインドを無効
ytdl=no                   #youtube-dlを無効
softvol=yes               #音量変化が体感に近くなり、softvol-maxで100%以上の音量にできるようになります
softvol-max=130           #ボリュームの最大値。130で大体100の2倍の音量になります
volume=50                 #初期ボリュームを設定
autofit=30%               #初期ウィンドウサイズ

input.confをなるべくpcwmpに近くしています。

#no-oscにすることにより、mpvプレーヤーで遅延状況を確かめることができます。
Cache 4s-○○KB/MBと表示されます。安定しているときは大体の平均は6s以下です。
10s以上でMBになっている場合遅延が発生しています。
その時はプレイヤーを開き直すかreconnect.luaを導入することで遅延を小さくできます。

mpv.confにborder=noをつけるとフレーム無しになります。プレーヤーを閉じるときはQを押してください。

またluaを使って機能を拡張することも可能です
例 自動再接続のlua
プレイヤーがアイドル状態が20秒続くか遅延が大きいときに自動的に再接続します
また、キーボードのzを押すことでリレーを再接続することができます

方法は以下の2つあります。

  • mpvフォルダの中に「scripts」という名前のフォルダを作成してください。そしてscriptsフォルダの中にreconnect.luaを入れてください。
  • mpv.exeと同じフォルダにreconnect.luaを入れて引数に-script "reconnect.lua"を追加して下さい
reconnect.lua
local timer = mp.get_time()
mp.add_periodic_timer(1, (function()
  if mp.get_property_bool("core-idle") then
    if mp.get_time() - timer >= 20 then
      timer = mp.get_time()
      mp.osd_message("reconnect",3)
      print("reconnect")
      mp.commandv("playlist_next")
    end
  else
    timer = mp.get_time()
  end
end))

mp.add_periodic_timer(120, (function()
  local cache = mp.get_property_number("cache-used", 0)
  local avsync = math.abs(mp.get_property_number("total-avsync-change" , 0))
  if cache > 1500 or avsync > 1 then
    mp.osd_message("Refresh",3)
    print(string.format("Cache: %dKB AVsync: %d Refresh", cache,avsync))
    mp.commandv("playlist_next")
  end
end))

function addbumpurl_handler()
  if 
    string.find(mp.get_property("path"),"/stream/".. string.rep("%x", 32)) ~= nil  
    and
    mp.get_property_number("playlist-count")  < 3 
  then
    local streampath = mp.get_property("path")
    local id = {string.find(streampath,"/stream/(%x*)")}
    local a = {}
    mp.set_property("loop", "inf")
    mp.commandv("playlist_clear")
    for i in string.gmatch(streampath, "[^/]+") do
      table.insert(a, i)
    end
    for i = 0 , 2 do
      mp.commandv("loadfile", streampath , "append")
    end
    mp.commandv("loadfile", "http://".. a[2] .."/admin?cmd=bump&id=".. id[3] , "append")
  end
end
mp.register_event("file-loaded", addbumpurl_handler)

function bump_handler()
  if 
    string.find(mp.get_property("path"),"/stream/".. string.rep("%x", 32)) ~= nil 
  then
    local streampath = mp.get_property("path")
    local id = {string.find(streampath,"/stream/(%x*)")}
    local a = {}
    mp.commandv("playlist_clear")
    for i in string.gmatch(streampath, "[^/]+") do
      table.insert(a, i)
    end
    mp.commandv("loadfile", "http://".. a[2] .."/admin?cmd=bump&id=".. id[3] , "append")
    mp.commandv("playlist_next")
    print("bump")
    mp.osd_message("bump",3)
    for i = 0 , 2 do
      mp.commandv("loadfile", streampath , "append")
    end
  end
end
mp.add_key_binding("z", "bump", bump_handler)

input.conf/mpv.conf/recconect.luaをzipにしました。以下よりダウンロードできます。
(更新が行われている場合がありますので確認してみてください。)
https://kie.nu/2o2L

mpvを使ってLinuxでmkv配信を視聴できたとリスナーから報告がありました。

mpvのマニュアル
http://mpv.io/manual/master/

mpvはキャッシュが残りません。

mpv使用中はディスクへの書き込みがありませんでしたが、アプリを終了するとディスク活動中のプロセスにでてきた。アプリ終了したらディスクに負担かかる?

VLC media player

VLC media playerの公式サイト
https://www.videolan.org/vlc/
詳細設定(設定の表示「すべて」にチェックを入れる)の入力/コーデックにあるデマルチプレクサをダブルクリック。matroskaの所のダミー要素にチェックを入れるとMKV配信を再生出来ます。

PeCaRecorderの設定は
C:\Program Files (x86)\VideoLAN\VLC\vlc.exe
引数 "$x" --loop --meta-title "$0"
タイプ MKV
pcypLiteの設定は
C:\Program Files (x86)\VideoLAN\VLC\vlc.exe
引数 "<stream/>" --loop --meta-title "<channelname/>"
拡張子 MKV
pcmp+の設定は
C:\Program Files (x86)\VideoLAN\VLC\vlc.exe
引数 "<stream />" --loop --meta-title "<channelname />"
タイプ MKV

コマンドの引数に--loopを入れてますがこれを入れていると止まっても再接続されます。

VLC 2.1.5をお使いになられている場合、配信者のオーディオコーデックの設定がlibopusになっている場合音声が再生されない場合がありますその場合は配信者にlibopus以外にしろと言ってください。
VLC 2.2.0でlibopusに対応しました。

VLCもキャッシュが残りません。

LAVFilters

LAVFiltersの公式サイト
https://github.com/Nevcairiel/LAVFilters/releases

LAVFiltersとプレイヤーの組み合わせでMKV配信が再生できる場合があります。
LAVFiltersをインストールする際はデフォルトのままでインストールしてください
x64版とx86版両方インストールしてください(OSが64bitの場合)
32bitはわからない
ちなみにWMPとpcwmpとPeerstPlayerは基本的には再生出来ないプレイヤーですが裏ワザ的な方法で再生できます。(しかし、これら3つのプレイヤーは手動で再接続しなければならない点とキャッシュが残ってしまう点があるので非推奨です。)

  • 再生出来たプレイヤー
  • Peerstplayer ※PeerstPlayerの場合はURLを開いたら再生するまで右クリックメニューのWMPメニューの「再生/一時停止」を何回か実行すれば再生できます。
    Peerstplayerでmkv配信を見てて急に映像が止まった場合、Peerstplayerを「右クリック」→「WMPメニュー」→「停止」を押してください。そしたらもう一度一から映像を受信します。そしたら「再生/一時停止」を何回か実行してください。
  • WMP ※WMPの場合はURLを開いたら再生するまで再生ボタンを連打すれば再生できます。
    WMPでも映像が止まってしまったら停止を押してから再生を何回か押したらいいです。
  • pcwmp ※pcwmpの場合はURLを開いたら再生するまでスペースキーを連打すれば再生できます。
  • MPC-BE ※内部フィルタのMatroskaをオフにすること
  • MPC-HC ※内部フィルタのMatroskaとHEVCをオフにすること
  • PotPlayer ※インストール途中でコーデックのインストールを促されますがインストールしなくても LAVFiltersが入っていればMKV配信を視聴できます。ソース/スプリッタのMatroskaを「FFmpeg MKV ソース/スプリッタ」にすること

SMPlayer

SMPlayerの公式サイト
http://smplayer.sourceforge.net/ja/info

PeCaRecorderの設定は
C:\Program Files (x86)\SMPlayer\smplayer.exe
引数 "$y"
タイプ MKV
「リレーに接続してから起動する」をチェック
pcypLiteの設定は
C:\Program Files (x86)\SMPlayer\smplayer.exe
引数 "<stream/>" "http://localhost:7144/stream/<id/>.mkv"
拡張子 MKV

SMPlayerはプレイリストURLに接続して再生できないようなので、pcypLiteの方は最初にプレイリストURLに接続してからストリームURLに接続して再生するようにしています。
SMPlayerは再生エンジンをmplayerかmpvか選べますが、mpvはまだ不安定なのでmplayerを使用して下さい。将来的にはmpvエンジンになる予定です。
「オプション」→「環境設定」→「インターフェイス」→「実行」タブ→「実行中のSMPlayerのインスタンスを1つのみ使用する」にチェックを外せば複数起動が出来ます。

mplayer

mplayerの公式サイト
http://mplayerwin.sourceforge.net/

PeCaRecorderの設定は
C:\Program Files\mplayer\mplayer.exe
引数 -playlist "$x"
タイプ MKV
pcypLiteの設定は
C:\Program Files\mplayer\mplayer.exe
引数 -playlist "<stream/>"
拡張子 MKV
pcmp+の設定は
C:\Program Files\mplayer\mplayer.exe
引数 -playlist "<stream />"
タイプ MKV

mpvのフォーク元でSMPlayerの再生エンジンです。
引数の-titleでウィンドウタイトルを設定出来ますが日本語が文字化けして使いものになりません。
mpvと使い方が似ていて、mpvよりも使い勝手が悪いですが参考のために残しておきます。

ffplay

ffplayの公式サイト
http://ffmpeg.zeranoe.com/builds/

ffplayはffmpegに同梱されています。
コマンドプロンプトで下のようなコマンドを打つと再生出来ます。

C:\ffmpeg\bin>ffplay "ストリームURL"

ffplayはffmpegのオマケみたいなソフトなのでプレイヤーとしては使い勝手が悪いですが参考のために残しておきます。

gstreamer

gstreamerの公式サイト
http://gstreamer.freedesktop.org/

コマンドプロンプトで下のようなコマンドを打つと再生出来ます。

C:\gstreamer\1.0\x86\bin>gst-launch-1.0 playbin uri="ストリームURL"

gstreamerは再生ソフトと言うよりマルチメディアフレームワークですが参考のために残しておきます。

MKV配信の配信方法(ffmpegとIcecastを使う場合)

MKV配信で注意してほしいこと

  • エンコードのファイルサイズが大きすぎるとかくつく原因になります。 どんなにfpsを設定してもファイルサイズが大きすぎると、視聴側はかくついています。
    ビデオサイズ、ビットレート等を調節して適切なファイルサイズを維持してください。

事前準備

PeerCastStation導入

サーバー用ソフト(Icecast)導入

Icecastの設定と起動

エンコーダー(FFmpeg)の導入

コマンドのつなぎ方を学ぼう!

PeercastMKV配信でよく使うコマンド(ここを読んでおくと、wikiを見ずに自分で設定できるようになります。)

アプリを起動する順番

Icecastを起動
      ↓
FFmpegでIcecastにpush送信
※ここを設定する前にコマンドのつなぎ方を学ぼう!PeercastMKV配信でよく使うコマンドを読んでおいてください。
      ↓
PeerCastStationでチャンネルの作成
      ↓
SCFFを起動

  • △鉢はどちらから先に実行してもかまいません。Icecastを先に起動しないとffmpegがエラーを出します。
  • SCFFを使うときの注意点があります。エンコーダーを止めて再びエンコーダーを起動すると、SCFFはdrag here状態になってしまいます。
    一度エンコーダーをきってまたエンコーダーを起動する場合は、エンコーダーを起動した後にSCFFの「refresh」ボタンを押してください。
    これで正常に画面をキャプチャできると思います。配信画面を確かめてみてください。
  • SCFH DSFを使う場合正常に作動しない場合があります。もしそのような場合SCFFをダウンロードしてください。

アプリを終了する順番

SCFF
 ↓
ffmpeg
 ↓
PeerCastStation
 ↓
Icecast

  • ffmpegのコマンドプロンプトを右上の[×]から強制終了させると使用しているDirectShowが開放されません。
    結果的にSCFFの使用中プログラム一覧に居座ります。キーボードのQを押してエンコードをQuitしてください。

MKV配信のテスト再生

テスト動画でテスト配信

PeerCastStation導入

  • Peercast(PP版、VP版、IM版)は配信でmkvを認識しないため、PeercastStation(2014年12月時点の最新verは1.8.0)を導入して下さい。
    1.6.1から、最大上り帯域(初期値0kbps)の値を、適切な値に設定しないとリレーが構築されないので、しっかりとヘルプを見て設定すること。

サーバー用ソフト(Icecast)導入

WMEの場合は単体でエンコーダーとサーバーを兼ねていましたがFFmpegにその機能はありません。
そこでPeerCastStationによるhttpのpull要求に対しデータの送信を行えるソフトが必要になります。

  • FFmpegでデータをpushする場合はIcecastが必要になります。
    IcecastのDLはこちらをクリックしてください。
    • 「Icecast for Windows」をクリックしてDLします。

エンコーダー(FFmpeg)の導入

  • FFmpegのDLはこちら
    • 「just download the 32-bit static builds.」をクリックしてDLします。

ffmpeg64bitでも配信できます。64bitのffmpegは高付加のとき32bitより負荷が軽減するメリットがあるようですがオプションに制限があるようです。(要検証)

Icecastの設定と起動

etcフォルダの中のicecast.xmlをエディタで開いて<icecast>タグの間(よく分からなければ2行目)に下にあるタグを貼り付ける

    <mount>
        <mount-name>/example.mkv</mount-name>
        <password>hackme</password>
    </mount>

これでIcecastの設定は終わりです。
FFmpegを起動する前にicecast.batを実行してIcecastを起動させておいて下さい。

PeerCastStationでチャンネルの作成

PeerCastStationで配信ボタンを押す
ソースをhttp
タイプをMatroska
ストリームURLをhttp://localhost:8000/example.mkv
チャンネル名を自分の好きな名前

にして配信開始。

※可変ビットレートを使用する場合PeerCastStationのビットレートの設定を自動ではなく手動で入力したほうがいいという意見が出ましたが、自動でも今のところ大きな問題というのはありませんでした。
もし何か問題があった場合、手動でビットレートを入力してください。

PeercastMKV配信でよく使うコマンド

  • ビットレートの種類 -- -qp/-q(コンスタントQPモード)
    例 -qp 32 開発者おすすめ
    品質を制御する量子化パラメーター値を設定します。
    圧縮効率とパフォーマンスはQ値を変化させて配信環境を模索する。
    このオプションを使用すると、コンスタントQPレート制御(デフォルト)を使用する。
    値の範囲0から51の整数
    デフォルト32
    数字の値が低いほど高品質で22〜38の間で決めるのがオススメ

qp値はH265では推奨ですが、ffmpegではcrfが推奨されています。crfをお使いください。

  • -crf 品質管理VBR
    値の範囲:0から51の整数
    デフォルト28
     -crfは「:」でつなげることによってパラメーターを増やすことができる。
    x265でcrf値を指定する場合「-x265-params」をcrf値の前に書いてください。
    例 -x265-params -crf:vbv-bufsize=バッファサイズの値:vbv-MAXRATE=映像のマックスレートの値
    vbv-bufsizeはVBVのバッファサイズの指定をする。
    vbv-MAXRATEは最大ローカルビットレート(キロビット/秒)。VBV-bufsizeが指定されてる場合のみ使用することができる。
    vbv-bufsizeはvbv-maxrateの2倍がよろしいかと思います。
  • -bitrate
    ABRですが同じ値にすることでCBRに近くなります。kbps単位でビットレートを指定します
    strict-cbrはより厳格にCBRに近づけますが実験的なオプションです。(x265v1.9)
    例 -x265-params bitrate=1000:vbv-bufsize=1000:vbv-maxrate=1000:strict-cbr=1
  • 出力速度をリアルタイムにする
    • -re
      -re
       -reだけでいい。
       -re を付けると出力速度がリアルタイムになるように調整する出力速度に合わせて入力を遅延して読み込み、過剰な先読みを行わないようにする。directshow使用時にこの設定が必要かは要検証。
  • 画面サイズ
    • -video_size
       -video_size ○x○でコマンドを動かします。
      例 -video_size 640x480
      ここを変更することでdirectshowに要求する画面の解像度を設定します。
      画面サイズが大きいほど解像度は高くなりますが、CPUに負荷がたくさんかかります。ファイルサイズも大きくなるので映像がかくつく原因になります。適切な値を設定してください。
  • 入出力フォーマットの指定
    • -f
      例 -f dshow /-f matroska
      出力フォーマットの指定です。PeercastのMKV配信なら-iの前に-f dshowと、音声設定がすべて終わった後ろに-f matroskaをつければ良いです。
      詳細についてはリンクのコマンドのつなぎ方を学ぼう!を見てください。
  • 映像・音声デバイスの設定
    • -i
      映像・音声のデバイス設定をします。
      -i video="ビデオソース":audio="オーディオソース"
      上記の形でコマンドを動かします。
  • フラッグ
    • -flags/-partitions
      マクロブロック(○x○画素のブロック単位)をサブブロックに分割する際に利用可能なモードを指定する。
      • 複数指定する場合は + でつなぐ。
        Peercastではまだこれがいいというのははっきりわかっていませんが、
        -flags +global_header にしてください。

フラッグは指定しなくてかまいません。

  • ビデオコーデック
    • -vcodec libx265
      MKV配信なので
      -vcodec libx265
      とコマンドを打ってください。
  • フレームレート(FPS)
    • -framerate
      例 -framerate 30
      directshowに要求する映像のフレームレートを設定できます。
      デフォルト30
      数字の値が低いと映像がカクカクします。
      高ければ滑らかに映像は動きますが、CPU使用率を結構使うのでPCスペックと相談してください。
  • スレッド
    • -threads
      例 -threads 0
      スレッドプールのスレッド数。 0(デフォルト)
      0は自動でスレッド数を検出します。
  • プリセット
    • -p/-preset
      FFmpegの-presetによって動きが早いシーンの画質とCPU使用率が大きく変動します。静止画ならどれを選択しても画質は同じです。
      ultrafast superfast veryfast faster fast medium slow slower veryslow placebo
      低い <ーーーーーーーーーーーーーー CPU使用率 ーーーーーーーーーーーーーー> 高い
      低画質 <ーーーーーーーーーーーー 動きが早いシーン ーーーーーーーーーーーー> 高画質
      プリセットの詳細はx265 Evaluators Guide March 16 2014.pdfをお読みください。
      [ダウンロードリンク:https://bitbucket.org/multicoreware/x265/downloads]
  • チューン
    • -t/-tune
      チューンソースや状況、特定の種類の設定を行う。
      チューンを設定する際は、必ず-prestの後に設定しなくてはならない。
       -presetの後に設定するが、他のすべてのパラメーターの前に適用される
      値:psnr、ssim(デフォルト)、fastdecode、zerolatency
  • psnrとssimは画質の評価基準が違う。
    ssimのほうが人間的の主観的判断に近い画質といわれている
  • fastdecodeは視聴負荷を抑えたオプションで画質はその分落ちます。
  • zerolatencyはエンコード時のレイテンシ(エンコード前のデータがエンコーダーに入力されてから、エンコード済みのデータとして出力されるまでのタイムラグ)を最小に抑えるための設定。
    とにかく入れたものを少しでも早く出すために画質等は二の次になっている。基本的に放送、ストリーミング用途のための設定。
  • リアルタイムバッファサイズ
    • -rtbufsize
       -rtbufsize
      MBが単位となります。
      例 -rtbufsize 100MB
      デフォルトは100MB
      バッファというのは一時的にデータを保管する場所という意味です。
      コンピューター処理が間に合わずに遅延やデータが滞ってしまわないように適切なサイズを設定しましょう。
      バッファサイズが足りないと映像が途切れたり、ノイズが発生したり環境に影響が出る恐れがあります。
      バッファサイズが大きすぎると遅延の原因になるかもしれないことが分かりました。
  • 音声コーデック
    • -acodec
      例 -acodec libvorbis
      WMV(WMA)配信よりも音質が良いFLV(AAC)配信よりも音質が良いOpusが使えます。
      ffmpegの公式ホームページのドキュメントから音質が良い順番を引用。ちなみにOBSが使用しているのはlibfaacです。
libopus > libfdk_aac = libvorbis > libmp3lame >= libfaac >= eac3/ac3 > aac > libtwolame > vorbis > mp2 > wmav2/wmav1 > libvo_aacenc

その代わりlibopusを使うとVLC 2.1.5で再生できなくなります。libfdk_aacはライセンス問題で使用できませんので。libvorbisかlibmp3lameを使いましょう。
VLC 2.2.0でlibopusに対応しましたので音質が良いlibopusを使いましょう。

libvorbisを指定してffmpegで黄色の文で警告文が出る場合気になるのなら違うコーデックに変えてください。

  • サンプリング周波数
  • -ar
    CDで採用されてるのは44.1kHzなので
    -ar 44100
    でいいと思います。
    問題があれば他の周波数を使用してください。
  • 音声ビットレート
    • -ab(固定ビットレート)/-aq(可変ビットレート)
      -ab 128k
       -abは固定ビットレートです。
      とれる値は、
      8k, 16k, 24k, 32k, 40k, 48k, 64k, 80k, 96k, 112k, 128k, 160k, 192k, 224k, 256k, 320k

128kbp以上あればいいと思います。
 

  • aq(可変ビットレート)についてはまだ検証中です。
     -aqは可変ビットレートです。
    -aq 5

0-10でクオリティを指定し,VBRでエンコードを行います。 0(高音質大容量)〜10(低音質小容量)

  • -aq 4  VBR 150-180kbps程度
  • -aq 2  VBR 170-210kbps程度
  • -aq 0  VBR 200-240kbps程度

  以下はMOBILEHACKERSより引用です。

【-aq オプションについて】
確認済みのものとしては、-acodec libfaac と -acodec libmp3lame を指定した場合は -aq で品質ベースのVBRエンコードが可能です。
libmp3lame を使う場合、-aq の指定値は lame.exe (LAME 本家のフロントエンド) の -V オプションの値と同じです
(ただし、avi の音声に VBR の mp3 を使うのはトラブルの元なので、音声のみのエンコードをしたい場合等に利用してください)。
同様に libfaac を使う場合、-aq の指定値は faac.exe (FAAC 本家のフロントエンド) の -q オプションの値と同じです。
特に faac の場合は、-ab でビットレート指定モードでエンコードすると例え -ab 256k などと指定しても大体160kbps程度でビットレートが頭打ちになってしまうが、aq の方で指定するとこのような制限はなく高ビットレートの音声も作成できる。

  • モノラル/ステレオの選択
    • -ac モノラルなら1、ステレオなら2を入力してください
      例 -ac 2
  • 音量
    • -vol 数値を256にすると100%の音量。200%の音量を出すには512を指定してください。
      例 -vol 256
    • ffmpegの古い仕様で既にDocumentationに載っておらず、ビルドによってはエラーで停止します。Audio Filter の Volume で指定しましょう。
  • Icecastにプッシュ時に必要なコマンド
    -password hackme -content_type video/webm icecast://localhost:8000/example.mkv

上記のコマンドを-f matroskaの後ろに入力してください。

コマンドのつなぎ方を学ぼう!

PeercastMKV配信でよく使うコマンドにでてきたコマンドを使用してffmpegを設定し、エンコーダーの設定を完成させたいと思います!
では、まず早速ですが、このコマンドを見てください。

ffmpeg -re -rtbufsize 180MB -framerate 30 -video_size 832x468 -f dshow -i video="SCFF DirectShow Filter":audio="ステレオ ミキサー (Realtek High Definit" -threads 0 -flags +global_header -qp 22 -vcodec libx265 -preset ultrafast -tune ssim -acodec libvorbis -ar 44100 -ab 128k -ac 2 -vol 256 -f matroska -password hackme -content_type video/webm icecast://localhost:8000/example.mkv

このコマンドを自分なりに設定してみましょう!
コマンドの間隔は必ず入力モードを半角英数字にして間隔をあけてください! FFMLなどのツールを使わず配信をする場合、一番最初に「ffmpeg」のコマンドがきます。
このコマンドはffmpeg.exeにコマンドを指定することを示すために必要なものです。
その後ろに「-re」を持ってきましょう。。-re を付けると出力速度がリアルタイムになるように調整してくれます。
その後ろに「-rtbufsize」を入力しましょう。
そして「-framerate」と「-video_size」を決めた後

-f dshow -i video="ビデオソース":audio="オーディオソース"

を入力しましょう。
ここで入力されたデバイスが配信時に使用されます。
そして

-threads 0 -flag global_header -qp ○ -vcodec libx265 -preset ○ (-tune)

※ -tuneは入れても入れなくてもどっちでも良いです。
映像関連のコマンドを入力します。
映像のコマンドが終われば次は音声です。

-acodec ○ -ar ○ -abまたは-aq ○ -ac ○ -vol ○

音声のコマンド入力が終わりました。
では最後に、

-f matroska -password hackme -content_type video/webm icecast://localhost:8000/example.mkv

上記のコマンドを入力すれば、エンコーダーの設定完了です。

batファイルに書いておくとコマンドを入力する手間が省けます。
メモ帳にffmpegの設定を入力して(右端で折り返すにチェックを入れないでください。)
拡張子を.batに変換してください。
そしてffmpegの「ffmpeg.exe」が入っているフォルダと同じところに.batファイルを入れてください。
そうすれば、設定した.batファイルを起動するだけでエンコードできます。

FFmpegでIcecastにpush送信

IceCastを起動してからFFmpegを起動してみましょう。

ビデオソース、オーディオソースの入力の仕方が分からない場合、下のコマンド例を参考にしてください。

コマンド例1 SCFF アマミキ NETDUETTO を使用した場合のffmpegの配信コマンド

ffmpeg -re -rtbufsize 100MB -flags +global_header -framerate 30 -video_size 640x360 -f dshow -i video="SCFF DirectShow Filter":audio="ライン (Yamaha NETDUETTO Driver (W" -threads 0 -vcodec libx265 -tune ssim -preset ultrafast -b 900k -af aresample=async=1 -acodec libvo_aacenc -ar 44100 -ab 96k -ac 2 -vol 256 -f matroska -password hackme -content_type video/webm icecast://localhost:8000/example.mkv

コマンド例2 SCFF ステレオミキサーを使用した場合のffmpegの配信コマンド

ffmpeg -re -rtbufsize 180MB -framerate 30 -video_size 832x468 -f dshow -i video="SCFF DirectShow Filter":audio="ステレオ ミキサー (Realtek High Definit" -threads 0 -flags +global_header -qp 22 -vcodec libx265 -preset ultrafast -tune ssim -acodec libvorbis -ar 44100 -ab 128k -ac 2 -vol 256 -f matroska -password hackme -content_type video/webm icecast://localhost:8000/example.mkv
  • FFmpegのオプションがよく分からないならFFMPEG LauncherでFFmpegのオプションを参考にすれば良いと思います。
    • 「お知らせ」の【置き場】にあるURLを開いてDLします。
  • FFmpegの配信に関してはwikiのFLV配信のページが参考になると思います。

ffmpegのコマンドオプション

libx265 のエンコードオプションのpdfです(英語)。 以下のサイトにあるx265 Evaluators Guide March 16 2014.pdfでlibx265 のエンコードオプションを調べることができます。
https://bitbucket.org/multicoreware/x265/downloads
言語は英語で書かれています。

MKV配信テスト再生・テスト配信

MKV配信のテスト再生

http://localhost:7144/html/relays.html
に行って配信したチャンネルの再生ボタンのURLをクリップボードにコピー

mpvのフォルダでコマンドプロンプトを開いて

mpv "コピーしたURL"

で再生される。

テスト動画でテスト配信

テスト用の動画を作成する

ffmpeg -i input.mp4 -f matroska -vcodec libx265 -preset ultrafast -acodec libvo_aacenc output.mkv

Icecastを起動

PeerCastStationでチャンネルの作成

FFmpegでIcecastにテスト用の動画を送信

ffmpeg -re -i output.mkv -flags +global_header -codec copy -f matroska -password hackme -content_type video/webm icecast://localhost:8000/example.mkv

MKV配信のテスト再生

関連リンク

関連ツール・ソフト

視聴方法について

編集メモ

  • hackmeのままはさすがにどうよ、他人に勝手にicecast使われるぞ -- 2015-01-02 (金) 21:05:52
  • mpvの2017/07/18更新バージョン以降は、input.confのMOUSE_BTN3がAXIS_UPに、MOUSE_BTN4がAXIS_DOWNになってるのでご注意ください -- 2017-07-28 (金) 16:39:13


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-28 (金) 16:39:13 (25d)