はじめに
2020年11月、『ニコニコ実況リニューアル、torne等との連携サービス終了』というニュースが全nasneユーザーを震撼させた。
それから数ヶ月後の先日、バッファロー版nasneが発売されたが、ニコニコ実況に代わるサービスは現れず、私は今日も一人寂しく録画を消化するのであった…
というわけで(?)、やっぱりニコニコ実況のないnasneは味気ないですよね。
今回も ないなら作ろうの精神で、nasneと連携してニコニコ実況を表示する簡単なPC用GUIアプリを作ってみました。
これで録画視聴が捗りますね!
PC TV Plus(右、PC用のnasne再生ソフト)で動画の再生を開始すると自動的に実況(左)が流れ始めます。
スマートフォンで動画の再生を開始しても、同様にPC上で実況の再生が自動開始されます。
追記
Pydroid3
というAndroidアプリで実行したところ、スマートフォンでも普通に動作しました。
(作ってる途中で気づいたけど、今年の1月ごろ?に同じことをやってる人がいました。)
機能
できること
・nasneで再生されている動画を自動検出しての再生
・任意の時間帯の実況の表示
・再生速度の変更(1.0~2.0倍)
・シュートカット操作による、再生一時停止、10秒ごとの時間送り戻し、再生速度調節
・シークバーによる再生位置の調節
できないこと
・再生位置の検出
やってないこと
・オーバレイ表示
・コメントの重なり軽減処理
確認してないこと
・PS4で再生したときの挙動
・ローカルチャンネルの番組を再生したときの挙動
・バッファロー版での動作確認
使い方
必要なもの
・プログラム本体
・Python
・PyQt5、PyQtGraphなどのライブラリのインストール(AnacondaでPython環境を構築した場合は予めインストールされてそう)
準備、実行
・nico.pyw
をテキストエディターで開いて、20行目にお使いのnasneのIPアドレスを入力
・nico.pyw
を実行(ダブルクリックでできなければPythonのインストールフォルダにあるpythonw.exe
に関連付けを行ってから)
操作方法
キーボードショートカット
・再生停止: スペースキー
・再生速度調節: カーソルキー上下
・10秒送り戻し: カーソルキー左右
・実況データの取得(主にnasneと連携しない場合に使用): エンターキー
・表示領域リセット: Rキー
nasneと連携する場合
起動して放っておけば勝手に再生が始まるので、再生状態に合わせて速度、位置を調節します。
単体で使用する場合
・シークバーの上の日時をお好みの時間に調節
・画面左上のメニューよりチャンネルを選択
・エンターキーを押して実況データを取得
・スペースキーを押して再生を開始
作り方、内部処理とか
実況データ
実況データに関しては、有志でニコニコ実況の過去ログを取得できるAPIを運営している方がいらっしゃるので、そちらから取得しています。
取得したデータには色んな情報が含まれていますが(プレミアムユーザーか?など)、今回はコメント、投稿時間、コマンドを使用しています。
コメントの文字数と乱数によって流れる位置、速度を決定し、コマンドに応じてフォント、文字サイズ、位置、色などを変更しています。
GUI
GUIはQt Designer
で作成しました。
こちらもAnacondaでPython環境を構築した場合は最初からインストールされています。
Tkinter
やPySimpleGUI
などもいいですが、より直感的にレイアウトを構築できるので割とおすすめです。
今回Qt Designer
を採用した理由には、流れるコメントの実装に非常に軽量なグラフライブラリであるPyQtGraph
を使用したかったからというものあります。
PythonのグラフライブラリというとMatplotlib
などがありますが、今回のように画面更新を行う用途ではPyQtGraph
の方が圧倒的に高速に描画を行うことができます。
とはいえ文字を流すためのライブラリではないので、今回のケースではもっと適したライブラリが存在しそうな気もしますが(そのようなライブラリをご存知の方がいましたらコメントで教えていただけますと助かります)。
nasne連携
ウェブブラウザなどでnasneのIPにアクセスすると、nasneの各種設定を行うことができます、そこで行われている通信を見るとnasneとデータのやり取りを行うAPIが用意されていることが判ります。
そこで、少しググるとAPIの一覧がまとめられているサイトが幾つか存在しますので、目的に応じたAPIをPythonから叩いてあげるとnasneの状態を取得することができます。
具体的には、
http://{nasneのIPアドレス}:64210/status/dtcpipClientListGet
で現在接続しているtorne
などの情報、
http://{nasneのIPアドレス}:64220/recorded/titleListGet?searchCriteria=0&filter=0&startingIndex=0&requestedCount=0&sortCriteria=0&withDescriptionLong=0&withUserData=0&id={番組のID}
で指定した録画番組の情報
が得られます。
5秒毎に再生されている録画番組をnasneに問い合わせて、アプリケーションに反映しています。
参考
先人(チャンネルのリストを一部お借りしました。)
救世主(API有り難い…)
nasne APIいっぱい載ってる。有り難い…