feat: 绿幕视频自定义背景图片

This commit is contained in:
2025-03-07 14:42:55 +08:00
parent e31c906677
commit 121dee6a0f
2 changed files with 48 additions and 3 deletions

View File

@@ -20,6 +20,7 @@ const createCourseSchema = object({
digital_human_id: number().not([0], '请选择数字人'), digital_human_id: number().not([0], '请选择数字人'),
source_type: number().default(0).required(), source_type: number().default(0).required(),
speed: number().default(1.0).min(0.5).max(1.5).required(), speed: number().default(1.0).min(0.5).max(1.5).required(),
bg_img: string().optional(),
}) })
type CreateCourseSchema = InferType<typeof createCourseSchema> type CreateCourseSchema = InferType<typeof createCourseSchema>
@@ -30,9 +31,11 @@ const createCourseState = reactive({
digital_human_id: 0, digital_human_id: 0,
source_type: 0, source_type: 0,
speed: 1.0, speed: 1.0,
bg_img: undefined,
}) })
const selected_digital_human = ref<DigitalHumanItem | null>(null) const selected_digital_human = ref<DigitalHumanItem | null>(null)
const selected_bg_img = ref<File | undefined>();
watchEffect(() => { watchEffect(() => {
if (selected_digital_human.value) { if (selected_digital_human.value) {
@@ -42,9 +45,26 @@ watchEffect(() => {
} }
}) })
const onCreateCourseGreenSubmit = async (event: FormSubmitEvent<CreateCourseSchema>) => { const onCreateCourseGreenSubmit = async (event: FormSubmitEvent<CreateCourseSchema>) => {
creationPending.value = true creationPending.value = true
useFetchWrapped<req.gen.GBVideoCreate & AuthedRequest, BaseResponse<resp.gen.GBVideoCreate>>('App.Digital_VideoTask.Create', {
let bgImgUrl = undefined
if (selected_bg_img.value) {
bgImgUrl = await useFileGo(selected_bg_img.value, 'tmp')
}
let payload: {
token: string;
user_id: number;
title: string;
content: string;
digital_human_id: any;
speed: number;
device_id: string;
source_type: 1 | 2 | undefined;
bg_img?: string;
} = {
token: loginState.token!, token: loginState.token!,
user_id: loginState.user.id, user_id: loginState.user.id,
title: event.data.title, title: event.data.title,
@@ -53,7 +73,27 @@ const onCreateCourseGreenSubmit = async (event: FormSubmitEvent<CreateCourseSche
speed: 2 - event.data.speed, speed: 2 - event.data.speed,
device_id: 'XSHAssistant Web', device_id: 'XSHAssistant Web',
source_type: event.data.source_type as 1 | 2 | undefined, source_type: event.data.source_type as 1 | 2 | undefined,
}).then(res => { }
if (selected_bg_img.value) {
if (!bgImgUrl) {
toast.add({
title: '上传失败',
description: '背景图片上传失败,请重试',
color: 'red',
icon: 'i-tabler-alert-triangle',
})
selected_bg_img.value = undefined
creationPending.value = false
return
}
payload = {
...payload,
bg_img: bgImgUrl,
}
}
useFetchWrapped<req.gen.GBVideoCreate & AuthedRequest, BaseResponse<resp.gen.GBVideoCreate>>('App.Digital_VideoTask.Create', payload).then(res => {
if (!!res.data.task_id) { if (!!res.data.task_id) {
toast.add({ toast.add({
title: '创建成功', title: '创建成功',
@@ -142,6 +182,10 @@ const onCreateCourseGreenSubmit = async (event: FormSubmitEvent<CreateCourseSche
</UFormGroup> </UFormGroup>
</div> </div>
<UFormGroup label="背景图片" name="bg_img" help="可以上传图片作为视频背景,留空则为绿幕背景">
<UInput type="file" accept="image/jpg,image/png" placeholder="选择背景图片" @change="selected_bg_img = $event?.[0] || undefined"/>
</UFormGroup>
<UFormGroup label="驱动内容" name="content" required> <UFormGroup label="驱动内容" name="content" required>
<!-- <template #help>--> <!-- <template #help>-->
<!-- <p class="text-xs text-neutral-400">--> <!-- <p class="text-xs text-neutral-400">-->

1
typings/types.d.ts vendored
View File

@@ -251,6 +251,7 @@ namespace req {
speed?: number speed?: number
// 1: upstream 2: internal // 1: upstream 2: internal
source_type?: 1 | 2 source_type?: 1 | 2
bg_img?: string
} }
interface GBVideoDelete { interface GBVideoDelete {