2022年4月にTVerのサイトリニューアルに伴い、youtube-dl派生ダウンローダ、yt-dlpによるダウンロードが異常終了するようになりました。直後からGitHubページでは新TVer対応が早くも始まっていたので、Pythonで組まれているソースをダウンロードして試してみました。
TVerリニューアル
2022年4月1日よりTVerサイトデザインが大幅に変わりました。これまでジャンルごとにカテゴリページが設けられていましたが、
図1.これまでのTVer(アーカイブより)
変更後は検索ページからジャンルをフィルタリングする仕様のようです。
図2.新しいTVerの検索ページ
さらに各動画の放送日が併記されなくなった他、閲覧用のURLフォーマットが変わってしまいました。
|
旧)https://tver.jp/corner/######## 新)https://tver.jp/episodes/########## |
以前、こちらの記事で紹介したyt-dlpも、TVerが新デザインになってからはこのURLフォーマットが未対応で、エラー終了します。
|
$ yt-dlp https://tver.jp/episodes/########## [generic] ##########: Requesting header WARNING: [generic] Falling back on generic information extractor. [generic] ##########: Downloading webpage [generic] ##########: Extracting information ERROR: Unsupported URL: https://tver.jp/episodes/########## |
GitHubでは初日から改修の動き
TVerリニューアル初日から、yt-dlpのGitHubページでは早くもスレッドが立ち、改修へ向けて動き始めていて、どうやら動画ダウンロードは出来ていそうな進捗です。
Git Clone版をローカルに展開
改修対象は
yt-dlp/extractor/tver.py と言うスクリプト1つで済みそうなので、次回のバイナリリリースを前に、
git clone でローカルブランチを作成して改修してみます(以降Ubuntu 18.04を例に進めます)。
|
$ git clone https://github.com/yt-dlp/yt-dlp.git Cloning into 'yt-dlp'... remote: Enumerating objects: 106121, done. remote: Counting objects: 100% (152/152), done. remote: Compressing objects: 100% (75/75), done. remote: Total 106121 (delta 88), reused 122 (delta 77), pack-reused 105969 Receiving objects: 100% (106121/106121), 32.73 MiB | 16.58 MiB/s, done. Resolving deltas: 100% (82328/82328), done. |
作成された
yt−dlp ディレクトリの中にある
yt-dlp.sh が呼び出し用のスクリプトです。
|
$ cd yt-dlp/ $ ls CONTRIBUTING.md Collaborators.md Makefile pyinst.py setup.cfg test yt-dlp.sh CONTRIBUTORS LICENSE README.md pytest.ini setup.py tox.ini yt_dlp Changelog.md MANIFEST.in devscripts requirements.txt supportedsites.md yt-dlp.cmd ytdlp_plugins $ ./yt-dlp.sh --version 2022.03.08.1 |
yt-dlp/extractor/tver.pyを改修
今回改修する
tver.py は、個別サイト向けの振る舞いを定めたスクリプトを数多く収めた、
yt-dlp/extractor/ 内に格納されています。
|
$ tree yt-dlp yt-dlp ←ローカルブランチルート ├── yt-dlp.cmd ├── yt-dlp.sh ←呼び出し用スクリプト ├── yt_dlp │ ├── extractor │ │ ├── tver.py ←TVer用スクリプト |
メンテナーさまによる改修内容な次の通りで、かなりごっそりと変貌していました。
改修を終えたこちらの暫定確定版をコピー&ペーストでローカルの同スクリプトへ上書きしてしまうのが確実です。
番組名が抜けてしまう
早速動画をダウンロードしてみると、動画ファイルから番組名が抜けてしまい、サブタイトルしか有りません。TVerから得られる動画のJSONメタデータを確認してみると、例えばこのようになっていてこれは仕様なのでしょう。
|
https://statics.tver.jp/content/episode/epsinb038l.json |
図3.TVer動画のJSONメタ情報
そこで
tver.py の下端にある、
def _real_extract(self, url): の戻り値で
title を渡すのを止めると、番組名も含めたファイル名になりました(元々、改修前のオリジナル版も
title は渡していません)。
|
return { '_type': 'url_transparent', # 'title': str_or_none(video_info.get('title')), 'description': str_or_none(video_info.get('description')), 'url': smuggle_url( self.BRIGHTCOVE_URL_TEMPLATE % (p_id, r_id), {'geo_countries': ['JP']}), 'series': traverse_obj( additional_info, ('result', ('episode', 'series'), 'content', ('seriesTitle', 'title')), get_all=False), 'ie_key': 'BrightcoveNew', } |
追っかけ再生対象動画は未対応
今回のサイトリニューアルに合わせて、一部番組のリアルタイム配信が始まり、そうした動画はその後多くが「追っかけ再生」扱いになり、その閲覧はログインが必須とのこと。URLフォーマットも次のような別仕様になっているので、yt-dlpでは現状ダウンロード不能です。
|
https://tver.jp/live/simul/########## |
2022.04.11追記
4月8日のバイナリリリースでプルリクエストされていたTVerリニューアル対応が織り込まれました。
|
$ sudo yt-dlp -U Latest version: 2022.04.08, Current version: 2022.03.08.1 Current Build Hash 2c3dfddeddfe6e0b73dcd77db83bd9b05c5d567f156bab4b256092af07fad5b0 Updating to version 2022.04.08 ... Updated yt-dlp to version 2022.04.08; Restart yt-dlp to use the new version |
早速試してみると、上述した番組名が抜けてチャプタータイトルしかファイル名に盛り込まれない件は相変わらずでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
$ yt-dlp https://tver.jp/episodes/ep3ciq867q [TVer] Creating session [TVer] ep3ciq867q: Downloading JSON metadata [TVer] ep3ciq867q: Downloading JSON metadata [brightcove:new] 6303410257001: Downloading JSON metadata [brightcove:new] 6303410257001: Downloading m3u8 information [brightcove:new] 6303410257001: Downloading m3u8 information [brightcove:new] 6303410257001: Downloading m3u8 information [brightcove:new] 6303410257001: Downloading m3u8 information [brightcove:new] 6303410257001: Downloading MPD manifest [brightcove:new] 6303410257001: Downloading MPD manifest [info] 6303410257001: Downloading 1 format(s): hls-2664-3 [hlsnative] Downloading m3u8 manifest [hlsnative] Total fragments: 149 [download] Destination: 地元食材居酒屋を継いだ意外な人物 [6303410257001].mp4 [download] 100% of 448.71MiB in 10:33 [FixupM3u8] Fixing MPEG-TS in MP4 container of "地元食材居酒屋を継いだ意外な人物 [6303410257001].mp4" |
同じ動画を修正したローカルブランチ版でダウンロードしてみると番組名を含んだ形式でファイルが生成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
$ ~/yt-dlp/yt-dlp.sh https://tver.jp/episodes/ep3ciq867q [TVer] Creating session [TVer] ep3ciq867q: Downloading JSON metadata [TVer] ep3ciq867q: Downloading JSON metadata [brightcove:new] 6303410257001: Downloading JSON metadata [brightcove:new] 6303410257001: Downloading m3u8 information [brightcove:new] 6303410257001: Downloading m3u8 information [brightcove:new] 6303410257001: Downloading m3u8 information [brightcove:new] 6303410257001: Downloading m3u8 information [brightcove:new] 6303410257001: Downloading MPD manifest [brightcove:new] 6303410257001: Downloading MPD manifest [info] 6303410257001: Downloading 1 format(s): hls-2664-3 [hlsnative] Downloading m3u8 manifest [hlsnative] Total fragments: 149 [download] Destination: タタムなんてもったいない!_地元食材居酒屋を継いだ意外な人物 [6303410257001].mp4 [download] 100% of 448.71MiB in 13:25 [FixupM3u8] Fixing MPEG-TS in MP4 container of "タタムなんてもったいない!_地元食材居酒屋を継いだ意外な人物 [6303410257001].mp4" |
しばらくしても改善が見られないようなら、GitHubページへコメント入れようかと思います(そもそもアカウント作成から…)。
関連記事
以前記事にしたアカウントが無くても、百度 Baidu Pan から ダウンロード するのに必要なリン…
各動画サイトのダウンロードに、Clibgrubと共に愛用しているyoutube-dlのYoutube…
OpenWRT 19.07で実装された Flow Offloading 機能を、GL-iNet社の …