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で再生数カウントを実装してみようかな!


