msdd’s blog

deep learning勉強中。プログラム関連のこと書きます。

ライブ動画をダウンロードできるコマンド

はじめに

YoutubeやTwitchのライブ動画をダウンロードしたくなり、探して livestreamerというものを見つけた。しかし、 リポジトリ見ると、

Command-line utility that extracts streams from various services and pipes them into a video player of choice. No longer maintained, use streamlink or youtube-dl instead.

とあり、開発終了して、メンテナンスしていないとある。その代わりにstreamlinkyoutube-dlを使うようにとあった。 そこで、streamlinkを使って、ライブ動画をダウンロード出来ないかと思い、調べてみた。

f:id:msdd:20200502091351p:plain:w100

streamlinkとは

streamlinkは、コマンドラインツールで、livestreamのフォークプロジェクト。 Youtube LiveやTwitchなどのストリーム動画を動画プレイヤーで再生したり、ダウンロードしたりすることができるコマンドラインツール。

サイト  url
github https://github.com/streamlink/streamlink
ドキュメント https://streamlink.github.io/
サポートされているサイト一覧 http://docs.livestreamer.io/plugin_matrix.html#plugin-matrix

使い方

サポートされているサービスは、

  • Twitch.tv
  • YouTube.com
  • Livestream.com
  • Dailymotion.com

などが上げられている。 サポートされているサイトはここに一覧がまとめられている。

f:id:msdd:20200502091338p:plain

仮想環境作る

streamlinkをインストールする方法はいくつかあるが、 今回はanacondaで仮想環境作ってインストールした。

まず、streamlinkという名前の仮想環境を作った。

conda create -n streamlink python=3.8

仮想環境を起動。

conda activate streamlink

インストール

次に、streamlinkをインストールする。 色々なインストール方法があるが1、 今回は、pipを使う方法でインストールした。

pip install streamlink

インストールすると、コマンドstreamlinkが使えるようになっている。 バージョンを確認してみると、streamlink 1.4.1であった。

streamlink --version

streamlinkコマンドを使う

使い方は、streamlink URLで解像度を調べて、streamlink URL 解像度で動画プレイヤーが起動される。ファイルを保存する時は、streamlink URL 解像度 -o ファイル名でファイルに保存される。

streamlink URLでurlを指定することで、解像度などを取得する。

streamlink https://www.youtube.com/watch?v=coYw-eVU0Ks

結果は、下のようなものを得られて、144pから1080pまであるのがわかる。 144pと1080pはそれぞれ、最低画質と最高画質で、worstbestとついている。

[cli][info] Found matching plugin youtube for URL https://www.youtube.com/watch?v=K7r2cBYeWn8
Available streams: 144p (worst), 240p, 360p, 480p, 720p, 1080p (best)

1. 動画プレイヤーで再生

streamlink URL 画質で、実行する。画質は上で調べたものを指定する。これはbestworstとすることでも、それぞれ最低画質、最高画質を指定できる。1080pと指定した。

streamlink https://www.youtube.com/watch?v=K7r2cBYeWn8 1080p

最高画質なので、1080pの代わりに、bestでも大丈夫。

streamlink https://www.youtube.com/watch?v=K7r2cBYeWn8 best

実行すると、下のような情報が表示され、ビデオプレイヤーのVLCが起動して、ライブが映し出された。 (すでにVLCプレイヤーはダウンロードしていた。)

[cli][info] Found matching plugin youtube for URL https://www.youtube.com/watch?v=K7r2cBYeWn8
[cli][info] Available streams: 144p (worst), 240p, 360p, 480p, 720p, 1080p (best)
[cli][info] Opening stream: 1080p (hls)
[cli][info] Starting player: "C:\Program Files\VideoLAN\VLC\vlc.exe"

f:id:msdd:20200502091908p:plain
VLC画面

2. ファイルに保存

ファイルに保存するには、-o ファイル名として保存する。

streamlink https://www.youtube.com/watch?v=K7r2cBYeWn8 best -o file.ts

止めるときは、ctr+cを押したら止まった。ファイルがすでに存在する時は、 File file.ts already exists! Overwrite it? [y/N]と出てくるので、 yを入力して上書きする。

保存する時間を指定するには、--hds-durationというオプションを使って、 指定する。[HH:]MM:SSの形式。しかし、実行してみると、 指定した時間とずれたりすることもある。

下のものは、20秒間ファイルに保存するサンプル。20秒間の動画をfile20s.tsというファイル名で保存している。

streamlink https://www.youtube.com/watch?v=K7r2cBYeWn8 best -o file20s.ts --hls-duration 00:00:20

動画ファイルで.tsのファイルは知らなかったので、調べてみると、 トランスポートストリーム形式のデータらしい2。 そのままでは、再生できなかったので、mp4のファイルに変換した。 変換は、オンラインの変換サービスや、ローカルで変換したいときは、ffmpegなどを使って出来る。

オンライン変換サービスを使う時

Convertioというオンラインサービスを使い.tsから.mp4のファイルへ変換も出来る。

変換前のファイルをサイトにアップロードして、変換を押すことで、mp4へと変換してくれる。 変換後に、ダウンロードボタンを押して、ダウンロード出来る。

ffmpegを使う時

ffmpegのインストール

conda install -c menpo ffmpeg

ffmpegを使ってtsファイルをmp4ファイルへ変換。-i 入力ファイルで変換元のファイルを指定して、出力ファイルも指定して実行することで変換が開始される。 下は、入力ファイルがfile.txで出力ファイルがoutput.mp4である。

ffmpeg -i file.ts output.mp4

実行すると、出力ファイルoutput.mp4が生成された。開いて見ることも出来た。

まとめ

Youtube Liveなどのライブ動画をダウンロードできるstreamlinkを用いて、 ライブ動画をダウンロードする方法を調べた。 .tsという形式で保存出来る。しかし、よく使うmp4などの形式に変換する必要 があった。