by Stardust Reverie
Version 1 (March 8, 2025)
Download (10 downloads)
# 概要
ニコニコ動画をコメント付きでキャッシュする
# 要件
ffmpeg
termux
termux:tasker
git
python
nndownload
nicojson2xml
nicodanmaku2ass
ニコニコのcookie
termuxはcd, nano, lsといった基本コマンドを覚えている前提です。
# 起動準備
1. ffmpegをダウンロード、解凍しffmpeg.exeをDownload直下に配置
自分は以下からffmpeg-release-essentials.7zを使用した
https://www.gyan.dev/ffmpeg/builds/
2. termux, termux:taskerアプリをインストール
3. termuxでtermux-setup-storageを実行し、termuxにストレージアクセス許可を与える
4. termuxでgit, python( nndownloadが対応しているversion )をインストール
5. termuxのpythonのpipでnndownloadをインストール
(gevent云々と出た場合はpkg i binutilsを実行)
6. termuxでDownloadフォルダに移動し、gitを使用してnicojson2xmlとnicodanmaku2assをクローン
7. ニコニコのcookieを入手し、termuxで~( $home直下 )にnicocookie.txtという名前で配置( cookieはブラウザの開発者ツール→Application→Cookies→nicovideo.jpにuser_sessionという名前であるはず、これの値のみを記入したtxtをnicocookie.txtとして配置 )
8. 以下のコードを~/.termux/tasker/にnVWithComment.shという名前でコピペして保存
filename=$(nndownload -c -l --session-cookie "${1:-/data/data/com.termux/files/home/nicocookie.txt}" "$2" | tee nnlog.txt | grep -Po -m 1 '(?〈=\").*(?=\.(mp4|mkv)\")')
python /storage/emulated/0/Download/nicojson2xml/nicojson2xml.py "${filename}.comments.json"
python /storage/emulated/0/Download/nicodanmaku2ass/danmaku2ass.py -o "${filename}.ass" -a 0.8 "${filename}.comments.xml"
※※注意※※
grepの小なり以降が正しく表示されなかったため、小なりを大文字表記にしている
コピペ時は小なりを小文字に戻すこと
# 使い方
## シングル
起動して出てくるダイアログに、キャッシュしたい動画のurlを貼る。okを押すとキャッシュが始まる。
デフォルト値はクリップボードの内容。クリップボードはここ以外で使用していない。
## マルチ
起動時のダイアログをキャンセルすると、マルチモードを起動するか聞いてくる。
okを押すと、改行区切りで動画urlが書かれたtxtを選択する画面に移る。選択するとキャッシュが始まる。
txtは事前に用意しておくこと。以下の記事のようなブックマークレットを使用して用意してもよい。
https://e-tum.hatenablog.com/entry/2024/01/07/005520
キャッシュが終わると、通知に標準出力と標準エラー出力を送る。
Successで始まり、コンマと改行で終わっていれば正常の証。
Download以下に動画ファイルmp4と変換されたコメントファイルassができている。(及び、変換途中で出来たjsonとxml)
処理するurlがなくなるとfinishの通知が来る。
mp4を字幕を表示できる動画再生アプリ(vlc, mxplayer等)で再生すると、動画の上に字幕としてコメントが付いて再生できる。
キャッシュを削除する場合は、ファイラーから同名のmp4, json, xml, assをまとめて削除する。
# 技術メモ
クリップボード、またはファイルから取得したリンクをforで回す
リンクからnndownloadで動画、jsonコメントを取得
jsonコメントをnicojson2xmlでxml化
xmlをnicodanmaku2assでass化
これで動画とassが揃うので、字幕対応の再生アプリ(vlc等)で再生すれば動く
nndownloadはffmpegに依存しているので、パス代わりに直下にffmpeg.exeを配置
個々のライブラリを呼ぶのにtermux:taskerを使用
面倒なので絶対パスでライブラリを呼んでいる
コメントが多い場合によく引っかかるが、端末スペックなのか変換が悪いのか区別がつかない
あまり困ってないのでそのままにしている
→vlc固有っぽい?
→mpvktなら正常
複数dlの場合、通知を5分ぐらい表示することでsleep代わりにしてAPIへの負荷を抑えている
試しに1分にしていたらnndownloadがerror.jsonという名前の何も書かれていないコメントファイルを取るようになったため、思い切って5分取っている