您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
YouTube動画・配信を別ウィンドウで開くアイコンを設置
// ==UserScript== // @name YouTube Video WindowOpener // @namespace http://tampermonkey.net/ // @version 0.5 // @description YouTube動画・配信を別ウィンドウで開くアイコンを設置 // @author You // @include https://www.youtube.com/watch?v=* // @include https://www.youtube.com/embed/* // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com // @grant none // @license MIT // ==/UserScript== //動画プレイヤー const player = document.querySelector('#movie_player') //ライブ配信の左上にBufferを表示 let liveBufferLatency //SVGアイコン追加 if(location.pathname == "/watch"){ document.querySelector('[aria-label="設定"]').insertAdjacentHTML("afterend", ` <div id="windowOpen" class="ytp-button" aria-label="別ウィンドウで開く" title="別ウィンドウで開く" data-title-no-tooltip="別ウィンドウで開く"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" viewBox="-150 -230 975 975" style="enable-background:new 0 0 600 600;" xml:space="preserve"> <style type="text/css"> .st0{fill:#FFF;} </style> <g id="XMLID_6_"> <path id="XMLID_11_" class="st0" d="M418.5,139.4H232.4v139.8h186.1V139.4z M464.8,46.7H46.3C20.5,46.7,0,68.1,0,93.1v325.9 c0,25.8,21.4,46.3,46.3,46.3h419.4c25.8,0,46.3-20.5,46.3-46.3V93.1C512,67.2,490.6,46.7,464.8,46.7z M464.8,418.9H46.3V92.2h419.4 v326.8H464.8z"></path> </g> </svg> </div>`) //イベント作成 document.getElementById("windowOpen").addEventListener("click", e => { //動画を止める player.pauseVideo() //別ウィンドウを作成 const VIDEO_ID = player.getVideoStats().debug_videoId window.open(`https://www.youtube.com/embed/${VIDEO_ID}?currentTime=${player.getCurrentTime()}`, "window_name","width=1024,height=576") }) }else if(location.href.match("https://www.youtube.com/embed/") && location.search.match("currentTime")){ //動画を再生 player.playVideo() player.seekTo(+location.search.match(/\d.*/g)) setTimeout( () => { const stats = document.querySelector('#movie_player').getVideoStats() || {}; if (stats.live !== 'live') { return; }else{ //動画左上にバッファーとテイレンシを表示 LiveBufferAndLatency() //latency自動調整実行 setInterval(speedCheck,100) } },1000) } function speedCheck(){ const Buffer = getBufferHealth(player) liveBufferLatency.textContent = `Buffer: ${Buffer.toFixed(2)}` if((Buffer < 0) && player.getPlaybackRate() != 0.75){ //0.5秒以下バッファーがあれば速度を更に下げる player.setPlaybackRate(0.75); console.log(0.75) }else if((Buffer < 0.2) && player.getPlaybackRate() != 1){ //1.5秒以下バッファーがあれば速度を下げる player.setPlaybackRate(1.00); console.log(1) }else if(Buffer > 0.4 && player.getPlaybackRate() != 1.25){ //1.5秒以上バッファーがあれば速度を上げる player.setPlaybackRate(1.25); console.log(1.25) } } function getBufferHealth(player) { const stats = player.getVideoStats(); if (!stats) { return 0; } const bufferRange = stats.vbu; if (!bufferRange) { return 0; } const buffer = bufferRange.split('-'); if (buffer.length < 2) { return 0; } const bufferTime = Number(buffer.slice(-1)[0]); const currentTime = Number(stats.vct); if (isNaN(bufferTime) || isNaN(currentTime)) { return 0; } return bufferTime - currentTime; } function LiveBufferAndLatency(){ player.insertAdjacentHTML("afterbegin",`<div id="live-buffer-latency" style=" position: absolute; z-index: 111; background: #00000088; "></div>`) liveBufferLatency = document.getElementById("live-buffer-latency") }