您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Take screenshots of YouTube videos with P key
// ==UserScript== // @name YouTube Screenshot // @namespace http://tampermonkey.net/ // @version 1.0 // @description Take screenshots of YouTube videos with P key // @author rushplayer // @match https://www.youtube.com/* // @grant none // ==/UserScript== (function() { 'use strict'; function getVideoElement() { return document.querySelector('video'); } function captureFrame(video) { const canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; const ctx = canvas.getContext('2d'); // 设置跨域属性 video.crossOrigin = 'anonymous'; try { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); // 检查是否截图成功 const imageData = ctx.getImageData(0, 0, 1, 1).data; if (imageData[0] === 0 && imageData[1] === 0 && imageData[2] === 0) { throw new Error('Black frame detected'); } return canvas; } catch (e) { console.error('截图失败:', e); alert('截图失败: 请确保视频已加载并尝试再次按P键'); return null; } } function downloadImage(canvas) { const now = new Date(); const filename = `${now.getFullYear()}-${String(now.getMonth()+1).padStart(2,'0')}${String(now.getDate()).padStart(2,'0')}.jpg`; const link = document.createElement('a'); link.download = filename; link.href = canvas.toDataURL('image/jpeg', 0.8); link.click(); } function handleKeyPress(e) { if (e.key.toLowerCase() === 'p') { const video = getVideoElement(); if (video) { const canvas = captureFrame(video); if (canvas) downloadImage(canvas); } } } document.addEventListener('keydown', handleKeyPress); })();