您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Screenshot the current frame of any YouTube video
当前为
// ==UserScript== // @name Screenshot // @description Screenshot the current frame of any YouTube video // @match https://*.youtube.com/* // @license MIT // @version 0.0.1.20231216115159 // @namespace https://greasyfork.org/users/1207477 // ==/UserScript== function update(){ let $miniplayerBtn = document.querySelector('button.ytp-miniplayer-button'); if($miniplayerBtn && !$miniplayerBtn.previousElementSibling.classList.contains('ytp-screenshot-button')){ const $btn = document.createElement('button'); $btn.classList.add('ytp-screenshot-button', 'ytp-button'); $btn.dataset.priority = '5'; $btn.dataset.tooltipTargetId = 'ytp-screenshot-button'; $btn.dataset.titleNoTooltip = 'Screenshot'; $btn.ariaLabel = 'Screenshot'; $btn.title = 'Screenshot'; $btn.innerHTML = `<svg height="100%" version="1.1" viewBox="-300 -1260 1560 1560" width="100%"> <use class="ytp-svg-shadow" xlink:href="#ytp-id-screenshot-svg"></use> <path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z" fill="#fff" id="ytp-id-screenshot-svg"></path> </svg>`; $btn.addEventListener('click', screenshot); insertBefore($btn, $miniplayerBtn); } requestAnimationFrame(update); } requestAnimationFrame(update); function insertBefore($element, $sibling){ $sibling.parentElement.insertBefore($element, $sibling); } function screenshot(){ const $video = document.querySelector('#player video'); if(!$video){ console.error('No video found to screenshot!'); return; } const $canvas = document.createElement('canvas'); $canvas.width = $video.videoWidth; $canvas.height = $video.videoHeight; let oldCss = $video.style.cssText; $video.style.width = $video.videoWidth + 'px'; $video.style.height = $video.videoHeight + 'px'; const ctx = $canvas.getContext('2d'); ctx.drawImage($video, 0, 0, $video.videoWidth, $video.videoHeight); $canvas.toBlob(blob=>{ const item = new ClipboardItem({ 'image/png': blob }); navigator.clipboard.write([ item ]); $video.style.cssText = oldCss; $canvas.remove(); }); }