制作Note

HTML5のvideoタグを使って、動画再生速度をコントロールしたい!

HTML5のvideoタグを使って、動画再生速度をコントロールしたい!

HTMLMediaElement.playbackRateプロパティを使ってjavascriptで制御できます。

HTMLMediaElement.playbackRate プロパティは、メディアが再生されるレートを設定します。これはユーザーが早送りやスローモーションなどのユーザー制御を実装するために使用されます。通常の再生レートにこの値を掛けて現在のレートが求められるため、 1.0 の値が通常の速度です。

playbackRate が負の数であれば、メディアは逆方向に再生されます。

動機としては、YouTubeを使いたくないケースがあり(訪問者をパスワード制御で制限したいとなった時にYouTubeだとNG)、videoタグで演奏動画をスローダウン再生したかった。

HTML

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Video Speed Controller</title>
</head>
<body>
  <video id="videoPlayer" width="640" height="360" controls>
    <source src="AllofMe.mp4" type="video/mp4">
    Your browser does not support the video tag.
  </video>
  <!-- <p id="playCount">View: 0</p> -->
  <p id="currentSpeed">Current Speed: 1.0x</p>
  <button id="decreaseSpeed">Down Speed</button>
  <button id="increaseSpeed">Fast Speed</button>

  <script src="script.js"></script>
</body>
</html>

javascript

document.addEventListener('DOMContentLoaded', (event) => {
    const video = document.getElementById('videoPlayer');
    const decreaseSpeedButton = document.getElementById('decreaseSpeed');
    const increaseSpeedButton = document.getElementById('increaseSpeed');
    const currentSpeedDisplay = document.getElementById('currentSpeed');
    const playCountDisplay = document.getElementById('playCount');
  
    let playCount = 0;
  
    // 初期の再生速度を表示
    updateSpeedDisplay(video.playbackRate);
  
    // 再生速度を0.25ずつ下げる
    decreaseSpeedButton.addEventListener('click', () => {
      if (video.playbackRate > 0.25) {
        video.playbackRate = (video.playbackRate - 0.25).toFixed(2);
        updateSpeedDisplay(video.playbackRate);
      }
    });
  
    // 再生速度を0.25ずつ上げる
    increaseSpeedButton.addEventListener('click', () => {
      if (video.playbackRate < 2.0) {  // 例として最大速度を2.0xに設定
        video.playbackRate = (video.playbackRate + 0.25).toFixed(2);
        updateSpeedDisplay(video.playbackRate);
      }
    });
  
    // ページ訪問時に再生数を1回だけ増やす
    if (!localStorage.getItem('hasVisited')) {
      playCount++;
      updatePlayCountDisplay(playCount);
      localStorage.setItem('hasVisited', 'true');
    } else {
      updatePlayCountDisplay(playCount);
    }
  
    // 再生速度表示を更新
    function updateSpeedDisplay(speed) {
      currentSpeedDisplay.textContent = `Current Speed: ${speed}x`;
    }
  
    // 再生数表示を更新
    function updatePlayCountDisplay(count) {
      playCountDisplay.textContent = `Play Count: ${count}`;
    }
  });
  

※試しに簡単な再生数カウントも入れてますが、実際はサーバーで再生数保持したりする必要があります
※次回はReact,Nextで再生数カウントを実装してみようかな!