姪ちゃんのおじさんのブロマガ

エンドロールの仕組み

2020/11/17 02:41 投稿

コメント:1

  • タグ:
  • ニコ生

どうもおじさんです。
そんなに大したことをしていないんですけどエンドロールの仕組みのお話です。

エンドロールで扱っている情報

エンドロールで表示される項目は主に…

  • 出演者情報(主に姪ちゃんとコメントおじさん・たまにポンコツたまに殿下)
  • 遊んだゲームの情報
  • そのゲームに関する攻略情報の参考にさせて頂いたウェブサイトの情報一覧
  • 広告を頂いた視聴者さんの一覧
  • コメントを頂いた視聴者さんの一覧
  • 使用した楽曲のクレジット一覧
  • 使用したソフトウェア一覧
  • ロゴ

これらに加えて右下の方にその配信のタイムラプス映像があります。

シーンについて

「エンドロール」のお話の前に根本の部分としまして姪ちゃんの配信には主に以下のシーンが用意されています。

  • ブランク(真っ黒な画面)
  • オープニング(カウントダウン)
  • オープニングトーク
  • メイン
  • 休憩中
  • エンドトーク
  • エンドロール

これらのシーンを必要に応じておじさんがリモートコントロールして切り替えています。
これらのシーンはそれぞれの名称に合わせた機能を持っています。
たとえば「オープニング」だったらカウントダウンするタイマーだったりとか、「オープニングトーク」だとローワーサードと呼ばれるニュース番組のキャスター紹介みたいなテロップがシュッと出てくる仕組みが入ってたりとかして配信の流れによってそれらのシーンを手動で切り替えていく流れになっています。

▲ローワーサード

「エンドロール」のシーンで行っている動作は配信中にコメントや広告をくれたユーザーさんのリスト取得とタイムラプス画像の出力タイミングの計算とそれらの配置になります。

リストの生成

「エンドロール」では配信中に広告をくれた方やコメントをくれた方のお名前を表示させて頂いてるんですが、それらのリストは配信が開始してからおじさんがシステムにニコニコとYouTubeの配信URLを登録してから生成され始めます。


▲おじさんが扱っている配信のシステム画面の一部

ニコニコやYouTubeに接続が完了するとコメントが飛んでくるたびにユーザーさんの情報をサーバのユーザーリストに追加していきます。

ニコニコ動画の場合は184という匿名でのコメントが可能な為、匿名ユーザーさんの場合は別途用意してある匿名コメントユーザーリストに追加。匿名でないユーザーさんとYouTubeからコメントをくださったユーザーさんは一般ユーザーリストに追加されます。(プロフィールを非公開にされているユーザーさんは匿名コメントユーザーリストに追加されます)

リストに追加される情報はユーザーさん毎に…

【匿名ではない場合】→ 一般ユーザーリストへ追加

 ▼ニコニコ

  • ユーザーさんのID(生ID)
  • ユーザーネーム
  • プロフィール画像のURL
  • コメントをした回数
  • NGスコア

 ▼YouTube

  • ユーザーネーム
  • プロフィール画像のURL

【匿名・プロフィール非公開の場合】→ 匿名ユーザーリストへ追加

  • ユーザーさんのID(匿名ID)
  • コメントをした回数
  • NGスコア

といった感じの内容が保存されていきます。

これらの情報はユーザーさんがその配信において初回時にコメントした際にセットされます。
配信中にコメントをくださった際に表示されるアイコンはそのタイミングで取得した画像になっていて、セットされた以降は新しいコメントが来るたびにそのコメントを行ったユーザーさんのIDとリストの中にあるIDを照合して一致したものがあれば、その情報からアイコンの画像のURLを取得したりそのユーザーさんのコメントした回数を1つ増やしたりとかという処理をしていて、一致するものがなければ新たなユーザーとして追加するといったことを繰り返しています。
広告に関しても同様に広告が発生したタイミング(配信画面上でToastyが登場する時)にリストが生成されていきます。

エンドロールでの動作

シーンが「エンドロール」に切り替わると「エンドロール」は以下の動作を行います。
  • サーバに対して広告ユーザーリスト取得のリクエストからの展開
  • サーバに対してユーザーリスト取得のリクエストからの展開
  • サーバに対して匿名ユーザーリスト取得のリクエストからの展開
  • タイムラプス映像生成の為の画像ファイル一覧情報取得のリクエストからの展開・計算

広告ユーザーリスト・コメントユーザーリストの展開
配信中に生成されたそれぞれのリストをサーバから受け取ってそれらを展開していきます。
この処理はとても単純なものでリストの上から順番(最初にコメントされた順)で1行毎にその項目にあるユーザー名を参照して出力していくだけの動作です。
匿名ユーザーさんに関してはリストの行数(トータル人数に該当するもの)を数えてその数字に「他 ~ 名の匿名ユーザーの皆さん」という文字を加えたものを出力しています。

ロール時間
エンドロールは毎回おじさんの趣味で曲が変わるので尺の長さが毎回異なります。
エンドロールには『ロール時間』という項目を設定できるようにしていて例えば2分20秒でキメが来るような曲の場合はそこの時間を140000ms(ミリセカンド)のような設定を予めしてあります。
最後に表示される姪っ子とおじさんたちのロゴは「エンドロール」のシーンに切り替わってからこの設定された時間を経過すると表示されるようになっています。



▲姪っ子とおじさんたちのロゴ

またそれ以外のクレジットの要素のスクロール速度もこの時間内に全て収まるように計算されます。

タイムラプス映像の生成
エンドロール中に右下に映っている映像はその配信のタイムラプス映像になっています。
よくスポーツ中継の番組とかだとその試合のハイライトシーンとかが最後に流れたりしますが、そういうのに近いことが出来ないかなーと思って思いついたものです。
タイムラプス自体はとてもシンプルなもので、いわゆる定点カメラをセットして一定間隔シャッターを開いていって撮影した写真を繋げて動画にするっていうのと同じことをOBS(配信ソフト)でやっています。
姪ちゃんの配信で使用しているOBSにはobs-screenshot-pluginというプラグインを追加しています。
このプラグインには一定時間ごとにスクリーンショットを撮った画像ファイルを特定のフォルダに保存し続けるという機能があるので「メイン」のシーンが展開されている場合のみ15秒置きにスクリーンショットを撮影してサーバの特定のフォルダに保存させるという設定をして動作させています。

サーバに画像ファイル一覧情報取得のリクエストを送ると指定したフォルダに入っているすべての画像ファイルのファイルネームが生成時間の古い順でリストにして送られてきます。
それらの画像ファイルを一定間隔の時間で順番に表示させるようにすることによってタイムラプス映像が出来上がります。

配信時間は不定なものなので配信終了時に何枚のスクリーンショットが最終的に何枚生成されるかもまた不定です。
そのため、画像一枚あたりを何秒間隔で表示させるかという設定は計算して出す必要があります。
これは予め設定したロール時間に対し、生成された画像の合計の枚数で割る事によって決めることが出来ます。すごく単純すぎてアレなんですが。
仮に『ロール時間』を2分20秒としている配信で、配信中に「メイン」のシーンが1時間50分あった場合440枚の画像が生成されることになるので…

140000 / 440 = 318.18181...

約318ms毎に画像をどんどん新しいものに切り替えていけばちょうどキメのところで最後の画像が表示されると共に姪っ子とおじさんたちのロゴが表示されるといった流れになります。

obs-screenshot-pluginはコチラ↓
https://github.com/synap5e/obs-screenshot-plugin

…みたいな

感じの仕様でエンドロールが出来ています。配信時間が長くなった時に画像情報一覧の展開が遅くなってたまにコマ落ちした感じになったりキメのタイミングが微妙にずれたりしてることがあったりもするんですがまあそこはご愛敬みたいな感じですね(ロードが終わってから動作させるみたいな処理をしていないのでマシンスペックに完全に甘えているせいです)。

ちなみに姪ちゃんはこの内容を一文字も理解していません。かわいいですね。

エンドロールを見るのはおじさんは非常に楽しみでして、ああ今日は50人もコメントしてくれたー!とかいった感じで喜んでいたりします。姪共々本当に感謝しています。
今後とも配信の方をお楽しみ頂けるよう色々と考えてみたりしたいと思っています。よろしくお願い致します。


コメント

タチコマ
No.1 (2020/11/17 20:17)
いつも配信楽しく視聴してます!こういう楽屋裏っぽい話って面白いのでしゅきぃ…。
初視聴からエンドロールがどんどんバージョンアップされていくのを目の当たりにして「すごい凝ってる!」と感心すると共に、最後まで飽きさせない構成に惹きつけられました。
選曲も好みが近いためか退屈さを感じず、大体最後まで見ちゃいますね。
ツイッターでタイムラプスについてお尋ねしましたがこういう仕組みだったんですね、全部は理解していませんが…。
ただ「画像ファイルを特定のフォルダに保存し続けるという機能」というところに、日常のネットサーフィンに応用できないものかと思考を巡らせてしまいました。
時々なら、タイムラプスではなくおじさん秘蔵の姪っ子ちゃんピンナップ写真集スライドショーをうっかり流しちゃってもいいのではないかと具申いたします。放送事故なら…かまへんやろ…。
エンドロールだけでなく、ゲーム配信中もリアルタイム翻訳とかしれっと機能追加されてるし、今後も目が離せません。
また姪っ子ちゃんが天を仰ぎながら楽しそうにゲームするところが見られるのを楽しみにしてます!
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事