Web上のLiveStreamingを後で見たい,デモなどで使うのでVODをofflineで見たい.回線が低速で低画質しか見られない.回線の質が悪くよく止まる. とかとかのときに助かるツールとか.
大体youtube-dlかそれでサポートされていない場合はStreamlinkでという感じで使っている。
自分は自宅回線では画質悪くよく止まるのでこれらを使って一手間かけて動画視聴しているが、視聴管理などもされず面倒なので通常はあまり必要ないと思う……。
ウェブブラウザ拡張機能(Firefox, Chrome)として提供されている.お手軽.
$ ffprobe -i 放課後ていぼう日誌\ アニメ\ 無料動画GYAO\!.mp4 2>&1 |grep -i stream Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 854x480 [SAR 1:1 DAR 427:240], 1495 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc (default)
Video DownloadHelper で動画を確認して解像度の書かれていない動画が音声のみのデータなのでそれもダウンロードする.
$ ffprobe -i 放課後ていぼう日誌\ アニメ\ 無料動画GYAO\!-1.mp4 2>&1 |grep -i stream Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
結合する.
$ ffmpeg -i 放課後ていぼう日誌\ アニメ\ 無料動画GYAO\!.mp4 -i 放課後ていぼう日誌\ アニメ\ 無料動画GYAO\!-1.mp4 -c:v copy -c:a copy 放課後ていぼう日誌.mp4
Youtube以外にも様々なsiteに対応している. 詳細は別ページに
ダウンロードにはログインが必要
-u USERNAME, --username=USERNAME account username -p PASSWORD, --password=PASSWORD account password
netrc も使える
-n, --netrc use .netrc authentication data
netrcのmachineは nicovideo
$ echo "machine nicovideo login $USER password $PASSWORD" >> ~/.netrc
ダウンロードファイル名はID担って分かりづらいので -t
オプションでタイトルをファイル名にする.
-t, --title use title in file name
$ nicovideo-dl -n -t $URL
認証に使ったアカウントが無料アカウントだと時間帯により制限を受けるので制限を受けない時間に動くようにしておくといい.
(youtube-dlもニコニコ動画に対応しているのでそっちのほうが便利かも)
動画URLがわかっているならffmpegでもダウンロードできる.回線が細いときにリモートのサーバで高画質ダウンロードするなどできる. (Video DownloadHelperでcopy urlしたものも使える)
$ ffmpeg -i $URL -movflags faststart -c copy $TITLE.mp4
もう開発されていない.Streamlinkというフォークがある.
ライブ外リーミングを視聴するのに特化したコマンドラインツール.
対応site
URLとstreamを指定する.streamは一度なしで実行すると取得できる,以下の例では 144p, 240p, 360p, 480p, 720p
が選べる.若しくは worst or best
この2つはいつでも指定できる.
$ streamlink 'https://www.youtube.com/watch?v=kL090M6qtXQ' [cli][info] Found matching plugin youtube for URL https://www.youtube.com/watch?v=kL090M6qtXQ Available streams: 144p (worst), 240p, 360p, 480p, 720p (best)
480pで再生
$ streamlink 'https://www.youtube.com/watch?v=kL090M6qtXQ' 480p
360pの解像度をmpvを使いフルスクリーンで開く例
$ streamlink -p "mpv --fs" 'https://www.youtube.com/watch?v=kL090M6qtXQ' 360p
360pの解像度をvlcを使い壁紙として開く例
$ streamlink -p "vlc --video-wallpaper" 'https://www.youtube.com/watch?v=kL090M6qtXQ' 360p
-o
オプションでファイルへの書き出しが可能
$ streamlink 'https://www.youtube.com/watch?v=kL090M6qtXQ' 360p -o ISS.mp4
-r
オプションでファイルへの書き出ししつつストリーミング再生が可能
$ streamlink 'https://www.youtube.com/watch?v=kL090M6qtXQ' 360p -r ISS.mp4
--hls-live-restart
でYoutubeLiveを最初から再生する.プレイヤーで速度を早くして追っかけ再生も.
$ streamlink --hls-live-restart https://www.youtube.com/watch?v=brrm328XItM 360p --player="mpv --speed=1.5"
※abema.tvをPCのウェブブラウザで見るとしょっちゅう解像度変更→映像と音が途切れて辛い→ウェブブラウザからは解像度指定できない(◞‸◟)
Streamlinkで解像度を下げて再生すると止まらず快適.とか.(Androidアプリ版にはいくつかの解像度の選択が可能)
※EDの途中で勝手に次話に強制スキップされるの対策にもいい.
abema.tv は動画のURLが連番なのでこんな感じでシリーズ動画を順に再生できる.
$ EP=1; while :;do if ! streamlink https://abema.tv/video/episode/25-59_s1_p$EP 240p;then break;fi ;EP=$(( $EP + 1 ));done
Twitter spacesからダウンロード
$ bin/twspace_dl -h usage: twspace_dl [-h] [-v] [-s] [-k] [-l] [--input-cookie-file COOKIE_FILE] [--username USERNAME] [--password PASSWORD] [--output-cookie-file OUTPUT_COOKIE_FILE] [-i SPACE_URL | -U USER_URL] [-d DYN_URL] [-f URL] [-M PATH] [-o FORMAT_STR] [-m] [-p] [-u] [--write-url URL_OUTPUT] Script designed to help download twitter spaces optional arguments: -h, --help show this help message and exit -v, --verbose -s, --skip-download -k, --keep-files -l, --log create logfile --input-cookie-file COOKIE_FILE input: -i SPACE_URL, --input-url SPACE_URL -U USER_URL, --user-url USER_URL -d DYN_URL, --from-dynamic-url DYN_URL use the dynamic url for the processes(useful for ended spaces) example: https://prod-fastly-ap-northeast-1.video.pscp.tv/Transcoding/v1/hls/zUUpEgiM0M18jCGxo2eSZs99p49hfyFQr1l4cdze- Sp4T-DQOMMoZpkbdyetgfwscfvvUkAdeF-I5hPI4bGoYg/non_transcode/ap-northeast-1/periscope-replay-direct-prod-ap-northeast-1-public/audio-space/dynamic_playlist.m3u8?type=live -f URL, --from-master-url URL use the master url for the processes(useful for ended spaces) example: https://prod-fastly-ap- northeast-1.video.pscp.tv/Transcoding/v1/hls/YRSsw6_P5xUZHMualK5-ihvePR6o4QmoZVOBGicKvmkL_KB9IQYtxVqm3P_vpZ2HnFkoRfar4_uJOjqC8OCo5A/non_transcode/ap-northeast-1/periscope-replay-direct-prod-ap- northeast-1-public/audio-space/master_playlist.m3u8 -M PATH, --input-metadata PATH use a metadata json file instead of input url (useful for very old ended spaces) output: -o FORMAT_STR, --output FORMAT_STR -m, --write-metadata write the full metadata json to a file -p, --write-playlist write the m3u8 used to download the stream(e.g. if you want to use another downloader) -u, --url display the master url --write-url URL_OUTPUT write master url to file login: --username USERNAME --password PASSWORD --output-cookie-file OUTPUT_COOKIE_FILE
$ bin/twspace_dl -i https://twitter.com/i/spaces/1ypKdEXLdLqGW 2022-03-16 15:42:16,496 [INFO] ./tmp6swcs0w5/(辻 伸弘 (nobuhiro tsuji))ゆくアレ、くるアレ #セキュリティのアレ-1ypKdEXLdLqGW.m3u8 written to disk [hls @ 0x55f2ea4a9800] Changing ID3 metadata in HLS audio elementary stream is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented. size= 51141kB time=01:13:21.68 bitrate= 95.2kbits/s speed=10.6x 2022-03-16 15:49:14,334 [INFO] Finished downloading $ ffprobe -i ./\(辻\ 伸弘\ \(nobuhiro\ tsuji\)\)ゆくアレ、くるアレ\ #セキュリティのアレ-1ypKdEXLdLqGW.m4a ffprobe version 4.4.1-3+b2 Copyright (c) 2007-2021 the FFmpeg developers built with gcc 11 (Debian 11.2.0-18) configuration: --prefix=/usr --extra-version=3+b2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared libavutil 56. 70.100 / 56. 70.100 libavcodec 58.134.100 / 58.134.100 libavformat 58. 76.100 / 58. 76.100 libavdevice 58. 13.100 / 58. 13.100 libavfilter 7.110.100 / 7.110.100 libswscale 5. 9.100 / 5. 9.100 libswresample 3. 9.100 / 3. 9.100 libpostproc 55. 9.100 / 55. 9.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './(辻 伸弘 (nobuhiro tsuji))ゆくアレ、くるアレ #セキュリティのアレ-1ypKdEXLdLqGW.m4a': Metadata: major_brand : M4A minor_version : 512 compatible_brands: M4A isomiso2 title : ゆくアレ、くるアレ #セキュリティのアレ artist : 辻 伸弘 (nobuhiro tsuji) encoder : Lavf58.76.100 episode_id : 1ypKdEXLdLqGW Duration: 01:13:21.71, start: 0.000000, bitrate: 95 kb/s Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 93 kb/s (default) Metadata: handler_name : SoundHandler vendor_id : [0][0][0][0]
順番にダウンロードした(順番に作成された)ならls -1tr
で済むことも多い.
%02dみたいな一番助かるパターン
$ ls -1 未確認で進行形 #*.mp4| sort -n | tee 未確認で進行形.m3u8 未確認で進行形 #01 何事も最初が肝心です.mp4 未確認で進行形 #02 ロリ小姑ってのも悪くないわ.mp4 未確認で進行形 #03 ラブコメの波動を感じる.mp4 未確認で進行形 #04 あれはただのへんたいです.mp4 未確認で進行形 #05 これが経産婦だと.mp4 未確認で進行形 #06 そうだ、小姑でうめよう.mp4 未確認で進行形 #07 それはそれ、これはこれ.mp4 未確認で進行形 #08 妹の悲しみをいやすのは、妹.mp4 未確認で進行形 #09 くつじょくです、はずかしめをうけました.mp4 未確認で進行形 #10 デレ期という単語を調べたら.mp4 未確認で進行形 #11 ハンカチを楽しんでるのよ.mp4 未確認で進行形 #12 わかってる? ……わかってる.mp4
%dみたいな桁上がりだと単純にsortすると10話が先頭に来るので sort -V
で並べる.
$ ls -1 メイドインアビス 第*.mp4 | sort -V | tee メイドインアビス.m3u8 メイドインアビス 第1話 大穴の街.mp4 メイドインアビス 第2話 復活祭.mp4 メイドインアビス 第3話 出発.mp4 メイドインアビス 第4話 アビスの淵.mp4 メイドインアビス 第5話 火葬砲.mp4 メイドインアビス 第6話 監視基地(シーカーキャンプ).mp4 メイドインアビス 第7話 不動卿.mp4 メイドインアビス 第8話 生存訓練.mp4 メイドインアビス 第9話 大断層.mp4 メイドインアビス 第10話 毒と呪い.mp4 メイドインアビス 第11話 ナナチ.mp4 メイドインアビス 第12話 呪いの正体.mp4 メイドインアビス 第13話 挑む者たち.mp4
動画のダウンロードと視聴は私的複製の範囲なら問題ないと思うが,サービスの規約には違反してしまいそう.
例えばYoutubeはこの辺?
本サービスの利用には制限があり、以下の行為が禁止されています。 本サービスまたはコンテンツのいずれかの部分に対しても、アクセス、複製、ダウンロード、配信、送信、放送、展示、販売、ライセンス供与、改変、修正、またはその他の方法での使用を行うこと。ただし、(a)本サービスによって明示的に承認されている場合、または(b)YouTube および(適用される場合)各権利所持者が事前に書面で許可している場合を除きます。 本サービスのいずれかの部分を迂回、無効化、不正利用、またはその他の方法で妨害すること(またはこれらのいずれかを試みること)。なお、この「本サービスのいずれかの部分」には、セキュリティ関連の機能、または(a)コンテンツのコピーもしくはその他の利用法を防止もしくは制限する機能、もしくは(b)本サービスもしくはコンテンツの利用を制限する機能が含まれます。 自動化された手段(ロボット、ボットネット、スクレーパなど)を使用して本サービスにアクセスすること。ただし、(a)公開されている検索エンジンを YouTube の robots.txt ファイルに従って使用する場合、または(b)YouTube が事前に書面で許可している場合を除きます。
その他CMの挟まるサービスやコンテンツでもそれが再生されないという問題もある.
鹿児島Linux勉強会 2020.01での発表スライド
コメント