1. 移除软件包自带的本地 whisper(需单独安装)
2. 重构版本底层依赖,移除外部依赖
3. 修复 首页 暗黑模式不兼容的问题
4. 修复 SD 合并提示词报错
This commit is contained in:
2024-10-20 23:19:22 +08:00
parent efa8d3b2a2
commit f4d042f699
38 changed files with 2749 additions and 1568 deletions
+132 -152
View File
@@ -37,7 +37,6 @@
label-placement="left"
inline
:model="frameValue"
:rules="rules"
size="medium"
>
<n-form-item label="分割敏感度" path="sensitivity" style="width: 300px">
@@ -68,7 +67,7 @@
<n-code style="padding: 0; font-size: small" :code="code" language="js" word-wrap />
</template>
<script>
<script setup>
import { defineComponent, ref, onMounted, toRaw } from 'vue'
import {
NSelect,
@@ -83,161 +82,142 @@ import {
NForm,
NFormItem,
NSlider,
NInput
NInput,
useDialog
} from 'naive-ui'
import { DEFINE_STRING } from '../../../../define/define_string'
export default defineComponent({
components: {
NSelect,
NButton,
NSpin,
NDivider,
NCode,
NTabs,
NTabPane,
NSpace,
NForm,
NFormItem,
NSlider,
NInput
},
setup() {
let options = []
let out_dir = ref(null)
let selectedValue = ref(null)
let show = ref(false)
let code = ref('')
const message = useMessage()
let storyLoading = ref(false)
let frameValue = ref({
sensitivity: 30,
video_path: null
})
let options = []
let out_dir = ref(null)
let selectedValue = ref(null)
let show = ref(false)
let code = ref('')
const message = useMessage()
let storyLoading = ref(false)
let dialog = useDialog()
onMounted(() => {
window.api.getDraftFileList((value) => {
value.forEach((element) => {
let obj = {
label: element,
value: element
}
options.push(obj)
})
})
window.api.setEventListen([DEFINE_STRING.GET_FRAME_RETUN], (value) => {
if (value.code == 0) {
message.error(value.message)
code.value = code.value + '\n' + value.data
return
}
// 完成
if (value.type == 0) {
storyLoading.value = false
message.success('分镜抽帧完成')
}
code.value = code.value + '\n' + value.data
})
})
async function getFrameFunc(e) {
out_dir = window.config.project_path
if (selectedValue.value == null || selectedValue.value == undefined) {
message.error('请选择剪映草稿和输出草稿')
return
}
show.value = true
// 抽帧
await window.api.getFrame([selectedValue.value, out_dir], (value) => {
if (value.code == 0) {
message.error('抽帧失败')
code.value = value.message
return
}
message.success('抽帧成功')
code.value = value.data
show.value = false
})
}
function selectExportFolder(e) {
window.api.selectFolder(null, (value) => {
if (value.length <= 0) {
message.error('必须选择输出文件夹位置')
return
}
out_dir.value = value[0]
})
}
/**
* 选择指定的视频文件
*/
async function GetVideoFile() {
await window.api.SelectFile(['mp4'], (value) => {
if (value.code == 0) {
message.error(value.message)
return
}
frameValue.value.video_path = value.value
})
}
/**
* 开始分镜执行分镜任务
*/
async function StartStoryboarding() {
storyLoading.value = true
if (frameValue.value.video_path == null) {
message.error('选择分镜的视频地址')
return
}
if (
toRaw(frameValue.value)
.video_path.split('.')
[toRaw(frameValue.value).video_path.split('.').length - 1].toUpperCase() != 'MP4'
) {
message.error('目前只支持MP4格式')
return
}
await window.api.StartStoryboarding(toRaw(frameValue.value))
}
/**
* 打开环境安装网站
*/
function OpenTeachDoc() {
window.api.OpenUrl(
'https://pvwu1oahp5m.feishu.cn/docx/VrBVd2KUDosmNfxat3OceWuInjd?from=from_copylink'
)
}
function openExportFolder() {
window.system.OpenFolder({
folderPath: 'tmp/input_crop',
baseProject: true
})
}
return {
selectedValue,
options,
out_dir,
getFrameFunc,
selectExportFolder,
show,
code,
frameValue,
GetVideoFile,
StartStoryboarding,
OpenTeachDoc,
storyLoading,
openExportFolder
}
}
let frameValue = ref({
sensitivity: 30,
video_path: null
})
onMounted(() => {
window.api.getDraftFileList((value) => {
value.forEach((element) => {
let obj = {
label: element,
value: element
}
options.push(obj)
})
})
window.api.setEventListen([DEFINE_STRING.GET_FRAME_RETUN], (value) => {
if (value.code == 0) {
message.error(value.message)
code.value = code.value + '\n' + value.data
return
}
// 完成
if (value.type == 0) {
storyLoading.value = false
message.success('分镜抽帧完成')
}
code.value = code.value + '\n' + value.data
})
})
async function getFrameFunc(e) {
out_dir = window.config.project_path
if (selectedValue.value == null || selectedValue.value == undefined) {
message.error('请选择剪映草稿和输出草稿')
return
}
show.value = true
// 抽帧
await window.api.getFrame([selectedValue.value, out_dir], (value) => {
if (value.code == 0) {
message.error('抽帧失败')
code.value = value.message
return
}
message.success('抽帧成功')
code.value = value.data
show.value = false
})
}
function selectExportFolder(e) {
window.api.selectFolder(null, (value) => {
if (value.length <= 0) {
message.error('必须选择输出文件夹位置')
return
}
out_dir.value = value[0]
})
}
/**
* 选择指定的视频文件
*/
async function GetVideoFile() {
await window.api.SelectFile(['mp4'], (value) => {
if (value.code == 0) {
message.error(value.message)
return
}
frameValue.value.video_path = value.value
})
}
/**
* 开始分镜执行分镜任务
*/
async function StartStoryboarding() {
storyLoading.value = true
if (frameValue.value.video_path == null) {
message.error('选择分镜的视频地址')
return
}
if (
toRaw(frameValue.value)
.video_path.split('.')
[toRaw(frameValue.value).video_path.split('.').length - 1].toUpperCase() != 'MP4'
) {
message.error('目前只支持MP4格式')
return
}
let res = await window.api.StartStoryboarding(toRaw(frameValue.value))
if (res.code == 0) {
dialog.error({
title: '抽帧错误输出',
content: res.message
})
return
} else {
dialog.success({
title: '抽帧成功',
content: '视频分镜,抽帧,问题提取都已完成'
})
}
}
/**
* 打开环境安装网站
*/
function OpenTeachDoc() {
window.api.OpenUrl(
'https://pvwu1oahp5m.feishu.cn/docx/VrBVd2KUDosmNfxat3OceWuInjd?from=from_copylink'
)
}
function openExportFolder() {
window.system.OpenFolder({
folderPath: 'tmp/input_crop',
baseProject: true
})
}
</script>
<style>
@@ -47,7 +47,6 @@ export default defineComponent({
onMounted(async () => {
// 监听返回的日志数据
window.api.setEventListen([DEFINE_STRING.SYSTEM.RETURN_LOGGER], (value) => {
debuger
if (value.code == 0) {
message.error('添加日志输出失败,但是不影响使用')
logger.value += value.message + '\n'
@@ -1,9 +1,8 @@
<template>
<div style="width: 100%; height: 100%">
<div
id="showmessage"
style="font-size: 15px; display: flex; justify-content: center; width: 100%; height: 100%"
></div>
<div style="font-size: 15px; display: flex; justify-content: center; width: 100%; height: 100%">
<div id="showmessage"></div>
</div>
</div>
</template>
@@ -34,6 +33,7 @@ async function GetRemoteSystemInformation() {
iframe.style.padding = '0'
iframe.style.height = '98vh' // Adjust the height as needed
showMessageDiv.innerHTML = ''
showMessageDiv.style.width = '100%'
showMessageDiv.appendChild(iframe)
} else {
showMessageDiv.innerHTML = remoteHomePage