VODダウンロード


 某動画サイトではこれまでrtmp形式が使われていたが、2015/1以降に追加された動画はHLS形式に変わっているもよう。(私の見ているチャンネルでは。以下同様)
 両者は同じようなデザインだが、再生ページを開いたときに再生ボタンが出てすぐには再生されない、30秒戻すボタンがある、動画サイズが多少異なる、視聴出来ない場合はこちらのリンクがあるといった見た目の差異がある。(ライブ配信はrtmpのまま)

rtmp (Real Time Messaging Protocol)
1280x720x30fps1.8Mbps+AAC48KHz128kbpsのflv。
 rtmpはフラッシュのプレイヤーがrtmpポート(1935)を使って独自に通信を行っている。

 rtmpdumphelper + rtmpsuckを使う。helperを起動してブラウザで再生すると勝手にmp4ファイルとして落としてくれる。suckがプロキシとして働いてブラウザからのrtmpリクエストを中継しながらストリームを採取する。helperはブラウザからのrtmpリクエストをsuckに送るように仕向けている。再生時間よりも早く完了する。しかし1GB(1時間)位でエラーになる。

 command.txtを吐き出す機能が付加されたrtmpdumpの派生物を使って同様のことを行うと、rtmpsuck実行時にrtmpdumpのコマンドラインがcommand.txtに出力される。rtmpdumphelperでダウンロード開始してcommand.txtができたところでキャンセルし、command.txtの最終行(最新)の内容をコピーしてコマンドプロンプトで実行するとダウンロードが始まる。この方法だと経過が%表示される上に大きいサイズでもダウンロードできる。しかし4GB(4.5時間)位でエラーになる。


HLS (HTTP Live Streaming)
960x540x29.97fps2.0Mbps+AAC24KHz48kbpsのTS。
 HLSではm3u8プレイリストに10秒ごとのTSファイル名が書いてあり、必要なたびに必要なものをダウンロードして再生している。

 ffmpegを使う。google chromeかfirefoxでデベロッパーツール(web開発)- ネットワークを出して再生ページを開き、〜.m3u8のURLを得る。
 それをffmpeg -c copy movie.ts -i URL でtsファイルにする。ffmpegはリストを得てTSを順に落としながら1ファイルにしてくれる。再生系によるのかもしれないが、音声が750msくらいずれてる。
 ffmpeg -vcodec copy -acodec copy -bsf:a aac_adtstoasc movie.mp4 -i URL でmp4ファイルにすることも可。これだと音ずれしない。

 2016/4からはキーファイルを落とすときにユーザ認証が必要となった。cookieを指定すればいいと思うのだがどうもうまくいかない。m3u8とキーファイルを落としてm3u8を書き換える。URI=をキーファイル名に変更し、各.tsにURLのフルパスを追加し、ffmpeg -iで編集したm3u8ファイルを指定する。
 →いつの間にか元に戻った。

 2016/10からサイトが変わったがやることは変わっていない。
 2018/10からサイトが変わったがやることは変わらない。


WEBM
詳細は知らない。
 FirefoxのDownloadHelperとffmpegを使う。DownloadHelperのコンパニオンアプリも必要。DownloadHelperの設定―動作の一時ファイルを保存するチェックを入れて保存しておく。

 該当ページで動画再生するとアイコンが反応するので必要な解像度を選ぶ(再生しているサイズによるのでシアターモードでウインドウサイズを変更するなりフルスクリーンにするなりで必要なものを出す)。
 ダウンロード後に変換が始まるので中断で終わらせる。
 WindowsのTempフォルダを見るとサイズの大きな〜.tmp2ファイルがあるので、これをffmpegでmuxする。
ffmpeg -i 〜.tmp -i 〜2.tmp -c:v copy -c:a copy out.webm

 2023/6辺りから上記ではうまくいかなくなった。yt-dlp.exeを使う。
yt-dlp -f b URL

あるいは
yt-dlp --list-formats URL
で一覧を確認し、必要なIDを指定する。
yt-dlp -f ID URL

あるいは
yt-dlp -f "bv+ba" URL