1.103.40以上
- 相关源码已开源到Releases · wszgrcy/shb-ext-tts · GitHub
- 欢迎对照查看
- 每个插件对应的阶段
音频项处理
- 处理
.tts文件中,每一项需要生成的内容 - 输入
项配置,原始项配置,元数据
通常使用第一个参数
{
name: '自定义替换',
priority: 2,
fn: async (item) => {
let content = item.generateOptions.audioText ?? item.subtitle.text;
for (const item of ExtensionConfig.replaceList()) {
content = content.replaceAll(item.find, item.replace);
}
item.generateOptions.audioText = content;
return item;
},
},
连接前处理
- 每一项生成完成,准备将切片合并为一个文件之前
- 输入
连接配置,比如
[[{"type":"file","filePath":"d:/103conf/pythonAddon/chunk/4de3fef8-0a28-542e-8cad-8872890fb677.wav","subtitle":{"text":"第一句内容"},"speedControl":{}}],[{"type":"file","filePath":"d:/103conf/pythonAddon/chunk/b0a2595a-affc-589b-9475-2945a88e006e.wav","subtitle":{"text":"第二句内容"},"speedControl":{}}]]
{
name: 'ffmpeg滤镜',
fn: async (inputList, config) => {
let workspaceService = input.provider.root.injector.get(input.provider.root.WorkspaceService);
let execPath = path.join(
path.resolve(workspaceService.nFolder(), ExtensionConfig.ffmpeg.dir()),
ExtensionConfig.ffmpeg.execPath()
);
let { $ } = await import('execa');
for (const item of inputList) {
for (const element of item) {
if (element.type === 'file') {
let filePath = element.filePath;
let outputPath = element.filePath.replace(/\.wav$/, '.af.wav');
let commandList = mergeWavAfCommand(ExtensionConfig.ffmpeg.af(), filePath, outputPath);
await $({})(execPath, commandList);
element.filePath = outputPath;
}
}
}
return inputList;
},
}
连接后处理
- 生成完成后,处理整个文件
- 输入
文件路径
注意这个不带
.wav因为同时存在.wav,.srt音频和字幕文件,需要自己拼接
- 暂时没想到好的例子,欢迎反馈
{
name: 'test',
fn: async (input) => {
return input;
},
},
开启
- 插件只有开启才会自动处理
其他问题
- 插件目前开发基本处于需要哪些参数,就暴露哪些参数,所以如果有什么不清楚的地方,欢迎反馈
