2025-09-04 16:58:42 +08:00
|
|
|
|
//#region 图转视频类型
|
|
|
|
|
|
|
2025-09-12 14:52:28 +08:00
|
|
|
|
import { t } from '@/i18n'
|
|
|
|
|
|
import { BookBackTaskType } from './bookEnum'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
|
|
|
|
|
|
/** 图片转视频的方式 */
|
|
|
|
|
|
export enum ImageToVideoModels {
|
|
|
|
|
|
/** runway 生成视频 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
RUNWAY = 'RUNWAY',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** luma 生成视频 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
LUMA = 'LUMA',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** 可灵生成视频 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
KLING = 'KLING',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** Pika 生成视频 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
PIKA = 'PIKA',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** MJ 图转视频 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
MJ_VIDEO = 'MJ_VIDEO',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** MJ 视频拓展 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
MJ_VIDEO_EXTEND = 'MJ_VIDEO_EXTEND'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export const MappingTaskTypeToVideoModel = (type: BookBackTaskType | string) => {
|
|
|
|
|
|
switch (type) {
|
|
|
|
|
|
case BookBackTaskType.LUMA_VIDEO:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return ImageToVideoModels.LUMA
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case BookBackTaskType.RUNWAY_VIDEO:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return ImageToVideoModels.RUNWAY
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case BookBackTaskType.KLING_VIDEO:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return ImageToVideoModels.KLING
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case BookBackTaskType.MJ_VIDEO:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return ImageToVideoModels.MJ_VIDEO
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case BookBackTaskType.MJ_VIDEO_EXTEND:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return ImageToVideoModels.MJ_VIDEO_EXTEND
|
2025-09-04 16:58:42 +08:00
|
|
|
|
default:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return 'UNKNOWN'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 图片转视频模型的名称转换
|
|
|
|
|
|
* @param model 图片转视频的模型类型
|
|
|
|
|
|
* @returns 模型的中文名称
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const GetImageToVideoModelsLabel = (model: ImageToVideoModels | string) => {
|
|
|
|
|
|
switch (model) {
|
|
|
|
|
|
case ImageToVideoModels.RUNWAY:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return 'Runway'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case ImageToVideoModels.LUMA:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return 'Luma'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case ImageToVideoModels.KLING:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return t('可灵')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case ImageToVideoModels.PIKA:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return 'Pika'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case ImageToVideoModels.MJ_VIDEO:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return t('MJ视频')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
default:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return '未知'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取图像转视频模型选项的函数
|
2025-09-12 14:52:28 +08:00
|
|
|
|
*
|
2025-09-04 16:58:42 +08:00
|
|
|
|
* 该函数返回一个包含所有可用图像转视频模型的选项数组。
|
|
|
|
|
|
* 每个选项包含一个标签(label)和一个值(value)。
|
|
|
|
|
|
* 标签通过调用 GetImageToVideoModelsLabel 函数获得,而值则直接使用 ImageToVideoModels 枚举值。
|
2025-09-12 14:52:28 +08:00
|
|
|
|
*
|
2025-09-04 16:58:42 +08:00
|
|
|
|
* @returns 图像转视频模型选项数组,每个选项包含 label 和 value 属性
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const GetImageToVideoModelsOptions = () => {
|
|
|
|
|
|
return [
|
2025-09-12 14:52:28 +08:00
|
|
|
|
{
|
|
|
|
|
|
label: GetImageToVideoModelsLabel(ImageToVideoModels.MJ_VIDEO),
|
|
|
|
|
|
value: ImageToVideoModels.MJ_VIDEO
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
label: GetImageToVideoModelsLabel(ImageToVideoModels.RUNWAY),
|
|
|
|
|
|
value: ImageToVideoModels.RUNWAY
|
|
|
|
|
|
},
|
2025-09-04 16:58:42 +08:00
|
|
|
|
{ label: GetImageToVideoModelsLabel(ImageToVideoModels.LUMA), value: ImageToVideoModels.LUMA },
|
2025-09-12 14:52:28 +08:00
|
|
|
|
{
|
|
|
|
|
|
label: GetImageToVideoModelsLabel(ImageToVideoModels.KLING),
|
|
|
|
|
|
value: ImageToVideoModels.KLING
|
|
|
|
|
|
},
|
|
|
|
|
|
{ label: GetImageToVideoModelsLabel(ImageToVideoModels.PIKA), value: ImageToVideoModels.PIKA }
|
2025-09-04 16:58:42 +08:00
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
//#region 通用
|
|
|
|
|
|
|
|
|
|
|
|
/** 生成视频的方式 */
|
|
|
|
|
|
export enum VideoModel {
|
|
|
|
|
|
/** 文生视频 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
TEXT_TO_VIDEO = 'textToVideo',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** 图生视频 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
IMAGE_TO_VIDEO = 'imageToVideo'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/** 图转视频的状态 */
|
|
|
|
|
|
export enum VideoStatus {
|
|
|
|
|
|
/** 等待 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
WAIT = 'wait',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** 处理中 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
PROCESSING = 'processing',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** 完成 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
SUCCESS = 'success',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** 失败 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
FAIL = 'fail'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export const GetVideoStatus = (status: VideoStatus | string) => {
|
|
|
|
|
|
switch (status) {
|
|
|
|
|
|
case VideoStatus.WAIT:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
case '0':
|
|
|
|
|
|
return t('等待')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case VideoStatus.PROCESSING:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
case '1':
|
|
|
|
|
|
return t('处理中')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case VideoStatus.SUCCESS:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
case '3':
|
|
|
|
|
|
return t('完成')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case VideoStatus.FAIL:
|
|
|
|
|
|
case '2':
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return t('失败')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
default:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return t('未知')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
//#region runway 相关
|
|
|
|
|
|
|
|
|
|
|
|
/** runway 生成视频的模型 */
|
|
|
|
|
|
export enum RunawayModel {
|
2025-09-12 14:52:28 +08:00
|
|
|
|
GNE2 = 'gen2',
|
|
|
|
|
|
GNE3 = 'gen3'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/** runway 合成视频的时长 */
|
|
|
|
|
|
export enum RunwaySeconds {
|
|
|
|
|
|
FIVE = 5,
|
2025-09-12 14:52:28 +08:00
|
|
|
|
TEN = 10
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
//#region 可灵相关
|
|
|
|
|
|
|
|
|
|
|
|
export enum KlingMode {
|
|
|
|
|
|
/** 高性能 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
STD = 'std',
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/** 高表现 */
|
2025-09-12 14:52:28 +08:00
|
|
|
|
PRO = 'pro'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
//#region MJ Video
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 对视频任务进行操作。不为空时,index、taskId必填
|
|
|
|
|
|
*/
|
|
|
|
|
|
export enum MJVideoAction {
|
2025-09-12 14:52:28 +08:00
|
|
|
|
Extend = 'extend'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 首帧图片,扩展时可为空
|
|
|
|
|
|
*/
|
|
|
|
|
|
export enum MJVideoImageType {
|
2025-09-12 14:52:28 +08:00
|
|
|
|
Base64 = 'base64',
|
|
|
|
|
|
Url = 'url'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* MJ Video的动作幅度
|
|
|
|
|
|
*/
|
|
|
|
|
|
export enum MJVideoMotion {
|
2025-09-12 14:52:28 +08:00
|
|
|
|
High = 'high',
|
|
|
|
|
|
Low = 'low'
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
2025-09-12 14:52:28 +08:00
|
|
|
|
|
2025-09-04 16:58:42 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 获取MJ视频动作幅度的标签
|
2025-09-12 14:52:28 +08:00
|
|
|
|
*
|
2025-09-04 16:58:42 +08:00
|
|
|
|
* @param model MJ视频动作幅度枚举值或字符串
|
|
|
|
|
|
* @returns 返回对应的中英文标签
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function GetMJVideoMotionLabel(model: MJVideoMotion | string) {
|
|
|
|
|
|
switch (model) {
|
|
|
|
|
|
case MJVideoMotion.High:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return t('高 (High)')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
case MJVideoMotion.Low:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return t('低 (Low)')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
default:
|
2025-09-12 14:52:28 +08:00
|
|
|
|
return t('未知')
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取MJ视频动作幅度的选项列表
|
2025-09-12 14:52:28 +08:00
|
|
|
|
*
|
2025-09-04 16:58:42 +08:00
|
|
|
|
* @returns 返回包含标签和值的选项数组,用于下拉选择框等UI组件
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function GetMJVideoMotionOptions() {
|
|
|
|
|
|
return [
|
|
|
|
|
|
{
|
2025-09-12 14:52:28 +08:00
|
|
|
|
label: GetMJVideoMotionLabel(MJVideoMotion.Low),
|
|
|
|
|
|
value: MJVideoMotion.Low
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
label: GetMJVideoMotionLabel(MJVideoMotion.High),
|
|
|
|
|
|
value: MJVideoMotion.High
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* MJ Video 视频质量类型
|
|
|
|
|
|
*/
|
|
|
|
|
|
export enum MJVideoType {
|
|
|
|
|
|
/** 标清 480p */
|
|
|
|
|
|
SD = 'vid_1.1_i2v_480',
|
|
|
|
|
|
/** 高清 720p */
|
|
|
|
|
|
HD = 'vid_1.1_i2v_720'
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取MJ视频质量类型的标签
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param type MJ视频质量类型枚举值或字符串
|
|
|
|
|
|
* @returns 返回对应的中英文标签
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function GetMJVideoTypeLabel(type: MJVideoType | string) {
|
|
|
|
|
|
switch (type) {
|
|
|
|
|
|
case MJVideoType.SD:
|
|
|
|
|
|
return t('标清 (SD 480p)')
|
|
|
|
|
|
case MJVideoType.HD:
|
|
|
|
|
|
return t('高清 (HD 720p)')
|
|
|
|
|
|
default:
|
|
|
|
|
|
return t('未知')
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取MJ视频质量类型的选项列表
|
|
|
|
|
|
*
|
|
|
|
|
|
* @returns 返回包含标签和值的选项数组,用于下拉选择框等UI组件
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function GetMJVideoTypeOptions() {
|
|
|
|
|
|
return [
|
|
|
|
|
|
{
|
|
|
|
|
|
label: GetMJVideoTypeLabel(MJVideoType.SD),
|
|
|
|
|
|
value: MJVideoType.SD
|
|
|
|
|
|
},
|
|
|
|
|
|
{ label: GetMJVideoTypeLabel(MJVideoType.HD), value: MJVideoType.HD }
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* MJ Video 批次大小
|
|
|
|
|
|
*/
|
|
|
|
|
|
export enum MJVideoBatchSize {
|
|
|
|
|
|
/** 生成1个视频 */
|
|
|
|
|
|
ONE = 1,
|
|
|
|
|
|
/** 生成2个视频 */
|
|
|
|
|
|
TWO = 2,
|
|
|
|
|
|
/** 生成4个视频 */
|
|
|
|
|
|
FOUR = 4
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取MJ视频批次大小的标签
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param batchSize MJ视频批次大小枚举值或数字
|
|
|
|
|
|
* @returns 返回对应的中文标签
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function GetMJVideoBatchSizeLabel(batchSize: MJVideoBatchSize | number) {
|
|
|
|
|
|
switch (batchSize) {
|
|
|
|
|
|
case MJVideoBatchSize.ONE:
|
|
|
|
|
|
return t('1个视频')
|
|
|
|
|
|
case MJVideoBatchSize.TWO:
|
|
|
|
|
|
return t('2个视频')
|
|
|
|
|
|
case MJVideoBatchSize.FOUR:
|
|
|
|
|
|
return t('4个视频')
|
|
|
|
|
|
default:
|
|
|
|
|
|
return t('未知')
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取MJ视频批次大小的选项列表
|
|
|
|
|
|
*
|
|
|
|
|
|
* @returns 返回包含标签和值的选项数组,用于下拉选择框等UI组件
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function GetMJVideoBatchSizeOptions() {
|
|
|
|
|
|
return [
|
|
|
|
|
|
{
|
|
|
|
|
|
label: GetMJVideoBatchSizeLabel(MJVideoBatchSize.ONE),
|
|
|
|
|
|
value: MJVideoBatchSize.ONE
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
label: GetMJVideoBatchSizeLabel(MJVideoBatchSize.TWO),
|
|
|
|
|
|
value: MJVideoBatchSize.TWO
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
label: GetMJVideoBatchSizeLabel(MJVideoBatchSize.FOUR),
|
|
|
|
|
|
value: MJVideoBatchSize.FOUR
|
2025-09-04 16:58:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#endregion
|