放送大学のインターネット授業のストリーミング配信をダウンロードする(macOS)
rmtpdumpとffmpegをインストール
code:bash
$ brew install rtmpdump
$ brew install ffmpeg
ChromeのDevelopper toolsから必要な情報を確認
Developper toolsのNetworkタブを開きながら授業を再生したりして観察…。
動画Player : https://vod.ouj.ac.jp/classtream-player/v1.2/js/video-js/5.12.6/video-js.swf
ストリーミングのリクエストjsonhttps://vod.ouj.ac.jp/v1/tenants/1/vod-contents/{動画ID}/video-src?hls=false
このjsonからストリーミングURLを入手(videoSrc)
再生速度ごとに動画を用意するという愚かな実装なので通常速度からダウンロード。
何気に2倍速も用意できるっぽい。まだ見たことない。
code:json
{
"timestamp": タイムスタンプ,
"isWatermark": false,
"x1_0VideoSource": {
"videoSrc": "rtmpe://vod-st.ouj.ac.jp:80/classtream?authTicket={トークン}&mp4:1/{動画ID}.mp4",
"videoType": "rtmp/mp4",
"abrVideoType": "rtmp/mp4",
"duration": 2700
},
"x2_0VideoSource": {
"videoType": "rtmp/mp4",
"abrVideoType": "rtmp/mp4"
},
"x1_5VideoSource": {
"videoSrc": "rtmpe://vod-st.ouj.ac.jp:80/classtream?authTicket={トークン}&mp4:1/{動画ID}_1-5.mp4",
"videoType": "rtmp/mp4",
"abrVideoType": "rtmp/mp4",
"duration": 1936
},
"existsSamiFile": false,
"userId": "学籍番号"
}
rtmpdumpでダウンロード
rmtpdumpでオプションにストリーミングURL、動画プレイヤー、playpathを指定するとダウンロードできる
参考
code:bash
ffmpegで変換
rtmpdumpで落としたmp4はそのままだと開けないのでffmpegで変換する
code:bash
$ ffmpeg -i output_origin.mp4 output.mp4
ラジオ授業の場合、音声だけのほうが良いので音声のみを抽出する。
ffmpegでエンコードもできるが、今回は再エンコードなしで取り出す。
まずは動画に使われている音声のコーデックを調べる。
code:bash
$ ffmpeg -i output.mp4
Input #0, flv, from 'a.mp4': Metadata:
moovPosition : 31586284
aacaot : 2
audiochannels : 2
cprt : 放送大学
©too : TMPGEnc Video Mastering Works 5 Version. 5.2.2.65
©nam : 発達心理学概論('17)_第1回
length : 119070720
timescale : 44100
sampletype : mp4a
Duration: 00:45:00.02, start: 0.000000, bitrate: 99 kb/s
Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp At least one output file must be specified
aacコーデックが使われているのでmp4aで出力。
code:bash
$ ffmpeg -i output.mp4 -acodec copy audio_output.m4a
今後やること
自動収集
負荷がかからないように。欲しい科目名を入力して授業を一括で取得するくらい?
トークンはリクエストごとに発行されるっぽいけどヘッドレスChromeでログインすれば関係なさそう
rmtpdump~ffmpegあたりをシェルスクリプトにして簡略化
文字起こし
Google Cloud Speech APIに投げて文字起こし
無料枠60分/月。以降は15秒ごとに課金。(1授業45分で1.08ドル。安い)
句読点などはつかない。
形態素解析で整形?
rtmpdump~ffmpegを一本化
code:bash
mp4はpipeできないはずだが、Input #0, flv, from 'pipe:0':とあるのでflvでinputしてる?
-c copy追記