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