LoginSignup
13
4

More than 5 years have passed since last update.

video 要素のスクリーンショットを撮影するブックマークレット

Posted at

a.png

概要

YouTube やニコニコ動画のワンシーンを画像として保存したい時、どうしてますか?
OS のスクリーンショット機能?でも良いんですが、たいてい矩形選択する必要があるから面倒だし、きれいに選択できなかったら嫌ですよね?私は嫌です。

そこでエンジニアなりに video 要素について調べてみると(ほとんどの動画は video 要素で実装されているので)、 Canvas の drawImage 関数にそのまま渡して描画できることがわかりました。
つまり仮想 Canvas に video 要素を描画してスクリプトダウンロードするブックマークレットを作れば、ワンタッチで動画のスクリーンショットを撮影することができそうです。

コード

というわけで作ったのがこちらになります。

javascript: (() => { const video = document.querySelector('video'); if (video) { const canvas = document.createElement('canvas'); canvas.width = video.clientWidth; canvas.height = video.clientHeight; const context = canvas.getContext('2d'); context.drawImage(video, 0, 0, canvas.width, canvas.height); const image = new Image(); image.src = canvas.toDataURL('image/png'); const a = document.createElement('a'); a.download = `${location.host}_${new Date().toISOString()}.png`; a.target = '_blank'; a.href = image.src; a.click(); } else { alert('There is no video tag.'); } })(); void 0;

説明は割愛…ブックマークの URL 欄にコピペすれば OK です。
試写はこちらで行いました。ナショジオ良いですよね。

注意点

  • Chrome でしか動かないはず
  • Chrome では二回目の撮影時に複数ダウンロードの許可を求めるポップアップが表示される
  • video 要素がない場合はアラートを表示する
  • video 要素がいっぱいある場合は最初の要素だけ撮影する
  • CORS 由来のエラーで動作しない場合がある

動作確認サービス

✅ ニコニコ動画( HTML5 版のみ)
✅ ニコニコ生放送( HTML5 版のみ)
✅ Twitch
✅ YouTube
❌ Vimeo

ひとこと

360° カメラの動画を撮影したらこんなんなりました。
b.png

13
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4