diff --git a/registry/lib/plugins/video/download/mpv-output-playlist/MpvConfig.vue b/registry/lib/plugins/video/download/mpv-output-playlist/MpvConfig.vue
new file mode 100644
index 000000000..813d7479e
--- /dev/null
+++ b/registry/lib/plugins/video/download/mpv-output-playlist/MpvConfig.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
diff --git a/registry/lib/plugins/video/download/mpv-output-playlist/index.ts b/registry/lib/plugins/video/download/mpv-output-playlist/index.ts
new file mode 100644
index 000000000..8f5306b30
--- /dev/null
+++ b/registry/lib/plugins/video/download/mpv-output-playlist/index.ts
@@ -0,0 +1,15 @@
+import { PluginMetadata } from '@/plugins/plugin'
+import { DownloadVideoOutput } from '../../../../components/video/download/types'
+import { mpvPlaylist } from './mpv-playlist'
+
+export const plugin: PluginMetadata = {
+ name: 'downloadVideo.outputs.mpv-playlist',
+ displayName: '下载视频 - MPV 播放支持(列表)',
+ // FIXME: plugin 也需要 author 字段
+ description: 'by [@wuliic]\n\n为下载视频增加 MPV 输出支持,支持列表播放,配置方式请参考 [playwithmpv](https://github.com/videoanywhere/playwithmpv)',
+ setup: ({ addData }) => {
+ addData('downloadVideo.outputs', (outputs: DownloadVideoOutput[]) => {
+ outputs.push(mpvPlaylist)
+ })
+ },
+}
diff --git a/registry/lib/plugins/video/download/mpv-output-playlist/mpv-playlist.ts b/registry/lib/plugins/video/download/mpv-output-playlist/mpv-playlist.ts
new file mode 100644
index 000000000..78fffa46f
--- /dev/null
+++ b/registry/lib/plugins/video/download/mpv-output-playlist/mpv-playlist.ts
@@ -0,0 +1,34 @@
+import { postJson } from '@/core/ajax'
+import { Toast } from '@/core/toast'
+import { UserAgent } from '@/core/utils/constants'
+import { logError } from '@/core/utils/log'
+import { DownloadVideoOutput } from '../../../../components/video/download/types'
+
+export const mpvPlaylist: DownloadVideoOutput = {
+ name: 'mpv-playlist',
+ displayName: 'MPV播放',
+ description: '格式选择flv,千万不能选音画分离的dash。建议把mpv.exe所在目录加进环境变量。',
+ runAction: async (action, instance) => {
+ const { infos } = action
+ const { mpvInfo } = instance
+ const videoUrls = infos.flatMap(it => it.titledFragments).map(f => f.url)
+ const videoTitles = infos.flatMap(it => it.titledFragments).map(f => f.title)
+ // console.log(videoTitles)
+ const data = {
+ dir: mpvInfo.dir,
+ referer: 'https://www.bilibili.com/',
+ 'user-agent': UserAgent,
+ urls: videoUrls,
+ titles: videoTitles,
+ }
+ const url = `http://${mpvInfo.host}:${mpvInfo.port}`
+ const result = await postJson(url, data)
+ const resp = JSON.parse(result)
+ if (resp.success) {
+ Toast.success(`成功发送了请求: ${resp.message}`, 'MPV播放', 3000)
+ } else {
+ logError(resp.message)
+ }
+ },
+ component: () => import('./MpvConfig.vue').then(m => m.default),
+}