Skip to content

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

下一步