Mac でニコ生TSを録画したかったので (加筆修正版)

# こんにちは
@albno273 です。
この記事は2016年9月と12月に投稿した[自分のブログのエントリ](http://albno273.hatenablog.com/entry/2016/09/21/%E5%82%99%E5%BF%98%E9%8C%B2%3A_Mac_%E3%81%A7%E3%83%8B%E3%82%B3%E7%94%9FTS%E3%82%92%E9%8C%B2%E7%94%BB%E3%81%97%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F)と[その続き](http://albno273.hatenablog.com/entry/2016/12/05/%E3%83%8B%E3%82%B3%E7%94%9FTS%E3%82%92%E8%90%BD%E3%81%A8%E3%81%99%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E6%9B%B8%E3%81%84%E3%81%9F)の加筆修正版です。

---

# きっかけ
Windows を使っていたあの頃は kakoroku なる神器があって URL を入力するだけで動画が得られたのに Mac 環境の場合のまとめが少なすぎる
↓
こんなのがあった
↓
http://nico-lab.net/nicolive_rtmpdump_commands/
ので自分用に抜粋してメモ

# やりかた
1. ``brew install rtmpdump``
2. とりあえずブラウザで一回該当TSを視聴する
3. ``http://watch.live.nicovideo.jp/api/getplayerstatus/lv[IDに置き換えてね！]`` にアクセス
4. stream -> quesheet -> que のところにある① ``/content ... .f4v`` と、
rtmp -> url のところにある② ``rtmp:// ...``と、
rtmp -> ticket のところにある③謎の文字列を覚えておく
5. とりあえずTSを視聴していたブラウザを閉じる
6. ``rtmpdump -r ② -y mp4:① -C S:③ -e -o [出力ファイル名].flv``
7. うまくいけば出来上がり

公式もチャンネルもこれでいけるっぽい。ユーザー生放送は録画する機会がないから…うん…
用法・用量を守って正しくお使いください。

---

# やり方はわかったので自動化した
いちいちブラウザでアクセスしたりターミナルに打ち込んだりするのめんどいので一連の流れをスクリプトとして書きました。

```bash
#!/bin/bash
EMAIL="めあど"
PASSWORD="ぱすわーど"
echo "|========================================|"
echo "|                                        |"
echo "|   NicoNama TimeShift Download Script   |"
echo "|                                        |"
echo "|----------------------------------------|"
echo "|     Made by ALBNo273 / Version 0.3     |"
echo "|========================================|"
curl http://live.nicovideo.jp/api/getservertime | sed -e 's/servertime=//' > ntsdls/tmp.tstmp
curl -A 'nicoliveenc/2.0.7' -d mail=$EMAIL -d password=$PASSWORD -d site=nicolive_encoder -d time=$(printf '%s' $(cat ntsdls/tmp.tstmp)) https://account.nicovideo.jp/api/v1/login > ntsdls/login.xml
echo "cat /nicovideo_user_response/ticket" | xmllint --shell ntsdls/login.xml | sed -e '1d' -e '3d' -e 's/\<[^\>]*\>//g' > ntsdls/tmp.tstmp
printf "What the number of Niconama TS do you want? >> lv"
read LVNUM
curl -v -d mail=$EMAIL -d password=$PASSWORD https://account.nicovideo.jp/api/v1/login -c ntsdls/nico.cookie
URLSTR="http://live.nicovideo.jp/api/getplayerstatus/lv"
curl $URLSTR$LVNUM -b ntsdls/nico.cookie > ntsdls/lvstatus.xml
echo "cat /getplayerstatus/stream/quesheet/que" | xmllint --shell ntsdls/lvstatus.xml | sed -e 's/\<[^\>]*\>//g' | sed -ne '/content/p' | sed -e 's/^.* //g' > ntsdls/que.tstmp
echo "cat /getplayerstatus/rtmp/url" | xmllint --shell ntsdls/lvstatus.xml | sed -e 's/\<[^\>]*\>//g' | sed -n '2p' > ntsdls/rtmp.tstmp
echo "cat /getplayerstatus/rtmp/ticket" | xmllint --shell ntsdls/lvstatus.xml | sed -e 's/\<[^\>]*\>//g' | sed -n '2p' > ntsdls/ticket.tstmp
printf "What the name of output FLV file? >> "
read OUTPUTFILE
COUNT=1
cat ntsdls/que.tstmp | while read line
do
  rtmpdump -r $(printf '%s' $(cat ntsdls/rtmp.tstmp)) -y mp4:$(printf '%s' ${line}) -C S:$(printf '%s' $(cat ntsdls/ticket.tstmp)) -e -o $OUTPUTFILE-$((COUNT++)).flv
done
```

メアドとパスワードを書いて保存して起動して生放送のIDを入力するだけで FLV ファイルが手に入ります。
いちいち出力を保存してるのは内容をチェックしながらやってたからです(雑魚)。
xmllint の使い方とか全くスマートじゃないので気が向いたら修正します(雑魚)。

ちなみにやってることは[このサイト](http://nico-lab.net/nicolive_rtmpdump_commands/)の内容をまるっきりなぞってるだけです。

Twitter のフォロワーさんが Fork して Windows バッチファイルに書き換えてくださってました。
https://gist.github.com/dolciss/fba2ba18247de5cd48d1d25974efc75c

「お前ここ直せよ」とか教えてもらえるとうれしいです。

---


最近気づいたんですがストリームが複数に分かれてるとうまくDLできないことがわかったので近々修正したいと思います。

<b>2017-07-31 追記: 修正しました。</b>