Amazon Prime Video用のユーザースクリプトを2つ書いた

JavaScriptchat_bubble0

通信(XMLHttpRequest)のインターセプト・改ざんができるxhookを使用した実験的なユーザースクリプトを2つ書いてみました。動作確認は私の環境・私のアカウントでのみ行っています。他の環境では期待通りに機能しないかもしれません。なお記事執筆時点ではどちらのユーザースクリプトも日本のAmazon(amazon.co.jp)のみを動作対象にしています。

Next-up Disabler for Amazon Prime Video

https://gist.github.com/ryo-fujinone/8c5fb9c720b3b0b380cb6cbe44a17f30

Auto hide next up card for Amazon Prime Video」がNext upを無効化するのではなく非表示にするというアプローチを取っているのに対し、こちらは通信を改ざんしてNext upの無効化を図ります。

プライムビデオは各動画の再生を開始する度に自動再生に関わるデータをサーバーにリクエストします。そこにshowAutoplayCardという常にtrueになっているフラグが存在し、それをfalseにするとNext upの無効化が実現できました。

ただ、それだけでは最後まで再生した際の次のエピソード以外への遷移(別シーズンやサジェストされたコンテンツへの遷移)は無効化できませんでした。そちらはNext upの有効無効に関わらず自動再生の設定が参照されるようです。そこで、関係のありそうなプロパティをチェックをして次のエピソード以外へ遷移しそうならその時だけ自動再生のフラグをfalseにする(=自動再生をその時だけ無効化する)というアプローチも取っています。Auto hide next up cardでは動画上部に表示されるタイトルの比較で動画を閉じるか閉じないかを判定しますが、このユーザースクリプトのアプローチではAmazonの表示言語を考慮する必要が無いため、サジェストされたコンテンツだけでなく別シーズンへの遷移の制御も実現できています。

なお、このユーザースクリプトではReactions(好き/好きではないボタン)を無効化することもできるようです。どうやらReactionsはNext upとかなり密接な関わりがある仕様のようです。

このユーザースクリプトは実験的な物です。基本的にはAuto hide next up cardの使用を推奨します。

OP/ED Speed Resetter for Amazon Prime Video

https://github.com/ryo-fujinone/speed-resetter-for-amazon-prime-video

「イントロスキップボタンが出現するタイミング」と「Next upが出現するタイミング以降」という条件で再生速度を1.0にリセットするユーザースクリプトです。

Video Speed Controllerなどの拡張機能で再生速度を変えて視聴する場合かつOP/EDでは再生速度を1.0にしたい場合に役立つユーザースクリプトとなっています。デフォルトでは無効にしていますが、イントロスキップボタンが消えるタイミングで任意の再生速度に変更することも可能です。

通信をインターセプトしてイントロスキップボタンやNext upの表示タイミング(タイムコード)を取得し、それを使用します。単純にDOMを監視するだけでもイントロスキップボタンやNext upの出現を検出することは可能ですが、以下のような理由があり、タイムコードで正確なタイミングを知る必要がありました。

  • 自動再生が無効の場合はシークバーを使用してNext upの表示タイミング以降に移動するとNext upが出現するが、自動再生が有効の場合はそのようにしてもNext upが出現しない。
  • イントロスキップボタンもNext upも、OPとEDと全くの同時というわけではなく数秒遅れていることがあった。そのため、「表示される◯秒前に再生速度を1.0にする」という感じの設定を用意したかった。

通信をインターセプトせず再生開始のタイミングで能動的にAmazonにリクエストを送る(fetchする)ことは不可能ではなかったのですが、動画ごとのASIN或いはIDをDOMから取得するのが非常に面倒で、その方法は採用しませんでした。Tithen-Firionという方が開発したAmazon Video - subtitle downloaderというユーザースクリプトではDOMからASINを取得する方法が採用されているようですが、エピソードリストのページ限定で機能するようで、「どのようなページからでも再生開始のタイミングで確実にタイムコードが欲しい」という思想で開発したSpeed Resetterでは採用できない方法でした。

ちなみにタイムコードにはあらすじスキップ用の物も存在しましたが、そちらについてはこのユーザースクリプトの動作条件には含めていません。

このユーザースクリプトはあくまでも再生速度の調整における補助的な物です。というのも、そもそもイントロスキップボタンのタイムコードが設定されていないことがあったり、OP/EDが特殊演出の場合にズレたところにタイムコードが設定されていることがあったり…。そのような作品の場合にはこのユーザースクリプトで期待通りに再生速度を変更することはできません。

注意点

これらのユーザースクリプトはAmazonが通信周りの仕様を変更すると動作しないようになる可能性があります。私の環境での話になりますが、2025年3月4日に1日だけ仕様が変わるということがありました。その時は「https://atv-ps-fe.amazon.co.jp/cdp/lumina/playerChromeResources/v1」にパラメータを付けて自動再生関連のデータを取得するという挙動でした。また、「https://atv-ps-fe.amazon.co.jp/playback/prs/GetVodPlaybackResources」にパラメータを付けてmpdファイルのURLや、イントロスキップボタン等のタイムコードを取得するという挙動でした。それに対応しようとした翌日にそれまでの挙動に戻ったので結局対応できず…。そんな感じなので、今後はその辺りも気にかけてプライムビデオの仕様変更に対応していこうと思っています。

ブラウザ拡張機能

藤乃音りょう