Skip to content

Instantly share code, notes, and snippets.

@tondol
Last active June 9, 2018 02:50
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tondol/7039259 to your computer and use it in GitHub Desktop.
Save tondol/7039259 to your computer and use it in GitHub Desktop.
ニコニコ公式アニメポータルのrtmpeプロトコル動画をダウンロードする覚え書き

はじめに

http://www.nicovideo.jp/watch/1380872606

上記の動画を例にDL方法を解説する。

パラメータの取得

http://flapi.nicovideo.jp/api/getflv/1380872606

上記URLをログインした状態(Cookieが設定されている状態)でGETする。 クエリ文字列がレスポンスとして得られる。 これをkeyとvalueに分割してURLデコードすることで連想配列を得る。

今回の例では、 urlキーの値 rtmpe://smile-chefsf.nicovideo.jp/smile?m=mp4:21968710.95779 の内、 smile-chefsf.nicovideo.jpHOSTとして、 rtmpe://smile-chefsf.nicovideo.jp/smileTC_URLとして、 mp4:21968710.95779PLAYPATHとして使う。 また、fmstキーの値1382088230:272c4c4c0a951fd4c79a4b3c5e6a63a9ffcaffd3 の内、 コロンで区切られた左側部分 1382088230FMST_2として、 右側部分 272c4c4c0a951fd4c79a4b3c5e6a63a9ffcaffd3FMST_1として使う。

ダウンロード

必要なパラメータを変数に設定しておく。 PAGE_URLには対象動画の閲覧URLを与える。 SWF_URLFLASH_VERについては、rtmpsuckを使って調べた結果をそのまま使っている。 今後、指定すべき文字列が仕様変更で変わることもあるかもしれない。

$ HOST=smile-chefsf.nicovideo.jp
$ TC_URL=rtmpe://smile-chefsf.nicovideo.jp/smile
$ PAGE_URL=http://www.nicovideo.jp/watch/1380872606
$ SWF_URL=http://res.nimg.jp/swf/player/secure_nccreator.swf?t=201111091500
$ FLASH_VER="WIN 11,6,602,180"
$ PLAYPATH=mp4:21968710.95779
$ FMST_1=272c4c4c0a951fd4c79a4b3c5e6a63a9ffcaffd3
$ FMST_2=1382088230

以上のパラメータを与えてrtmpdumpを実行する。 今回使ったrtmpdumpはgit://git.ffmpeg.org/rtmpdumpのソースをコンパイルしたもので、 コンパイル時点でのHEADはコミット番号a9f353c7ccf29d6305e13fedb77653b8681e9fc2だった。

$ ./rtmpdump \
  -l 2 \
  -a smile \
  -n $HOST \
  -t $TC_URL \
  -p $PAGE_URL \
  -s $SWF_URL \
  -f "$FLASH_VER" \
  -y $PLAYPATH \
  -C S:$FMST_1 \
  -C S:$FMST_2 \
  -C S:$PLAYPATH \
  -o output.flv

うまくいけば、以下の様な出力を得る。 output.flvには途中までダウンロードした結果が保存されているはずだ。

RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
WARNING: You haven't specified a port (--port) or rtmp url (-r), using default port 1935
Connecting ...
INFO: Connected...
ERROR: HandleCtrl: Ignoring SWFVerification request, use --swfVfy!
Starting download at: 0.000 kB
INFO: Metadata:
INFO:   duration              1420.03
INFO:   moovPosition          28.00
INFO:   width                 640.00
INFO:   height                360.00
INFO:   videocodecid          avc1
INFO:   audiocodecid          mp4a
INFO:   avcprofile            77.00
INFO:   avclevel              31.00
INFO:   aacaot                2.00
INFO:   videoframerate        29.97
INFO:   audiosamplerate       48000.00
INFO:   audiochannels         2.00
INFO: tags:
INFO:   cprt-und              SMILEVIDEO_MP4
INFO: trackinfo:
INFO:   length                85201116.00
INFO:   timescale             60000.00
INFO:   language              und
INFO: sampledescription:
INFO:   sampletype            avc1
INFO:   length                68161536.00
INFO:   timescale             48000.00
INFO:   language              und
INFO: sampledescription:
INFO:   sampletype            mp4a
11399.523 kB / 117.22 sec (8.2%)
ERROR: RTMP_ReadPacket, failed to read RTMP packet header
12335.273 kB / 124.59 sec (8.7%)
Download may be incomplete (downloaded about 8.70%), try resuming

ダウンロードが不完全なので、 パラメータに -e を加えて何回かrtmpdumpを実行する。 パーセンテージが100%に到達すればダウンロード完了となる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment