ニコニコ動画の再生速度制限を回避する 2026年10月

2026年10月18日JavaScript,ツールchat_bubble3

この記事の内容は記事執筆時点のニコニコ動画の仕様に基づいています。ニコニコ動画の仕様変更の影響を受けやすい内容となっており、仕様が変更された場合はコードの修正や別のアプローチが必要になると思われます。

ニコニコ動画は再生速度の変更機能を提供していますが、一般会員の場合は1.25倍までに制限されます。また、拡張機能などからの再生速度の変更を防ぐための制限も存在します。ニコニコ動画はページの状態管理の仕組みの中で再生速度の値を管理しており、再生位置が変わる度に発生するtimeupdateイベントのイベントリスナーに、再生速度を元の速度に戻すコードが仕込まれています。それにより、拡張機能などから再生速度を変更してもすぐに元の再生速度に戻るという挙動が発生します。

この記事ではVideo Speed Controllerのような拡張機能からの再生速度変更を可能にすることを目的として、再生速度の制限回避のための方法を紹介します。

Firefoxの拡張機能「NicoVideo Unlimited Speed」を使う

Firefoxの拡張機能でのみ、個々の通信に対してレスポンスボディ含め改変を行うことが可能な webRequest.filterResponseData() というメソッドが使えるようになっています。これにより再生速度の制限のためのコードをピンポイントで改変する拡張機能の開発が可能となり、実際にその拡張機能「NicoVideo Unlimited Speed」を開発しました。

このアプローチであれば、ニコニコ動画の仕様変更があったとしても面倒な実装でなければ対処が可能だと思っています。ただしこのアプローチはFirefoxでのみ有効です。他のブラウザを使用している場合、次に紹介するユーザースクリプトが使えると思います。

なおこの拡張機能を使用する場合の注意点として、ターゲットにしているコードを含むjsファイルがブラウザでキャッシュされる可能性があるので、キャッシュを削除しないと、この拡張機能が期待通りに機能しない可能性があります。再生速度を変更できない場合は、一度キャッシュを削除してみてください。

ユーザースクリプト「Nicovideo speed limit unlocker」を使う

Greasy Forkにて、Eluentywという人が、「Nicovideo speed limit unlocker」というユーザースクリプトを公開されています。Tampermonkeyなどのユーザースクリプトマネージャーで利用でき、Chrome/Chromium系ブラウザでも使用可能です。

こちらは、ニコニコ動画の動画プレイヤーの再生速度変更機能の定義にインターセプトし(割り込み)、任意のタイミングで再生速度変更機能を呼び出せるようにし、動画の再生速度が変わるたびに、動画の再生速度を引数にする形で再生速度変更機能を呼び出す、というユーザースクリプトです。これにより、内部状態として保持されている再生速度の値が更新されるようになります。

私が公開しているFirefoxの拡張機能は、問題となるコードをピンポイントで改変しているので、それと比較すると何らかの副作用・デメリットが発生する可能性は否定できませんが、私が軽く確認してみた限りでは問題はありませんでした。Chrome/Chromium系ブラウザのユーザーは、このユーザースクリプトを試してみるのが良いと思います。

addEventListenerをインターセプトしてイベントリスナーを登録しないようにする

この方法もFirefox/Chromeのどちらでも実行可能ですが、再生速度に応じてコメントの流れがカクつくというデメリットがあります。ニコニコ動画のコメントは右から左に流れますが、流れる速度は、内部状態として保持されている再生速度の値によって決まり、また一定間隔でコメントの位置の再計算があるようで、内部状態を変更しないこの方法では、結果として再生速度に応じて流れがカクつきます。

また、この方法は、ニコニコ動画の仕様変更次第ではまともに動画の視聴ができなくなる可能性もあります。記事執筆時点では該当のイベントリスナーが登録されないようにしても大きな問題は発生しませんが、ニコニコ運営の意向次第ではそのイベントリスナーの中でなにか動画の再生に関わる重要な処理が実行されることになる可能性があります。

addEventListenerをインターセプトすることで、任意の条件でイベントリスナーを登録しないようにしたり、イベント名と関数を保存しておいて任意のタイミングで任意のイベントリスナーを削除するといったことができるようになります。前者を実現するユーザースクリプトを書いたのでこの記事に載せておきます。先述の通りニコニコ運営の意向次第なところがあるので、Greasy Forkなどでは公開しないことにしました。

// ==UserScript==
// @name         nicovideo - bypass playback speed limits
// @namespace    https://ryo-fujinone.net/
// @version      1.0.1
// @description  ニコニコ動画で再生速度を制限しているイベントリスナーを登録しないようにする
// @author       ryo-fujinone
// @match        https://www.nicovideo.jp/watch/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    HTMLVideoElement.prototype.realAddEventListener = HTMLVideoElement.prototype.addEventListener;

    const regex = /\b([a-z])\.media\.playbackRate!==this\.playbackRate&&\(\1\.media\.playbackRate=this\.playbackRate\),/;

    HTMLVideoElement.prototype.addEventListener = function(type, listener, options){
        let shouldAdd = true;

        switch(type) {
            case "play":
            case "timeupdate":
                if (regex.test(listener.toString())) {
                    shouldAdd = false;
                }
                break;
        }

        if (shouldAdd) {
            this.realAddEventListener(type, listener, options);
        }
    };
})();

addEventListenerのインターセプトについては、以下の情報が参考になりました。

ブラウザ拡張機能,自作ツール

藤乃音りょう