はじめに
Chromeでローカルにあるビデオや音声ファイルを開くと再生することができます。しかし、一時停止、再生、音量の変更、Picture in Pictureしかできません。再生速度とか変えたいですよね。そこで、Chrome Extensionを作って機能を拡張してみました。作成するエクステンションはスピードの変更(0.1倍速から16倍速まで)、5秒進む、5秒戻る、ループ設定(ON,OFF)、音量の変更、ミュート(ON,OFF)をキーボードショートカットで行えるようにするものです。やってみると意外と簡単でした。
chrome extension を作成する
エクステンションを作成していきます。ディレクトリを作成し、その中にファイルを作成していってください。
manifest.jsonの作成
chromeのextensionを作るためには、まずmanifest.json
を作成する必要があります。これは、エクステンションの名称やバージョン、実行するファイルなどの設定を記述します。現在のmanifest_version
の最新は3なのでmanifest_version
を3としました。permissions
はエクステンションが必要な権限を記載します。content_scripts.matches
では、このエクステンションがいつ有効になるかを設定します。URLがこれによって設定されているパターンとマッチしたときにエクステンションが有効になります。今回はfile://
で始まると有効化されます。content_scripts.js
で実際に実行するファイルを指定します。icons
には、アイコンのパスを設定します。
1{
2 "manifest_version": 3,
3 "name": "Hattomo chrome media controller",
4 "version": "0.0.1",
5 "description": "Chrome video media controller!",
6 "author": "Hattomo",
7 "permissions": [
8 "declarativeContent"
9 ],
10 "content_scripts": [
11 {
12 "matches": [
13 "file://*"
14 ],
15 "js": [
16 "content.js"
17 ]
18 }
19 ],
20 "icons": {
21 "32": "icons/favicon-32x32.png",
22 "128": "icons/apple-icon-180x180.png"
23 }
24}
content.jsの設定
content.js
では、videoタグがあるかを確認し、videoタグがあった場合、videoタグのidとしてvideo_id
を指定します。videoタグがあるかを確認するのは画像などを開いた場合ビデオタグが見つからずのちの操作でエラーが出てしまうためです。その後、キーイベントのリスナーを登録し、イベントの発生を待ちます。動画や音声の操作は先ほど設定したidを使って行います。動画の速度や音量については、取れる値の幅に制限があるため、その制限を超えないよう実装します。また、i
を押すとアラートダイアログがでて現在の速度などが表示されるようにしました。
1let video_element = document.querySelector('video');
2if (video_element.id != null) {
3
4 video_element.id = 'video_id';
5 media = document.getElementById("video_id");
6
7 document.body.addEventListener('keydown',
8 event => {
9 playbackRate = 0.1;
10 volumeRate = 0.05;
11 if (event.key === 'f') {
12 // fast
13 if (media.playbackRate + playbackRate < 16) {
14 media.playbackRate += 0.1
15 } else {
16 media.playbackRate = 16
17 }
18 console.log("fast : " + media.playbackRate);
19 } else if (event.key === 's') {
20 // slow
21 if (0.1 < media.playbackRate - playbackRate) {
22 media.playbackRate -= 0.1;
23 } else {
24 media.playbackRate = 0.1;
25 }
26 console.log("slow : " + media.playbackRate);
27 } else if (event.key === 'l') {
28 // loop
29 if (media.loop) {
30 media.loop = false;
31 } else {
32 media.loop = true;
33 }
34 console.log("loop : " + media.loop);
35 } else if (event.key === 'm') {
36 // mute
37 if (media.muted) {
38 media.muted = false;
39 } else {
40 media.muted = true;
41 }
42 console.log("muted : " + media.loop);
43 } else if (event.key === 'ArrowRight') {
44 // skip
45 media.currentTime += 5;
46 } else if (event.key === 'ArrowLeft') {
47 // skip
48 media.currentTime -= 5;
49 } else if (event.key === 'ArrowUp') {
50 // volume
51 if (media.volume + volumeRate < 1) {
52 media.volume += 0.05;
53 } else {
54 media.volume = 1;
55 }
56 console.log("volume : " + media.volume);
57 } else if (event.key === 'ArrowDown') {
58 if (0 < media.volume - volumeRate) {
59 media.volume -= 0.05;
60 } else {
61 media.volume = 0
62 }
63 console.log("volume : " + media.volume);
64 } else if (event.key === 'i') {
65 msg = "Playback Speed " + media.playbackRate + "x\nLoop : " + media.loop;
66 alert(msg);
67 }
68 });
69}
エクステンションを読み込み使ってみる
chrome://extensions/
にアクセスし、開発者モードを有効にした後、エクステンションを読み込むことで使い始めることができます。例えば、f
を押して再生速度が速くなっていけば成功です。
Chromeには、現在英語のみですが、字幕の自動生成機能も新しくついたので、専用のビデオ再生ソフトよりもこれを使ったほうが便利になりそうです。