前回の記事

yt-dlpコマンドで、年齢制限を何とかする

なんで追記を書くことにしたの?

 最近、cookieを直接 yt-dlp コマンドに渡すのは、なんか cookie が機能しなくなったりしてメンテする必要があったりと、めんどっちいなとなった。何とかブラウザから cookie 読み込んでくれないかなと試したところ成功した。そこで、投げやりにしてた部分を今更ながら書いてみようとそういうわけである。

 あと、単純に google analytics をこのブログに導入してみて、一番 yt-dlpコマンドで、年齢制限を何とかする に訪問者 (Bot説ある) がいそうだという点も気にしてたりする。本当は、アンダーマイニング効果とかあるし、あまり他人目線でやると、本来のこのブログの意味が崩壊するので、なるべく避けたいものであるが、、、(実は、google analyticsとかは使わないほうがいい説があるが、しばらく様子見としてみる。)

分かったこと

必要なパッケージがある

 以下のように調べてみると、 python-secretstorage というパッケージが必要そうなことが分かる。

pacman -Si yt-dlp 
# -Si オプション: パッケージに関する情報について調べる。必須ではないがインストールが推奨されるパッケージの情報も出てくる。

リポジトリ             : extra
名前                   : yt-dlp
バージョン             : 2024.12.06-1
...
                         python-secretstorage: For -cookies-from-browser to access the GNOME keyring while decrypting cookies of Chromium-based browsers
...

うまくいかないブラウザ

 chromium 系のブラウザでは、cookieの復号がうまくいかず、以下のように失敗するので、諦めて firefox を使うことにした。ちなみに、私は brave とかそのほかのブラウザでは特に試していないので、chrome とか firefox 以外のブラウザにおいての具体的な挙動はまだわかっていない。

 “cannot decrypt v11 cookies: no key found " と言われ、cookieの取得に失敗する。

yt-dlp https://www.youtube.com/watch?v=[videoID] --cookies-from-browser chrome
Extracting cookies from chrome
[Cookies] Loading cookie      0/    65WARNING: cannot decrypt v11 cookies: no key found
Extracted 0 cookies from chrome (65 could not be decrypted)
[youtube+AGB] Extracting URL: https://www.youtube.com/watch?v=[videoID]
[youtube+AGB] [videoID]: Downloading webpage
[youtube+AGB] [videoID]: Downloading ios player API JSON
[youtube+AGB] [videoID]: Downloading tv embedded player API JSON
[youtube+AGB] [videoID]: Downloading web embedded client config
[youtube+AGB] [videoID]: Downloading player 576f07ca
[youtube+AGB] [videoID]: Downloading web embedded player API JSON
[youtube+AGB] [videoID]: Downloading Zerody API JSON
WARNING: [youtube+AGB] Unable to download JSON metadata: HTTP Error 502: Bad Gateway
ERROR: [youtube+AGB] [videoID]: Sign in to confirm your age. This video may be inappropriate for some users.

他のやり方

 寄り道したついでに、適当使えそうな使えなさそうな、微妙な方法やまだ試していない方法についてもまとめてみる。

 最近再び試しに、 chrome から cookie の抽出ができないかやってみたところ、なんかメッセージが変わっていた。

yt-dlp [videoID] --merge-output-format mp4 --cookies-from-browser chrome
Extracting cookies from chrome
[Cookies] Loading cookie      0/    67WARNING: cannot decrypt v11 cookies: no key found
Extracted 0 cookies from chrome (67 could not be decrypted)
[youtube+AGB] Extracting URL: [videoID]
[youtube+AGB] [videoID]: Downloading webpage
[youtube+AGB] [videoID]: Downloading ios player API JSON
[youtube+AGB] [videoID]: Downloading mweb player API JSON
[youtube+AGB] [videoID]: Downloading Zerody API JSON
WARNING: [youtube+AGB] Unable to download JSON metadata: HTTP Error 502: Bad Gateway
ERROR: [youtube+AGB] [videoID]: Sign in to confirm your age. This video may be inappropriate for some users. Use --cookies-from-browser or --cookies for the authentication. See  https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp  for how to manually pass cookies. Also see  https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies  for tips on effectively exporting YouTube cookies

 それでわかったこととして、yt-dlpコマンドで、年齢制限を何とかするのようにして、cookie をただ取り出すだけだと、youtube側が頻繁に cookie を変えてしまうために、すぐ機能しなくなってしまうとのことであった。

 それで、抽出した cookie を長く利用できるようにする方法として、シークレットタブでyoutubeにログインし、cookieを抽出する方法が説明されていた。ちなみに、私はブラウザ(firefox)を使う方法で満足したので、まだ試してはいない。以下は、Extractors · yt-dlp/yt-dlp Wiki · GitHubの引用である。

YouTube Exporting YouTube cookies

If you are unfamiliar with the basics of exporting cookies and passing them to yt-dlp, then first see How do I pass cookies to yt-dlp?

YouTube rotates cookies frequently on open YouTube browser tabs as a security measure. To export cookies that will >remain working with yt-dlp, you will need to export cookies in such a way that they are never rotated.

One way to do this is through a private browsing/incognito window:

  1. Open a new private browsing/incognito window and log into YouTube
  2. Open a new tab and close the YouTube tab
  3. Export cookies from the browser then close the private browsing/incognito window so the session is never opened in the browser again.

gnomekeyring を使う

 調べていると、How to authenticate with cookies from Brave Browser? : r/youtubedlというところに、確か chromium 系のブラウザであったはずの、brave と yt-dlp の挙動について書かれている。以下のようにすると、gnomekeyring を使って、cookieの復号ができるらしい。そこで、chromeでもできないか試してみた。

ReallyEvilRob
–cookies-from-browser brave+gnomekeyring did the trick. Thanks for your help!

 結果としては、以下のように結局失敗した。firefoxでとりあえず動いているので、なんか物騒な Manifest V3 とかの話題が上がってくる chrome 関連と関わっていると不毛そうだし、なんでか失敗するのかは今のところ調べていない。

 もしかすると、単純に chrome のデフォルト設定で gnomekeyring を使う様に設定していないのかもしれないと思ったりはしてみた(探したり試したりはしておらず、妄想の域を出ていない)。

yt-dlp [videoID] --merge-output-format mp4 --cookies-from-browser chrome+gnomekeyring
Extracting cookies from chrome
ERROR: Item does not exist!

参考にしたサイト