JavaScript
本节介绍 mpv 的 JavaScript 脚本开发。
JavaScript 基础
脚本结构
javascript
// JavaScript 脚本基本结构
mp.add_key_binding('ctrl+s', 'screenshot', function() {
mp.command('screenshot');
});常用模块
javascript
// mp 模块
// 自动可用,无需 require
// 消息模块
mp.msg.info('Info message');快捷键绑定
添加快捷键
javascript
// 添加快捷键
mp.add_key_binding('ctrl+s', 'screenshot', function() {
mp.command('screenshot');
});
// 带参数的快捷键
mp.add_key_binding('ctrl+o', 'show-info', function() {
const title = mp.get_property('media-title');
mp.osd_message('Title: ' + title);
});鼠标绑定
javascript
// 鼠标绑定
mp.add_key_binding('MBTN_LEFT', 'toggle-pause', function() {
mp.command('cycle pause');
});属性操作
获取属性
javascript
// 获取属性
const title = mp.get_property('media-title');
const volume = mp.get_property_number('volume');
const paused = mp.get_property_bool('pause');设置属性
javascript
// 设置属性
mp.set_property('volume', 80);
mp.set_property_number('volume', 80);
mp.set_property_bool('pause', true);监听属性变化
javascript
// 监听属性变化
mp.observe_property('volume', 'number', function(name, value) {
mp.msg.info('Volume changed: ' + value);
});命令执行
执行命令
javascript
// 执行命令
mp.command('seek 10');
mp.command('cycle pause');
mp.command('set volume 80');命令参数
javascript
// 带参数的命令
mp.commandv('seek', 10);
mp.commandv('set', 'volume', 80);
mp.commandv('screenshot-to-file', 'frame.png');事件处理
事件监听
javascript
// 文件加载事件
mp.register_event('file-loaded', function() {
mp.msg.info('File loaded');
});
// 播放结束事件
mp.register_event('end-file', function() {
mp.msg.info('Playback ended');
});事件类型
javascript
// 常用事件
mp.register_event('file-loaded', callback);
mp.register_event('end-file', callback);
mp.register_event('shutdown', callback);OSD 显示
显示消息
javascript
// 显示 OSD 消息
mp.osd_message('Hello World', 2);
// 显示属性
const title = mp.get_property('media-title');
mp.osd_message('Title: ' + title, 3);自定义 OSD
javascript
// 自定义 OSD
mp.add_key_binding('ctrl+o', 'show-info', function() {
const title = mp.get_property('media-title');
const time = mp.get_property('time-pos');
mp.osd_message(`Title: ${title}\nTime: ${time}`, 3);
});定时器
定时器设置
javascript
// 定时器
mp.add_periodic_timer(1, function() {
mp.msg.info('Timer tick');
});
// 单次定时器
mp.add_timeout(5, function() {
mp.msg.info('Timeout');
});调试
调试信息
javascript
// 调试信息
mp.msg.info('Info message');
mp.msg.warn('Warning message');
mp.msg.error('Error message');
// OSD 调试
mp.osd_message('Debug: ' + value);脚本测试
bash
# 测试 JavaScript 脚本
mpv --script=file.js video.mp4