LoginSignup
30

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-11

こんにちは

@albno273 です。
この記事は2016年9月と12月に投稿した自分のブログのエントリその続きの加筆修正版です。


きっかけ

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. うまくいけば出来上がり

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


やり方はわかったので自動化した

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

#!/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 の使い方とか全くスマートじゃないので気が向いたら修正します(雑魚)。

ちなみにやってることはこのサイトの内容をまるっきりなぞってるだけです。

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

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


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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30