返回 AiToEarn
volcengine.interface.ts
根目录 / project / aitoearn-backend / apps / aitoearn-ai / src / core / ai / libs / volcengine / volcengine.interface.ts
1 // 任务状态枚举
2 export enum TaskStatus {
3 Queued = 'queued',
4 Running = 'running',
5 Cancelled = 'cancelled',
6 Succeeded = 'succeeded',
7 Failed = 'failed',
8 Expired = 'expired',
9 }
10
11 // 内容类型枚举
12 export enum ContentType {
13 Text = 'text',
14 ImageUrl = 'image_url',
15 VideoUrl = 'video_url',
16 AudioUrl = 'audio_url',
17 }
18
19 // 图片角色枚举
20 export enum ImageRole {
21 FirstFrame = 'first_frame',
22 LastFrame = 'last_frame',
23 ReferenceImage = 'reference_image',
24 }
25
26 // 视频角色枚举
27 export enum VideoRole {
28 ReferenceVideo = 'reference_video',
29 }
30
31 // 音频角色枚举
32 export enum AudioRole {
33 ReferenceAudio = 'reference_audio',
34 }
35
36 // 工具类型枚举
37 export enum ToolType {
38 WebSearch = 'web_search',
39 }
40
41 // 错误信息接口
42 export interface TaskError {
43 /** 错误码 */
44 code: string
45 /** 错误提示信息 */
46 message: string
47 }
48
49 // 图片URL接口
50 export interface ImageUrl {
51 /** 图片信息,可以是图片URL或图片Base64编码。图片URL需确保可被访问;Base64编码格式:data:image/<图片格式>;base64,<Base64编码> */
52 url: string
53 }
54
55 // 视频对象接口
56 export interface VideoUrlObject {
57 /** 视频 URL 或素材 ID */
58 url: string
59 }
60
61 // 音频对象接口
62 export interface AudioUrlObject {
63 /** 音频 URL、Base64 编码或素材 ID */
64 url: string
65 }
66
67 // 文本内容接口
68 export interface TextContent {
69 /** 输入内容的类型,此处应为text */
70 type: ContentType.Text
71 /** 输入给模型的文本内容,描述期望生成的视频。支持中英文,建议不超过500字。可在文本提示词后追加--[parameters]控制视频输出规格 */
72 text: string
73 }
74
75 // 图片内容接口
76 export interface ImageContent {
77 /** 输入内容的类型,此处应为image_url */
78 type: ContentType.ImageUrl
79 /** 输入给模型的图片对象 */
80 image_url: ImageUrl
81 /** 图片的位置或用途。首帧图生视频可不填或为first_frame;首尾帧图生视频必填first_frame/last_frame;参考图生视频必填reference_image */
82 role?: ImageRole
83 }
84
85 // 视频内容接口
86 export interface VideoReferenceContent {
87 /** 输入内容的类型,此处应为video_url */
88 type: ContentType.VideoUrl
89 /** 输入给模型的视频对象 */
90 video_url: VideoUrlObject
91 /** 视频的位置或用途。当前仅支持参考视频 */
92 role: VideoRole
93 }
94
95 // 音频内容接口
96 export interface AudioReferenceContent {
97 /** 输入内容的类型,此处应为audio_url */
98 type: ContentType.AudioUrl
99 /** 输入给模型的音频对象 */
100 audio_url: AudioUrlObject
101 /** 音频的位置或用途。当前仅支持参考音频 */
102 role: AudioRole
103 }
104
105 // 内容联合类型
106 export type Content = TextContent | ImageContent | VideoReferenceContent | AudioReferenceContent
107
108 // 视频内容接口
109 export interface VideoContent {
110 /** 生成视频的URL,格式为mp4。为保障信息安全,生成的视频会在24小时后被清理,请及时转存 */
111 video_url: string
112 /** 视频的尾帧图像URL。有效期为24小时,请及时转存。说明:创建视频生成任务时设置"return_last_frame": true时,会返回参数 */
113 last_frame_url?: string
114 }
115
116 // 工具配置接口
117 export interface Tool {
118 type: ToolType
119 }
120
121 // 工具使用量统计
122 export interface ToolUsage {
123 web_search?: number
124 }
125
126 // 使用量统计接口
127 export interface Usage {
128 /** 模型生成的token数量 */
129 completion_tokens: number
130 /** 视频生成模型不统计输入token,输入token为0,故total_tokens=completion_tokens */
131 total_tokens: number
132 /** 工具使用情况 */
133 tool_usage?: ToolUsage
134 }
135
136 // 创建视频生成任务请求接口
137 export interface CreateVideoGenerationTaskRequest {
138 /** 您需要调用的模型的ID(Model ID)或Endpoint ID */
139 model: string
140 /** 输入给模型,生成视频的信息 */
141 content: Content[]
142 /** 填写本次生成任务结果的回调通知地址。当视频生成任务有状态变化时,方舟将向此地址推送POST请求 */
143 callback_url?: string
144 /** 是否返回生成视频的尾帧图像 */
145 return_last_frame?: boolean
146 /** 视频分辨率 */
147 resolution?: Resolution
148 /** 生成视频的宽高比 */
149 ratio?: Ratio
150 /** 生成视频时长 */
151 duration?: number
152 /** 种子值 */
153 seed?: number
154 /** 是否包含水印 */
155 watermark?: boolean
156 /** 模型要使用的工具 */
157 tools?: Tool[]
158 /** 是否生成音频 */
159 generate_audio?: boolean
160 /** 服务等级 */
161 service_tier?: 'default' | 'flex'
162 /** 超时时间(秒) */
163 execution_expires_after?: number
164 /** 终端用户标识 */
165 safety_identifier?: string
166 }
167
168 // 创建视频生成任务响应接口
169 export interface CreateVideoGenerationTaskResponse {
170 /** 视频生成任务ID。创建视频生成任务为异步接口,获取ID后,需要通过查询视频生成任务API来查询视频生成任务的状态 */
171 id: string
172 }
173
174 // 查询视频生成任务响应接口
175 export interface GetVideoGenerationTaskResponse {
176 /** 视频生成任务ID */
177 id: string
178 /** 任务使用的模型名称和版本,模型名称-版本 */
179 model: string
180 /** 任务状态:queued(排队中)、running(任务运行中)、cancelled(取消任务,取消状态24h自动删除)、succeeded(任务成功)、failed(任务失败) */
181 status: TaskStatus
182 /** 错误提示信息,任务成功返回null,任务失败时返回错误数据 */
183 error: TaskError | null
184 /** 任务创建时间的Unix时间戳(秒) */
185 created_at: number
186 /** 任务当前状态更新时间的Unix时间戳(秒) */
187 updated_at: number
188 /** 当视频生成任务完成,会输出该字段,包含生成视频下载的URL */
189 content?: VideoContent
190 /** 本次请求使用的种子整数值 */
191 seed?: number
192 /** 生成视频的分辨率 */
193 resolution?: string
194 /** 生成视频的宽高比 */
195 ratio?: string
196 /** 生成视频的时长,单位:秒 */
197 duration?: number
198 /** 生成视频的帧率 */
199 framespersecond?: number
200 /** 本次请求的token用量 */
201 usage?: Usage
202 }
203
204 // 支持的分辨率
205 export type Resolution = '480p' | '720p' | '1080p' | string
206
207 // 支持的宽高比
208 export type Ratio
209 = | '21:9'
210 | '16:9'
211 | '4:3'
212 | '1:1'
213 | '3:4'
214 | '9:16'
215 | '9:21'
216 | 'keep_ratio'
217 | 'adaptive'
218 | string
219
220 // 支持的模型
221 export type VideoModel
222 = | 'doubao-seedance-pro'
223 | 'doubao-seedance-2-0-250428'
224 | 'doubao-seedance-2-0-fast-250428'
225 | 'doubao-seedance-1-0-lite-t2v'
226 | 'doubao-seedance-1-0-lite-i2v'
227 | 'wan2-1-14b-t2v'
228 | 'wan2-1-14b-i2v'
229 | 'wan2-1-14b-flf2v'
230 | string
231
232 // ========== 视频点播 (VOD) 相关接口 ==========
233
234 // URL 上传项接口
235 export interface UrlSet {
236 /** 源文件 URL,支持 HTTP 和 HTTPS */
237 SourceUrl: string
238 /** 文件路径(可选)。设置 FileName,当 FileName 相同时,有文件覆盖的风险;需要保证 FileName 不同 */
239 FileName?: string
240 /** 文件后缀(可选)。以 . 开头,不超过 8 位。当您传入 FileExtension 时,不需要重复传入 FileName 参数 */
241 FileExtension?: string
242 }
243
244 // URL 批量拉取上传请求接口
245 export interface UploadMediaByUrlRequest {
246 /** 空间名 */
247 SpaceName: string
248 /** URL 集合 */
249 URLSets: UrlSet[]
250 }
251
252 // URL 批量拉取上传响应接口
253 export interface UploadMediaByUrlResponse {
254 /** 任务 ID 列表,多个任务 ID 用逗号分隔 */
255 JobIds?: string
256 /** 请求 ID */
257 RequestId?: string
258 }
259
260 // 上传功能函数接口
261 export interface UploadFunction {
262 /** 功能名称,如 GetMeta、Snapshot、AddOptionInfo 等 */
263 Name: string
264 /** 功能输入参数 */
265 Input?: Record<string, unknown>
266 }
267
268 // 流式上传请求接口
269 export interface UploadMaterialRequest {
270 /** 空间名 */
271 SpaceName: string
272 /** 文件可读流 */
273 Content: NodeJS.ReadableStream | Buffer
274 /** 文件大小(字节) */
275 FileSize: number
276 /** 文件路径(可选)。您可根据业务需求自定义文件路径。设置 FileName,当 FileName 相同时,有文件覆盖的风险;需要保证 FileName 不同 */
277 FileName?: string
278 /** 文件后缀(可选)。以 . 开头,不超过 8 位。当您传入 FileExtension 时,不需要重复传入 FileName 参数 */
279 FileExtension?: string
280 /** 文件类型。media(默认,音视频文件)、image(图片文件)、object(其他类型文件) */
281 FileType?: 'media' | 'image' | 'object'
282 /** 上传功能函数(可选)。JSON 字符串格式 */
283 Functions?: string
284 /** 回调参数(可选) */
285 CallbackArgs?: string
286 }
287
288 // 流式上传响应接口
289 export interface UploadMaterialResponse {
290 /** 视频 ID */
291 Vid?: string
292 /** 请求 ID */
293 RequestId?: string
294 }
295
296 // 查询上传任务状态请求接口
297 export interface QueryUploadTaskInfoRequest {
298 /** 任务 ID 列表,多个任务 ID 用逗号分隔,最多 20 个 */
299 JobIds: string
300 }
301
302 // 上传任务源信息接口
303 export interface UploadTaskSourceInfo {
304 /** 文件 MD5 */
305 Md5?: string
306 /** 文件类型 */
307 FileType?: string
308 /** 视频高度 */
309 Height?: number
310 /** 视频宽度 */
311 Width?: number
312 /** 视频格式 */
313 Format?: string
314 /** 视频时长(秒) */
315 Duration?: number
316 /** 文件大小(字节) */
317 Size?: number
318 /** 存储 URI */
319 StoreUri?: string
320 /** 视频码率 */
321 Bitrate?: number
322 /** TOS 存储类型 */
323 TosStorageClass?: string
324 /** 文件名 */
325 FileName?: string
326 }
327
328 // 上传任务信息接口
329 export interface UploadTaskInfo {
330 /** 请求 ID */
331 RequestId?: string
332 /** 任务 ID */
333 JobId?: string
334 /** 源文件 URL */
335 SourceUrl?: string
336 /** 任务状态(小写)。running(执行中)、success(成功)、failed(失败) */
337 State?: string
338 /** 视频 ID */
339 Vid?: string
340 /** 空间名 */
341 SpaceName?: string
342 /** 账号 ID */
343 AccountId?: string
344 /** 回调参数 */
345 CallbackArgs?: string
346 /** 源文件信息 */
347 SourceInfo?: UploadTaskSourceInfo
348 /** 错误信息(已废弃,使用 State 判断) */
349 Error?: {
350 Code?: string
351 Message?: string
352 }
353 }
354
355 // 查询上传任务状态响应数据接口
356 export interface QueryUploadTaskInfoData {
357 /** 任务信息列表 */
358 MediaInfoList?: UploadTaskInfo[]
359 /** 不存在的任务 ID 列表 */
360 NotExistJobIds?: string[]
361 }
362
363 // 查询上传任务状态响应接口
364 export interface QueryUploadTaskInfoResponse {
365 /** 响应数据 */
366 Data?: QueryUploadTaskInfoData
367 /** 请求 ID(已废弃,在 ResponseMetadata 中) */
368 RequestId?: string
369 }
370
371 // ========== Aideo Agent 相关接口 ==========
372
373 // 技能类型枚举
374 export enum SkillType {
375 /** AI 视频翻译 */
376 AITranslation = 'AITranslation',
377 /** AI 字幕擦除 */
378 Erase = 'Erase',
379 /** AI 高光剪辑 */
380 Highlight = 'Highlight',
381 /** AI 剪辑 */
382 VCreative = 'VCreative',
383 /** AI 视频理解 */
384 Vision = 'Vision',
385 }
386
387 // 输入文件类型
388 export interface MultiInput {
389 /** 输入文件类型。当前仅支持取值为 Vid,表示 Vid 模式 */
390 Type: 'Vid'
391 /** 视频 ID (Vid) 或媒资 ID (Mid) */
392 Vid: string
393 }
394
395 // ========== 视频上传输入类型 ==========
396
397 // URL 输入项
398 export interface VideoUrlInput {
399 /** 输入类型标识 */
400 type: 'url'
401 /** 视频 URL */
402 url: string
403 /** 文件路径(可选) */
404 fileName?: string
405 /** 文件后缀(可选) */
406 fileExtension?: string
407 }
408
409 // 文件流输入项
410 export interface VideoStreamInput {
411 /** 输入类型标识 */
412 type: 'stream'
413 /** 文件流 */
414 stream: NodeJS.ReadableStream | Buffer
415 /** 文件大小(字节) */
416 fileSize: number
417 /** 文件路径(可选) */
418 fileName?: string
419 /** 文件后缀(可选) */
420 fileExtension?: string
421 }
422
423 // 视频输入联合类型
424 export type VideoInput = VideoUrlInput | VideoStreamInput | string
425
426 // ========== AITranslation 技能参数 ==========
427
428 // 支持的语言类型
429 export enum LanguageCode {
430 /** 中文 */
431 Zh = 'zh',
432 /** 英文 */
433 En = 'en',
434 /** 日语 */
435 Ja = 'ja',
436 /** 韩语 */
437 Ko = 'ko',
438 /** 德语 */
439 De = 'de',
440 /** 法语 */
441 Fr = 'fr',
442 /** 俄语 */
443 Ru = 'ru',
444 /** 西班牙语 */
445 Es = 'es',
446 /** 葡萄牙语 */
447 Pt = 'pt',
448 /** 意大利语 */
449 It = 'it',
450 /** 印尼语 */
451 Id = 'id',
452 /** 越南语 */
453 Vi = 'vi',
454 /** 泰语 */
455 Th = 'th',
456 /** 阿拉伯语 */
457 Ar = 'ar',
458 /** 土耳其语 */
459 Tr = 'tr',
460 }
461
462 // 翻译类型
463 export enum TranslationType {
464 /** 文本翻译 */
465 SubtitleTranslation = 'SubtitleTranslation',
466 /** 语音翻译 */
467 VoiceTranslation = 'VoiceTranslation',
468 /** 面容翻译 */
469 FacialTranslation = 'FacialTranslation',
470 }
471
472 // 术语库配置
473 export interface AITranslationTermbaseConfig {
474 /** 要应用的术语库 ID 列表。单次翻译任务最多支持应用 10 个术语库 */
475 TranslationTermbaseIds: string[]
476 }
477
478 // 翻译配置
479 export interface TranslationConfig {
480 /** 源语言 */
481 SourceLanguage: LanguageCode
482 /** 目标语言 */
483 TargetLanguage: LanguageCode
484 /** 需要执行的翻译类型组合 */
485 TranslationTypeList: TranslationType[]
486 /** 术语库配置,用于在翻译过程中应用自定义的术语表 */
487 TermbaseConfig?: AITranslationTermbaseConfig
488 }
489
490 // 字幕识别类型
491 export enum SubtitleRecognitionType {
492 /** 从视频的画面中识别文字并生成字幕 */
493 OCR = 'OCR',
494 /** 从视频的音轨中识别文字并生成字幕 */
495 ASR = 'ASR',
496 /** 使用提供的源语言字幕文件 */
497 SourceSubtitleFile = 'SourceSubtitleFile',
498 /** 使用提供的源语言和目标语言字幕文件 */
499 SourceAndTargetSubtitleFile = 'SourceAndTargetSubtitleFile',
500 /** 使用提供的双语字幕文件 */
501 BilingualSubtitleFile = 'BilingualSubtitleFile',
502 /** 通过 AI 综合理解视频画面和语音来生成字幕 */
503 Vision = 'Vision',
504 /** (已废弃)行为等同于 SourceSubtitleFile */
505 SubtitleFile = 'SubtitleFile',
506 }
507
508 // 字幕识别配置
509 export interface AITranslationSubtitleRecognitionConfig {
510 /** 字幕来源 */
511 RecognitionType: SubtitleRecognitionType
512 /** 源语言字幕文件的 FileName。当 RecognitionType 为 SourceSubtitleFile 或 SourceAndTargetSubtitleFile 时必填 */
513 SourceSubtitleFileName?: string
514 /** 目标语言字幕文件的 FileName。当 RecognitionType 为 SourceAndTargetSubtitleFile 时必填 */
515 TargetSubtitleFileName?: string
516 /** 双语字幕文件的 FileName。当 RecognitionType 为 BilingualSubtitleFile 时必填 */
517 BilingualSubtitleFileName?: string
518 /** (已废弃)字幕文件的 FileName。当字幕来源 RecognitionType 为 SubtitleFile 时必填 */
519 SubtitleFileName?: string
520 }
521
522 // 操作配置
523 export interface AITranslationOperatorConfig {
524 /** 字幕识别配置。字幕来源默认为 OCR */
525 SubtitleRecognitionConfig?: AITranslationSubtitleRecognitionConfig
526 }
527
528 // 支持的字体大小
529 export type SubtitleFontSize = 16 | 18 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48
530
531 // 暂停阶段
532 export type SuspensionStage = 'SubtitleRecognition' | 'SubtitleTranslation'
533
534 // 执行配置
535 export interface AITranslationProcessConfig {
536 /** 执行过程中需要暂停的阶段列表。设置后,任务将在指定阶段完成后暂停,等待人工干预。目前仅支持暂停单一阶段 */
537 SuspensionStageList?: SuspensionStage[]
538 /** 是否禁用字幕断句优化(字幕打轴)。false(默认):系统会自动根据标点符号将过长的字幕分割成更易于阅读的短句;true:禁用此功能 */
539 DisableSubtitlePunctSplit?: boolean
540 /** 是否禁用智能字幕改写。false(默认):系统会利用大模型能力,对翻译后的字幕进行智能优化;true:禁用此功能,输出机器翻译的原始结果 */
541 DisableSmartSubtitleRewrite?: boolean
542 }
543
544 // AI 翻译技能参数
545 export interface AITranslationSkillParams {
546 /** 翻译配置 */
547 TranslationConfig: TranslationConfig
548 /** 操作配置 */
549 OperatorConfig?: AITranslationOperatorConfig
550 /** 字幕配置 */
551 SubtitleConfig?: AITranslationSubtitleConfig
552 /** 处理配置 */
553 ProcessConfig?: AITranslationProcessConfig
554 }
555
556 // ========== Highlight 技能参数 ==========
557
558 // 高光剪辑配置
559 export interface HighlightCuts {
560 /** 是否输出分镜信息。true:系统会在高光分析结果中输出算法基于分镜理解得出的视频片段信息;false(默认):不输出分镜信息 */
561 WithStoryboard?: boolean
562 /** 输出高光片段的最小时长,单位为秒,默认值为 90。注意:在实际高光分析过程中,为确保剧情的连贯性并保留"钩子"剧情,算法所输出高光视频的时长可能不会与您所设置的 MinDuration 和 MaxDuration 严格相符 */
563 MinDuration?: number
564 /** 输出高光片段的最大时长,单位为秒。默认值为 300。若您指定最大时长,系统会将混剪结果截断至合适长度,可能不会使用全部输入视频片段 */
565 MaxDuration?: number
566 /** 输出高光片段的最多片段数,默认值为 6 */
567 MaxNumber?: number
568 }
569
570 // 开头钩子配置
571 export interface OpeningHook {
572 /** 是否启用精彩前置功能。true:开启精彩前置功能,系统将自动分析并提取视频中最精彩的片段,将其置于视频开头;false(默认):关闭精彩前置功能 */
573 WithOpeningHook?: boolean
574 /** 视频开头精彩片段的最小时长,单位为秒,默认为 5 */
575 MinDuration?: number
576 /** 视频开头精彩片段的最大时长,单位为秒,默认值为 15 */
577 MaxDuration?: number
578 /** 设置构成视频开头精彩片段的单个高光片段的最小持续时长。单位为秒,默认值为 5。视频开头的精彩片段可能会由多个高光片段拼接而成。此参数用于避免因拼接过多过短片段而导致的画面频闪问题,以确保最终成片的视觉流畅性。注意:请确保 MinClipDuration 大于 MinDuration,否则可能会导致输出多个独立的前置精彩片段 */
579 MinClipDuration?: number
580 /** 设置构成视频开头精彩片段的单个高光片段的高光打分下限,默认值为 3。视频开头精彩片段可能会由多个高光片段拼接而成,此参数用于筛选高质量片段以确保开场效果 */
581 MinScore?: number
582 }
583
584 // 高光剪辑技能参数
585 export interface HighlightSkillParams {
586 /** 高光剪辑配置 */
587 HighlightCuts?: HighlightCuts
588 /** 开头钩子配置 */
589 OpeningHook?: OpeningHook
590 }
591
592 // ========== Vision 技能参数 ==========
593
594 // 视频理解模型配置
595 export interface OperationTaskVisionModel {
596 /** 豆包 VLM (Vision Language Model) 模型的推理接入点 ID。DoubaoVisionEndpoint 和 DoubaoTextEndpoint 二选一必填 */
597 DoubaoVisionEndpoint?: string
598 /** 语音识别 (ASR) 产品的 APP ID */
599 AsrAppId: string
600 /** 语音识别 (ASR) 产品中流式语音识别大模型的类型 */
601 AsrAppType: 'volc.bigasr.sauc.duration' | 'volc.bigasr.sauc.concurrent'
602 /** 豆包 LLM (Large Language Model) 模型的推理接入点 ID。DoubaoVisionEndpoint 和 DoubaoTextEndpoint 二选一必填 */
603 DoubaoTextEndpoint?: string
604 }
605
606 // 视频分段理解配置
607 export interface OperationTaskVisionSegment {
608 /** 起始时间,单位为秒。若不设置,则默认从视频开头开始 */
609 Start?: number
610 /** 结束时间,单位为秒。若不设置,则默认到视频结尾结束。End 要大于 Start */
611 End?: number
612 }
613
614 // 截图分辨率
615 export enum SnapshotResolution {
616 /** 240p 分辨率 */
617 P240 = '240p',
618 /** 360p 分辨率 */
619 P360 = '360p',
620 /** 480p 分辨率 */
621 P480 = '480p',
622 /** 720p 分辨率 */
623 P720 = '720p',
624 /** 1080p 分辨率 */
625 P1080 = '1080p',
626 }
627
628 // 截图区域配置
629 export interface RatioRectangle {
630 /** 框选区域左上角相对于视频左上角在X轴上的偏移比例,取值范围为[0,1] */
631 TopLeftX?: number
632 /** 框选区域左上角相对于视频左上角在 Y 轴上的偏移比例,取值范围为 [0,1] */
633 TopLeftY?: number
634 /** 框选区域右下角相对于视频左上角在 X 轴上的偏移比例,取值范围为 [0,1] */
635 BottomRightX?: number
636 /** 框选区域右下角相对于视频左上角在 Y 轴上的偏移比例,取值范围为 [0,1] */
637 BottomRightY?: number
638 }
639
640 // 截图策略配置
641 export interface OperationTaskVisionSnapshotParam {
642 /** 视频截图的分辨率 */
643 Resolution: SnapshotResolution
644 /** 每秒截取的帧数 */
645 Fps: number
646 /** 截图区域配置 */
647 Area?: RatioRectangle
648 }
649
650 // AI 视频理解技能参数
651 export interface VisionSkillParams {
652 /** 大模型提示词。使用 UTF-8 编码。长度不可超过 30000 个字符。根据 Model 参数所配置的视频理解模式,提示词中需包含相应占位符 */
653 Prompt: string
654 /** 大模型配置。您可通过此参数配置对视频的理解模式 */
655 Model: OperationTaskVisionModel
656 /** 视频分段理解配置。用于指定视频理解任务的起始和结束时间 */
657 Segment?: OperationTaskVisionSegment
658 /** 截图策略配置。视频理解处理过程中会对视频进行截图。默认截图策略为均匀时间间隔截图最多 50 张 */
659 SnapshotParam?: OperationTaskVisionSnapshotParam
660 /** 是否在 ASR(语音识别)结果中包含说话人信息并用于大模型的推理。默认值为 false */
661 NeedAsrSpeaker?: boolean
662 /** 指定视频理解结果的输出格式。"":默认值;json_object:大模型会参考 Prompt 中指定的 JSON 格式稳定输出准确的 JSON 格式 */
663 ResponseFormatType?: '' | 'json_object'
664 }
665
666 // ========== VCreative 技能参数 ==========
667
668 // AI 剪辑技能参数
669 export interface VCreativeSkillParams {
670 /** 剪辑提示词 */
671 Text: string
672 }
673
674 // ========== Erase 技能参数 ==========
675
676 // 擦除框位置信息
677 export interface OperationTaskEraseLocation {
678 /** 擦除框位置信息 */
679 RatioLocation?: RatioRectangle
680 }
681
682 // 字幕过滤器配置
683 export interface OperationTaskEraseSubtitleFilter {
684 /** 文字高度最小比例,默认值为 0.01,即视频高度的 1% */
685 MinTextHeightRatio?: number
686 /** 文字高度最大比例,默认值为 0.1,即视频高度的 10% */
687 MaxTextHeightRatio?: number
688 /** 文字区域中心偏离视频宽中心的比例。默认值为 0.08,即 8% */
689 RectangleCenterOffsetRatio?: number
690 }
691
692 // 自动擦除模式配置
693 export interface OperationTaskEraseAuto {
694 /** 文本擦除类型。Subtitle:擦除 OCR 检测为字幕的文本;Text:(Beta) 擦除除场景文字(如宫殿门牌匾等)以外的字幕及其他文本(如人物介绍等) */
695 Type: 'Subtitle' | 'Text'
696 /** 擦除框数组。添加擦除框后,系统仅擦除框内文本 */
697 Locations?: OperationTaskEraseLocation[]
698 /** 用于指定擦除文字的高度和距离视频宽度中心的比例,精确控制擦除范围。仅当 Mode 为 Auto、Type 为 Subtitle 时生效 */
699 SubtitleFilter?: OperationTaskEraseSubtitleFilter
700 }
701
702 // 手动擦除模式配置
703 export interface OperationTaskEraseManual {
704 /** 擦除框数组。添加擦除框后,系统仅擦除框内文本 */
705 Locations?: OperationTaskEraseLocation[]
706 }
707
708 // 视频片段过滤器
709 export interface OperationTaskEraseOptionClip {
710 /** 片段的起始时间,单位为秒 */
711 Start: number
712 /** 片段的结束时间,单位为秒 */
713 End: number
714 }
715
716 // 擦除选项片段过滤器
717 export interface OperationTaskEraseOptionClipFilter {
718 /** 片段处理模式。Skip:跳过模式,系统将擦除整个视频,但会跳过 Clips 数组中指定的片段区域;Selected:选中模式,系统将仅对 Clips 数组中指定的片段区域进行字幕擦除 */
719 Mode: 'Skip' | 'Selected'
720 /** 目标时间片段数组 */
721 Clips: OperationTaskEraseOptionClip[]
722 }
723
724 // 擦除选项
725 export interface OperationTaskEraseOption {
726 /** 视频片段过滤器。用于定义一个或多个时间片段,并指定对这些片段执行的操作模式(擦除或跳过) */
727 ClipFilter?: OperationTaskEraseOptionClipFilter
728 }
729
730 // 字幕擦除技能参数
731 export interface EraseSkillParams {
732 /** 字幕擦除模式。Auto:自动擦除模式,系统将启用 OCR 识别,并依据检测结果进行擦除操作;Manual:(Beta) 手动擦除模式,系统不会启用 OCR 识别,仅擦除白色字幕内容 */
733 Mode: 'Auto' | 'Manual'
734 /** 自动擦除模式配置 */
735 Auto?: OperationTaskEraseAuto
736 /** 手动擦除模式配置 */
737 Manual?: OperationTaskEraseManual
738 /** 是否返回擦除信息详情 */
739 WithEraseInfo?: boolean
740 /** 是否为擦除后的视频生成一个新的 Vid */
741 NewVid?: boolean
742 /** 擦除选项。可用于指定仅对视频的特定时间片段进行或跳过字幕擦除,实现更精细的控制 */
743 EraseOption?: OperationTaskEraseOption
744 }
745
746 // 技能参数联合类型
747 export type SkillParams
748 = | AITranslationSkillParams
749 | HighlightSkillParams
750 | VisionSkillParams
751 | VCreativeSkillParams
752 | EraseSkillParams
753
754 // ========== SubmitAITranslationWorkflow 接口 ==========
755
756 // AI翻译输入
757 export interface AITranslationInput {
758 /** 视频ID */
759 Vid: string
760 /** 视频URL */
761 VideoUrl?: string
762 }
763
764 // AI翻译配置
765 export interface AITranslationConfig {
766 /** 源语言 */
767 SourceLanguage?: string
768 /** 目标语言 */
769 TargetLanguage?: string
770 /** 翻译类型列表 */
771 TranslationTypeList?: TranslationType[]
772 }
773
774 // AI翻译字幕配置
775 export interface AITranslationSubtitleConfig {
776 /** 是否为硬字幕 */
777 IsHardSubtitle?: boolean
778 /** 是否擦除源字幕 */
779 IsEraseSource?: boolean
780 /** 字体大小 */
781 FontSize?: number
782 /** 边距设置 */
783 MarginL?: number
784 MarginR?: number
785 MarginV?: number
786 /** 显示行数 */
787 ShowLines?: number
788 }
789
790 // 项目基本信息
791 export interface ProjectBaseInfo {
792 /** 项目ID */
793 ProjectId?: string
794 /** 项目版本 */
795 ProjectVersion?: string
796 }
797
798 // ========== 提交任务请求/响应 ==========
799
800 // 基础请求字段
801 interface BaseSubmitAideoTaskAsyncRequest {
802 /** 点播空间名 */
803 SpaceName: string
804 /** 输入文件列表 */
805 MultiInputs: MultiInput[]
806 }
807
808 // 自然语言驱动请求(使用 Prompt)
809 interface PromptDrivenRequest extends BaseSubmitAideoTaskAsyncRequest {
810 /** 自然语言提示词 */
811 Prompt: string
812 /** 禁止使用 SkillType */
813 SkillType?: never
814 /** 禁止使用 SkillParams */
815 SkillParams?: never
816 }
817
818 // 指定技能驱动请求(使用 SkillType)
819 interface SkillDrivenRequest extends BaseSubmitAideoTaskAsyncRequest {
820 /** 禁止使用 Prompt */
821 Prompt?: never
822 /** 指定要调用的 AI 技能类型 */
823 SkillType: SkillType
824 /** 技能参数(JSON 序列化后的字符串,当使用 SkillType 时可能需要) */
825 SkillParams?: string
826 }
827
828 // 提交异步智能视频处理任务请求(联合类型确保 Prompt 和 SkillType 互斥)
829 export type SubmitAideoTaskAsyncRequest = PromptDrivenRequest | SkillDrivenRequest
830
831 // 提交异步智能视频处理任务响应
832 export interface SubmitAideoTaskAsyncResponse {
833 /** 异步智能处理任务的 ID */
834 TaskId: string
835 }
836
837 // ========== 查询任务结果请求/响应 ==========
838
839 // 获取异步智能视频处理任务结果请求
840 export interface GetAideoTaskResultRequest {
841 /** 点播空间名 */
842 SpaceName?: string
843 /** 智能视频处理任务的 ID */
844 TaskId: string
845 }
846
847 // 任务状态枚举
848 export enum AideoTaskStatus {
849 /** 处理中 */
850 Processing = 'Processing',
851 /** 处理完成 */
852 Completed = 'Completed',
853 /** 处理失败 */
854 Failed = 'Failed',
855 }
856
857 // ========== AITranslation 结果类型 ==========
858
859 // 视频文件信息
860 export interface VideoFileInfo {
861 /** 是否为音频 */
862 IsAudio: boolean
863 /** 文件存储路径 */
864 Uri: string
865 /** 文件 Vid */
866 Vid?: string
867 /** 文件时长,单位为秒 */
868 DurationSecond: number
869 /** 文件访问 URL */
870 Url: string
871 /** 文件路径 */
872 FileName: string
873 }
874
875 // AI 翻译项目状态
876 export enum AITranslationProjectStatus {
877 /** 处理中 */
878 InProcessing = 'InProcessing',
879 /** 处理暂停 */
880 ProcessSuspended = 'ProcessSuspended',
881 /** 处理完成 */
882 ProcessSucceed = 'ProcessSucceed',
883 /** 处理失败 */
884 ProcessFailed = 'ProcessFailed',
885 /** 导出中 */
886 InExporting = 'InExporting',
887 /** 导出完成 */
888 ExportSucceed = 'ExportSucceed',
889 /** 导出失败 */
890 ExportFailed = 'ExportFailed',
891 }
892
893 // AI 翻译项目信息
894 export interface AITranslationProjectInfo {
895 /** 项目状态 */
896 Status: AITranslationProjectStatus
897 /** 输出视频信息 */
898 OutputVideo?: VideoFileInfo
899 /** 语音翻译视频信息 */
900 VoiceTranslationVideo?: VideoFileInfo
901 /** 面容翻译视频信息 */
902 FacialTranslationVideo?: VideoFileInfo
903 }
904
905 // AI 翻译结果
906 export interface AITranslationResult {
907 /** 项目信息 */
908 ProjectInfo: AITranslationProjectInfo
909 }
910
911 // ========== Erase 结果类型 ==========
912
913 // 任务元信息
914 export interface ExecutionMeta {
915 /** 点播空间名称 */
916 SpaceName: string
917 /** 任务来源。取值如下:API(调用接口触发)、AutoTrigger(上传自动触发)、TranscodeStrategy(转码策略触发)、AideoAgent(Aideo Agent 触发) */
918 Trigger: 'API' | 'AutoTrigger' | 'TranscodeStrategy' | 'AideoAgent'
919 /** 任务创建时间。遵循 RFC3339 格式的东八区(UTC+8)时间,精度为秒 */
920 CreateTime: string
921 /** 任务开始时间。遵循 RFC3339 格式的东八区(UTC+8)时间,精度为秒 */
922 StartTime: string
923 /** 任务结束时间。遵循 RFC3339 格式的东八区(UTC+8)时间,精度为秒 */
924 EndTime: string
925 }
926
927 // 擦除任务输入文件信息
928 export interface EraseInput {
929 /** 输入文件类型。当前仅支持取值为 Vid,表示 Vid 模式 */
930 Type: 'Vid'
931 /** 视频 ID */
932 Vid: string
933 }
934
935 // 擦除区域像素矩形
936 export interface PixelRectangle {
937 /** 擦除区域左上角相对于视频左上角在 X 轴上的偏移,单位为像素 */
938 TopLeftX: number
939 /** 擦除区域左上角相对于视频左上角在 Y 轴上的偏移,单位为像素 */
940 TopLeftY: number
941 /** 擦除区域右下角相对于视频左上角在 X 轴上的偏移,单位为像素 */
942 BottomRightX: number
943 /** 擦除区域右下角相对于视频左上角在 Y 轴上的偏移,单位为像素 */
944 BottomRightY: number
945 }
946
947 // 擦除区域信息
948 export interface EraseArea {
949 /** 开始时间,单位为秒 */
950 Start: number
951 /** 结束时间,单位为秒 */
952 End: number
953 /** 擦除区域位置信息 */
954 PixelRectangle: PixelRectangle[]
955 }
956
957 // 擦除详细信息
958 export interface EraseInfo {
959 /** 擦除后视频的宽度,单位为像素 */
960 Width: number
961 /** 擦除后视频的高度,单位为像素 */
962 Height: number
963 /** 擦除区域信息 */
964 Areas: EraseArea[]
965 }
966
967 // 擦除文件信息
968 export interface EraseFileInfo {
969 /** 文件大小,单位为字节 */
970 Size: string
971 /** 文件路径 */
972 FileName: string
973 /** S3 转存后的视频 URL */
974 url?: string
975 }
976
977 // 字幕擦除结果
978 export interface EraseResult {
979 /** 输出视频时长,单位为秒 */
980 Duration: number
981 /** 输出文件信息 */
982 File: EraseFileInfo
983 /** 擦除详细信息。仅当提交任务时 Erase.WithEraseInfo 设为 true 时会返回该值 */
984 Info?: EraseInfo
985 }
986
987 // 擦除输出任务
988 export interface EraseOutputTask {
989 /** 任务类型 */
990 Type: 'Erase'
991 /** 字幕擦除结果 */
992 Erase: EraseResult
993 }
994
995 // 擦除输出
996 export interface EraseOutput {
997 /** 任务类型 */
998 Type: 'Task'
999 /** 单任务输出结果 */
1000 Task: EraseOutputTask
1001 }
1002
1003 // 擦除操作任务配置
1004 export interface EraseOperationTask {
1005 /** 任务类型 */
1006 Type: 'Erase'
1007 /** 精细化字幕擦除任务配置 */
1008 Erase: EraseSkillParams
1009 }
1010
1011 // 擦除操作
1012 export interface EraseOperation {
1013 /** 处理类型 */
1014 Type: 'Task'
1015 /** 单任务配置 */
1016 Task: EraseOperationTask
1017 }
1018
1019 // 字幕擦除执行结果
1020 export interface EraseExecutionResult {
1021 /** 任务元信息 */
1022 Meta: ExecutionMeta
1023 /** 任务输入文件信息 */
1024 Input: EraseInput
1025 /** 执行 ID */
1026 RunId: string
1027 /** 任务输出文件信息 */
1028 Output: EraseOutput
1029 /** 任务状态 */
1030 Status: string
1031 /** 媒体处理操作配置 */
1032 Operation: EraseOperation
1033 }
1034
1035 // ========== Highlight 结果类型 ==========
1036
1037 // 高光片段信息(Clips 模式)
1038 export interface HighlightClip {
1039 /** 高光片段开始时间,单位为秒 */
1040 Start: number
1041 /** 高光片段结束时间,单位为秒 */
1042 End: number
1043 /** 输入视频标识,编号从 0 开始 */
1044 VideoIndex: number
1045 }
1046
1047 // 自动剪辑产物信息
1048 export interface HighlightEdit {
1049 /** 文件大小,单位为字节 */
1050 Size: string
1051 /** 文件路径 */
1052 FileName: string
1053 /** 文件 Vid */
1054 Vid: string
1055 /** S3 转存后的视频 URL */
1056 url?: string
1057 }
1058
1059 // 高光片段详细信息
1060 export interface HighlightClipDetail {
1061 /** 片段类型 */
1062 Type: 'HighlightClip' | 'OpeningHook'
1063 /** 高光打分,取值范围为 [1,5] */
1064 Score: number
1065 /** 该片段在原始视频中的起始时间点,单位为秒 */
1066 Start: number
1067 /** 该片段在原始视频中的结束时间点,单位为秒 */
1068 End: number
1069 /** 输入视频标识,编号从 0 开始 */
1070 VideoIndex: number
1071 /** 该片段在最终高光混剪视频中的起始时间点,单位为秒 */
1072 CutStart: number
1073 /** 该片段在最终高光混剪视频中的结束时间点,单位为秒 */
1074 CutEnd: number
1075 }
1076
1077 // 高光片段组
1078 export interface HighlightClipGroup {
1079 /** 高光片段信息 */
1080 Clips: HighlightClipDetail[]
1081 }
1082
1083 // 视频分镜信息
1084 export interface StoryboardSegment {
1085 /** 输入视频标识,编号从 0 开始 */
1086 VideoIndex: number
1087 /** 片段开始时间,单位为秒 */
1088 Start: number
1089 /** 片段结束时间,单位为秒 */
1090 End: number
1091 /** 高光打分,取值范围为 [1,5] */
1092 Score: number
1093 /** 字幕 OCR 识别 */
1094 Ocr?: string
1095 /** 画面描述 */
1096 Description: string
1097 }
1098
1099 // 高光剪辑片段信息(StorylineCuts 模式)
1100 export interface HighlightSegment {
1101 /** 片段开始时间,单位为秒 */
1102 Start: number
1103 /** 片段结束时间,单位为秒 */
1104 End: number
1105 /** 高光值,取值范围为 [1,5] */
1106 Score: number
1107 /** 字幕 OCR 识别 */
1108 Ocr?: string
1109 /** 画面描述 */
1110 Description: string
1111 /** 地点标签 */
1112 Location: string
1113 /** 景别标签 */
1114 Shot: string
1115 /** 输入视频标识,编号从 0 开始 */
1116 VideoIndex: number
1117 }
1118
1119 // 故事线信息
1120 export interface Storyline {
1121 /** 标题 */
1122 Title: string
1123 /** 描述 */
1124 Description: string
1125 /** 高光打分,取值范围为 [1,5] */
1126 Score: number
1127 /** 片段索引信息,编号从 0 开始 */
1128 Segments: number[]
1129 }
1130
1131 // 提取的片段信息
1132 export interface CutSegment {
1133 /** 片段索引信息,编号从 0 开始 */
1134 Segments: number[]
1135 }
1136
1137 // 混剪信息
1138 export interface StorylineCuts {
1139 /** 视频片段信息 */
1140 Segments: HighlightSegment[]
1141 /** 故事线信息 */
1142 Storylines: Storyline[]
1143 /** 算法提取的最精彩片段 */
1144 CutSegments: CutSegment[]
1145 }
1146
1147 // 高光剪辑结果
1148 export interface HighlightResult {
1149 /** 输入视频总时长,单位为秒 */
1150 Duration: number
1151 /** 高光片段信息(Clips 模式) */
1152 Clips?: HighlightClip[]
1153 /** 自动剪辑产物信息 */
1154 Edits?: HighlightEdit[]
1155 /** 高光片段信息(StorylineCuts 模式) */
1156 HighlightCuts?: {
1157 /** 高光片段信息 */
1158 Cuts: HighlightClipGroup[]
1159 /** 视频分镜信息 */
1160 Storyboard: StoryboardSegment[]
1161 }
1162 /** 混剪信息 */
1163 StorylineCuts?: StorylineCuts
1164 }
1165
1166 // ========== Vision 结果类型 ==========
1167
1168 // 视频理解模型用量
1169 export interface VisionModelUsage {
1170 /** 豆包 VLM 输入令牌数量 */
1171 DoubaoInputTokens: number
1172 /** 豆包 VLM 输出令牌数量 */
1173 DoubaoOutputTokens: number
1174 /** 豆包 VLM 总计令牌数量 */
1175 DoubaoTotalTokens: number
1176 /** 豆包 LLM 输入令牌数量 */
1177 DoubaoTextInputTokens: number
1178 /** 豆包 LLM 输出令牌数量 */
1179 DoubaoTextOutputTokens: number
1180 /** 豆包 LLM 总计令牌数量 */
1181 DoubaoTextTotalTokens: number
1182 }
1183
1184 // AI 视频理解结果
1185 export interface VisionResult {
1186 /** 视频时长,单位为秒 */
1187 Duration: number
1188 /** 截图张数 */
1189 SnapshotsNumber: number
1190 /** 视频理解任务大模型用量 */
1191 Model: VisionModelUsage
1192 /** 视频理解结果 */
1193 Content: string
1194 }
1195
1196 // ========== VCreative 结果类型 ==========
1197
1198 // AI 剪辑任务状态
1199 export enum VCreativeStatus {
1200 /** 排队中 */
1201 Pending = 'pending',
1202 /** 执行中 */
1203 Start = 'start',
1204 /** 执行成功 */
1205 Success = 'success',
1206 /** 执行失败 */
1207 FailedRun = 'failed_run',
1208 /** 用户取消 */
1209 UserCanceled = 'user_canceled',
1210 /** 服务间调用失败 */
1211 FailedInvokeLambda = 'failed_invoke_lambda',
1212 }
1213
1214 // VCreative 参数 JSON
1215 export interface VCreativeParamJson {
1216 /** 输入视频。格式为 vid://<Vid> */
1217 input: string
1218 /** 输入视频所在的点播空间名称 */
1219 space_name: string
1220 /** 转绘风格。默认为"漫画风" */
1221 style?: string
1222 /** 输出视频分辨率 */
1223 resolution: '480p' | '720p' | '1080p'
1224 }
1225
1226 // VCreative 输出 JSON(成功时)- 支持新旧两种格式
1227 export interface VCreativeOutputJsonSuccess {
1228 /** 产物视频的唯一 ID(旧版本格式) */
1229 vid?: string
1230 /** S3 转存后的视频 URL */
1231 url?: string
1232 /** 新版本格式的结果对象 */
1233 Result?: {
1234 /** 产物视频的唯一 ID */
1235 Vid: string
1236 /** 视频 URI */
1237 Uri?: string
1238 /** 视频时长(秒) */
1239 Duration?: number
1240 /** S3 转存后的视频 URL */
1241 url?: string
1242 }
1243 }
1244
1245 // VCreative 输出 JSON(失败时为错误信息字符串)
1246 export type VCreativeOutputJson = VCreativeOutputJsonSuccess | string
1247
1248 // AI 剪辑结果(成功时)
1249 export interface VCreativeResultSuccess {
1250 /** AI 剪辑任务的状态 */
1251 Status: VCreativeStatus.Success
1252 /** 任务产物的上传空间 */
1253 Uploader: string
1254 /** AI 剪辑任务的参数 */
1255 ParamJson: VCreativeParamJson
1256 /** 请求 ID */
1257 RequestId: string
1258 /** 任务的输出结果 */
1259 OutputJson: VCreativeOutputJsonSuccess
1260 /** AI 剪辑任务工作流 ID */
1261 WorkflowId: string
1262 /** 自定义回调参数 */
1263 CallbackArgs?: string
1264 }
1265
1266 // AI 剪辑结果(失败时)
1267 export interface VCreativeResultFailed {
1268 /** AI 剪辑任务的状态 */
1269 Status: VCreativeStatus.FailedRun | VCreativeStatus.UserCanceled | VCreativeStatus.FailedInvokeLambda | VCreativeStatus.Pending | VCreativeStatus.Start
1270 /** 任务产物的上传空间 */
1271 Uploader: string
1272 /** AI 剪辑任务的参数 */
1273 ParamJson: VCreativeParamJson
1274 /** 请求 ID */
1275 RequestId: string
1276 /** 任务的输出结果(错误信息字符串) */
1277 OutputJson: string
1278 /** AI 剪辑任务工作流 ID */
1279 WorkflowId: string
1280 /** 自定义回调参数 */
1281 CallbackArgs?: string
1282 }
1283
1284 // AI 剪辑结果(判别联合类型)
1285 export type VCreativeResult = VCreativeResultSuccess | VCreativeResultFailed
1286
1287 // ========== ApiResponse 类型 ==========
1288
1289 // AI 视频翻译 API 响应
1290 export interface AITranslationApiResponse {
1291 /** 点播任务类型 */
1292 VodTaskType: SkillType.AITranslation
1293 /** 点播任务状态 */
1294 Status: string
1295 /** AI 视频翻译项目 ID */
1296 ProjectId: string
1297 /** AI 视频翻译项目版本 */
1298 ProjectVersion: string
1299 /** AI 视频翻译结果 */
1300 AITranslation: AITranslationResult
1301 /** 错误信息 */
1302 Error?: {
1303 Code: string
1304 Message: string
1305 }
1306 }
1307
1308 // AI 字幕擦除 API 响应
1309 export interface EraseApiResponse {
1310 /** 点播任务类型 */
1311 VodTaskType: SkillType.Erase
1312 /** 点播任务状态 */
1313 Status: string
1314 /** 视频处理任务 ID */
1315 RunId: string
1316 /** AI 字幕擦除任务执行结果 */
1317 Erase?: EraseExecutionResult
1318 /** 错误信息 */
1319 Error?: {
1320 Code: string
1321 Message: string
1322 }
1323 }
1324
1325 // AI 高光剪辑 API 响应
1326 export interface HighlightApiResponse {
1327 /** 点播任务类型 */
1328 VodTaskType: SkillType.Highlight
1329 /** 点播任务状态 */
1330 Status: string
1331 /** 视频处理任务 ID */
1332 RunId: string
1333 /** AI 高光剪辑任务结果 */
1334 Highlight?: HighlightResult
1335 /** 错误信息 */
1336 Error?: {
1337 Code: string
1338 Message: string
1339 }
1340 }
1341
1342 // AI 视频理解 API 响应
1343 export interface VisionApiResponse {
1344 /** 点播任务类型 */
1345 VodTaskType: SkillType.Vision
1346 /** 点播任务状态 */
1347 Status: string
1348 /** 视频处理任务 ID */
1349 RunId: string
1350 /** AI 视频理解任务结果 */
1351 Vision?: VisionResult
1352 /** 错误信息 */
1353 Error?: {
1354 Code: string
1355 Message: string
1356 }
1357 }
1358
1359 // AI 剪辑 API 响应
1360 export interface VCreativeApiResponse {
1361 /** 点播任务类型 */
1362 VodTaskType: SkillType.VCreative
1363 /** 点播任务状态 */
1364 Status: string
1365 /** AI 剪辑任务 ID */
1366 VCreativeId: string
1367 /** AI 剪辑任务结果 */
1368 VCreative?: VCreativeResult
1369 /** 错误信息 */
1370 Error?: {
1371 Code: string
1372 Message: string
1373 }
1374 }
1375
1376 // API 响应项(联合类型)
1377 export type ApiResponse
1378 = AITranslationApiResponse
1379 | EraseApiResponse
1380 | HighlightApiResponse
1381 | VisionApiResponse
1382 | VCreativeApiResponse
1383
1384 // ========== AsyncVCreativeTask 接口定义 ==========
1385
1386 // 提交 AI 漫剧转绘任务请求
1387 export interface AsyncVCreativeTaskRequest {
1388 /** 场景类型,漫剧转绘固定为 videostyletrans */
1389 Scene: 'videostyletrans'
1390 /** 任务产物要上传到的点播空间名称 */
1391 Uploader: string
1392 /** 任务参数对象(根据官方文档,应该是对象而不是字符串) */
1393 ParamObj: AsyncVCreativeTaskParamObj | string
1394 }
1395
1396 // AsyncVCreativeTask 参数对象(ParamObj 的内容)
1397 export interface AsyncVCreativeTaskParamObj {
1398 /** 输入视频,格式为 vid://<Vid> */
1399 input: string
1400 /** 输入视频所在的点播空间名称 */
1401 space_name: string
1402 /** 转绘风格,例如:"漫画风"、"3D卡通风格"、"日漫风格" */
1403 style?: string
1404 /** 输出视频分辨率:480p、720p、1080p */
1405 resolution: '480p' | '720p' | '1080p'
1406 }
1407
1408 // 提交 AI 漫剧转绘任务响应
1409 export interface AsyncVCreativeTaskResponse {
1410 /** AI 漫剧转绘任务的唯一标识 */
1411 VCreativeId: string
1412 }
1413
1414 // 获取 AI 漫剧转绘任务结果请求
1415 export interface GetVCreativeTaskResultRequest {
1416 /** AI 漫剧转绘任务的 ID */
1417 VCreativeId: string
1418 }
1419
1420 // AI 漫剧转绘任务状态
1421 export enum VCreativeTaskStatus {
1422 /** 处理中 */
1423 Processing = 'processing',
1424 /** 成功 */
1425 Success = 'success',
1426 /** 失败 */
1427 FailedRun = 'failed_run',
1428 }
1429
1430 // 获取 AI 漫剧转绘任务结果响应(成功时)
1431 export interface GetVCreativeTaskResultSuccessResponse {
1432 /** 任务状态 */
1433 Status: VCreativeTaskStatus.Success
1434 /** 输出结果 JSON 字符串 */
1435 OutputJson: string // 解析后为 { vid: string }
1436 /** 场景类型 */
1437 Scene: string
1438 /** 其他字段... */
1439 [key: string]: any
1440 }
1441
1442 // 获取 AI 漫剧转绘任务结果响应(失败时)
1443 export interface GetVCreativeTaskResultFailedResponse {
1444 /** 任务状态 */
1445 Status: VCreativeTaskStatus.FailedRun
1446 /** 错误信息 JSON 字符串 */
1447 OutputJson: string
1448 /** 场景类型 */
1449 Scene: string
1450 /** 其他字段... */
1451 [key: string]: any
1452 }
1453
1454 // 获取 AI 漫剧转绘任务结果响应(处理中)
1455 export interface GetVCreativeTaskResultProcessingResponse {
1456 /** 任务状态 */
1457 Status: VCreativeTaskStatus.Processing
1458 /** 场景类型 */
1459 Scene: string
1460 /** 其他字段... */
1461 [key: string]: any
1462 }
1463
1464 // 获取 AI 漫剧转绘任务结果响应(联合类型)
1465 export type GetVCreativeTaskResultResponse
1466 = | GetVCreativeTaskResultSuccessResponse
1467 | GetVCreativeTaskResultFailedResponse
1468 | GetVCreativeTaskResultProcessingResponse
1469
1470 // ========== DirectEdit (视频剪辑) 接口定义 ==========
1471
1472 // 视频源类型
1473 export enum VideoSourceType {
1474 /** 使用 VID (视频点播 ID) */
1475 VID = 'VID',
1476 /** 使用 URL (视频 URL) */
1477 URL = 'URL',
1478 }
1479
1480 // 剪辑操作类型
1481 export enum DirectEditOperationType {
1482 /** 裁剪 */
1483 Crop = 'Crop',
1484 /** 添加文字 */
1485 Text = 'Text',
1486 /** 添加贴纸 */
1487 Sticker = 'Sticker',
1488 /** 添加音效 */
1489 Audio = 'Audio',
1490 /** 添加滤镜 */
1491 Filter = 'Filter',
1492 /** 视频拼接 */
1493 Concat = 'Concat',
1494 /** 视频旋转 */
1495 Rotate = 'Rotate',
1496 /** 视频变速 */
1497 Speed = 'Speed',
1498 /** 视频动画 */
1499 Animation = 'Animation',
1500 /** 转场特效 */
1501 Transition = 'Transition',
1502 /** 特效 */
1503 Effect = 'Effect',
1504 /** 花字 */
1505 FancyText = 'FancyText',
1506 /** 文字动画 */
1507 TextAnimation = 'TextAnimation',
1508 /** 字幕 */
1509 Subtitle = 'Subtitle',
1510 }
1511
1512 // 裁剪参数
1513 export interface CropParams {
1514 /** 起始时间,单位为秒 */
1515 StartTime: number
1516 /** 结束时间,单位为秒 */
1517 EndTime: number
1518 }
1519
1520 // 文字参数
1521 export interface TextParams {
1522 /** 文字内容 */
1523 Content: string
1524 /** X 坐标 */
1525 X: number
1526 /** Y 坐标 */
1527 Y: number
1528 /** 字体大小 */
1529 FontSize?: number
1530 /** 字体颜色 (hex 格式, 如 #FFFFFF) */
1531 FontColor?: string
1532 /** 开始时间,单位为秒 */
1533 StartTime: number
1534 /** 结束时间,单位为秒 */
1535 EndTime: number
1536 }
1537
1538 // 贴纸参数
1539 export interface StickerParams {
1540 /** 贴纸 URL 或素材 ID */
1541 StickerUrl: string
1542 /** X 坐标 */
1543 X: number
1544 /** Y 坐标 */
1545 Y: number
1546 /** 宽度 */
1547 Width?: number
1548 /** 高度 */
1549 Height?: number
1550 /** 开始时间,单位为秒 */
1551 StartTime: number
1552 /** 结束时间,单位为秒 */
1553 EndTime: number
1554 }
1555
1556 // 音频参数
1557 export interface AudioParams {
1558 /** 音频 URL 或 VID */
1559 AudioUrl: string
1560 /** 音量,0-100 */
1561 Volume?: number
1562 /** 开始时间,单位为秒 */
1563 StartTime: number
1564 /** 结束时间,单位为秒 */
1565 EndTime: number
1566 }
1567
1568 // 滤镜参数
1569 export interface FilterParams {
1570 /** 滤镜类型 */
1571 FilterType: string
1572 /** 滤镜强度,0-100 */
1573 Intensity?: number
1574 /** 开始时间,单位为秒 */
1575 StartTime: number
1576 /** 结束时间,单位为秒 */
1577 EndTime: number
1578 }
1579
1580 // 视频拼接参数
1581 export interface ConcatParams {
1582 /** 要拼接的视频列表 */
1583 Videos: Array<{
1584 /** 视频源类型 */
1585 Type: VideoSourceType
1586 /** 视频 VID 或 URL */
1587 Source: string
1588 }>
1589 }
1590
1591 // 视频旋转参数
1592 export interface RotateParams {
1593 /** 旋转角度(0-360度) */
1594 Angle: number
1595 }
1596
1597 // 视频变速参数
1598 export interface SpeedParams {
1599 /** 播放速率(0.5 = 0.5倍速,2 = 2倍速) */
1600 Speed: number
1601 /** 开始时间,单位为秒 */
1602 StartTime: number
1603 /** 结束时间,单位为秒 */
1604 EndTime: number
1605 }
1606
1607 // 视频动画参数
1608 export interface AnimationParams {
1609 /** 动画ID */
1610 AnimationId: string
1611 /** 动画类型:入场(in) / 出场(out) */
1612 AnimationType: 'in' | 'out'
1613 /** 动画持续时间,单位为秒 */
1614 Duration?: number
1615 }
1616
1617 // 转场特效参数
1618 export interface TransitionParams {
1619 /** 转场ID */
1620 TransitionId: string
1621 /** 转场持续时间,单位为秒 */
1622 Duration: number
1623 /** 转场开始时间,单位为秒 */
1624 StartTime: number
1625 }
1626
1627 // 特效参数
1628 export interface EffectParams {
1629 /** 特效ID */
1630 EffectId: string
1631 /** 开始时间,单位为秒 */
1632 StartTime: number
1633 /** 结束时间,单位为秒 */
1634 EndTime: number
1635 /** 特效强度,0-100 */
1636 Intensity?: number
1637 }
1638
1639 // 花字参数
1640 export interface FancyTextParams {
1641 /** 文字内容 */
1642 Content: string
1643 /** 花字ID */
1644 FancyTextId: string
1645 /** X 坐标 */
1646 X: number
1647 /** Y 坐标 */
1648 Y: number
1649 /** 字体大小 */
1650 FontSize?: number
1651 /** 开始时间,单位为秒 */
1652 StartTime: number
1653 /** 结束时间,单位为秒 */
1654 EndTime: number
1655 }
1656
1657 // 文字动画参数
1658 export interface TextAnimationParams {
1659 /** 文字内容 */
1660 Content: string
1661 /** 文字动画ID */
1662 AnimationId: string
1663 /** 动画类型:入场(in) / 出场(out) / 循环(loop) */
1664 AnimationType: 'in' | 'out' | 'loop'
1665 /** X 坐标 */
1666 X: number
1667 /** Y 坐标 */
1668 Y: number
1669 /** 字体大小 */
1670 FontSize?: number
1671 /** 字体颜色 (hex 格式, 如 #FFFFFF) */
1672 FontColor?: string
1673 /** 开始时间,单位为秒 */
1674 StartTime: number
1675 /** 结束时间,单位为秒 */
1676 EndTime: number
1677 }
1678
1679 // 字幕参数
1680 export interface SubtitleParams {
1681 /** 字幕文件 URL(支持 SRT/WebVTT/ASS 格式) */
1682 SubtitleUrl: string
1683 /** 字体ID */
1684 FontId?: string
1685 /** 字体大小 */
1686 FontSize?: number
1687 /** 字体颜色 (hex 格式, 如 #FFFFFF) */
1688 FontColor?: string
1689 /** 字幕位置:top / center / bottom */
1690 Position?: 'top' | 'center' | 'bottom'
1691 }
1692
1693 // 剪辑操作
1694 export interface DirectEditOperation {
1695 /** 操作类型 */
1696 Type: DirectEditOperationType
1697 /** 裁剪参数 */
1698 Crop?: CropParams
1699 /** 文字参数 */
1700 Text?: TextParams
1701 /** 贴纸参数 */
1702 Sticker?: StickerParams
1703 /** 音频参数 */
1704 Audio?: AudioParams
1705 /** 滤镜参数 */
1706 Filter?: FilterParams
1707 /** 拼接参数 */
1708 Concat?: ConcatParams
1709 /** 旋转参数 */
1710 Rotate?: RotateParams
1711 /** 变速参数 */
1712 Speed?: SpeedParams
1713 /** 动画参数 */
1714 Animation?: AnimationParams
1715 /** 转场参数 */
1716 Transition?: TransitionParams
1717 /** 特效参数 */
1718 Effect?: EffectParams
1719 /** 花字参数 */
1720 FancyText?: FancyTextParams
1721 /** 文字动画参数 */
1722 TextAnimation?: TextAnimationParams
1723 /** 字幕参数 */
1724 Subtitle?: SubtitleParams
1725 }
1726
1727 // ========== 正确的火山引擎视频剪辑参数结构(基于 Track 轨道) ==========
1728
1729 // 画布参数
1730 export interface CanvasParam {
1731 /** 画布宽度(像素) */
1732 Width: number
1733 /** 画布高度(像素) */
1734 Height: number
1735 }
1736
1737 // 编解码参数
1738 export interface CodecParam {
1739 /** 视频编码格式,如 h264、h265 */
1740 VideoCodec?: string
1741 /** 音频编码格式,如 aac */
1742 AudioCodec?: string
1743 /** 视频码率(kbps) */
1744 VideoBitrate?: number
1745 /** 音频码率(kbps) */
1746 AudioBitrate?: number
1747 /** CRF 值(0-51),数值越小质量越高 */
1748 Crf?: number
1749 /** 编码速度预设:ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow */
1750 Preset?: string
1751 }
1752
1753 // 输出参数
1754 export interface OutputParam {
1755 /** 是否禁用视频 */
1756 DisableVideo?: boolean
1757 /** 是否禁用音频 */
1758 DisableAudio?: boolean
1759 /** 输出帧率 */
1760 Fps?: number
1761 /** 是否包含 Alpha 通道 */
1762 Alpha?: boolean
1763 /** 编解码参数 */
1764 Codec?: CodecParam
1765 }
1766
1767 // 轨道元素(视频、音频、文字、贴纸等)
1768 // Filter 类型定义
1769 export interface BaseFilter {
1770 /** Filter 类型 */
1771 Type: string
1772 }
1773
1774 // TransformFilter - 2D 变换(位置、大小、旋转等)
1775 export interface TransformFilter extends BaseFilter {
1776 Type: 'transform'
1777 /** X 轴位移(像素) */
1778 PosX: number
1779 /** Y 轴位移(像素) */
1780 PosY: number
1781 /** 宽度(像素) */
1782 Width: number
1783 /** 高度(像素) */
1784 Height: number
1785 /** 旋转角度 [-360, 360],顺时针为正 */
1786 Rotation?: number
1787 /** 水平镜像翻转 */
1788 FlipX?: boolean
1789 /** 垂直镜像翻转 */
1790 FlipY?: boolean
1791 /** 透明度 [0,1],0为透明 */
1792 Alpha?: number
1793 }
1794
1795 // LutFilter - 调色滤镜
1796 export interface LutFilter extends BaseFilter {
1797 Type: 'lut_filter'
1798 /** Filter 在 Element 中的时间范围 [startMs, endMs] */
1799 TargetTime: [number, number]
1800 /** 滤镜 ID */
1801 Source: string
1802 /** 滤镜强度 [0,1] */
1803 Intensity?: number
1804 }
1805
1806 // EffectFilter - 视觉特效
1807 export interface EffectFilter extends BaseFilter {
1808 Type: 'effect_filter'
1809 /** Filter 在 Element 中的时间范围 [startMs, endMs] */
1810 TargetTime: [number, number]
1811 /** 特效 ID */
1812 Source: string
1813 }
1814
1815 // TransitionFilter - 转场
1816 export interface TransitionFilter extends BaseFilter {
1817 Type: 'transition'
1818 /** 转场 ID */
1819 Source: string
1820 /** 转场时长(毫秒) */
1821 Duration: number
1822 }
1823
1824 // SpeedFilter - 倍速
1825 export interface SpeedFilter extends BaseFilter {
1826 Type: 'speed'
1827 /** 播放速度 [0.1, 4] */
1828 Speed: number
1829 }
1830
1831 // TrimFilter - 时间截取
1832 export interface TrimFilter extends BaseFilter {
1833 Type: 'trim'
1834 /** 截取开始时间(毫秒) */
1835 StartTime: number
1836 /** 截取结束时间(毫秒) */
1837 EndTime: number
1838 }
1839
1840 // VideoAnimationsFilter - 视频动画
1841 export interface VideoAnimationsFilter extends BaseFilter {
1842 Type: 'video_animation'
1843 /** 视频动画 ID */
1844 AnimRes: string
1845 /** 动画开始时间(毫秒) */
1846 AnimStartTime: number
1847 /** 动画结束时间(毫秒) */
1848 AnimEndTime: number
1849 /** 是否循环 */
1850 AnimLoop?: boolean
1851 /** 循环动画时长(毫秒) */
1852 AnimLoopDuration?: number
1853 }
1854
1855 // TextAnimationsFilter - 文字动画
1856 export interface TextAnimationsFilter extends BaseFilter {
1857 Type: 'text_animation'
1858 /** 入场动画 ID */
1859 AnimInRes?: string
1860 /** 入场动画时长(毫秒) */
1861 AnimInDuration?: number
1862 /** 出场动画 ID */
1863 AnimOutRes?: string
1864 /** 出场动画时长(毫秒) */
1865 AnimOutDuration?: number
1866 /** 循环动画 ID */
1867 AnimLoopRes?: string
1868 /** 循环动画时长(毫秒) */
1869 AnimLoopDuration?: number
1870 }
1871
1872 // AudioVolumeFilter - 音量调节
1873 export interface AudioVolumeFilter extends BaseFilter {
1874 Type: 'a_volume'
1875 /** 音量,0 为静音,1 为默认 */
1876 Volume: number
1877 }
1878
1879 // Filter 联合类型
1880 export type Filter
1881 = | TransformFilter
1882 | LutFilter
1883 | EffectFilter
1884 | TransitionFilter
1885 | SpeedFilter
1886 | TrimFilter
1887 | VideoAnimationsFilter
1888 | TextAnimationsFilter
1889 | AudioVolumeFilter
1890
1891 export interface TrackElement {
1892 /** 元素类型:video、audio、text、image、subtitle 等 */
1893 Type: string
1894 /** 视频/音频源:vid://xxx 或 URL */
1895 Source?: string
1896 /** 目标时间范围 [startMs, endMs],单位毫秒 */
1897 TargetTime?: [number, number]
1898 /** 源时间范围 [startMs, endMs],单位毫秒 */
1899 SourceTime?: [number, number]
1900 /** X 坐标(像素) */
1901 X?: number
1902 /** Y 坐标(像素) */
1903 Y?: number
1904 /** 宽度(像素) */
1905 Width?: number
1906 /** 高度(像素) */
1907 Height?: number
1908 /** 文字内容 */
1909 Text?: string
1910 /** 字体大小 */
1911 FontSize?: number
1912 /** 字体颜色(hex 格式) */
1913 FontColor?: string
1914 /** 音量(0-100) */
1915 Volume?: number
1916 /** 花字ID */
1917 FancyTextID?: string
1918 /** 字体ID */
1919 FontID?: string
1920 /** 字幕位置 */
1921 Position?: string
1922
1923 /** 拓展资源 - 用于添加各种 Filter 效果 */
1924 Extra?: Filter[]
1925
1926 /** 其他参数 */
1927 [key: string]: unknown
1928 }
1929
1930 // 上传参数
1931 export interface UploadParam {
1932 /** 上传到的点播空间名 */
1933 SpaceName: string
1934 /** 视频文件名 */
1935 VideoName?: string
1936 /** 文件路径和名称 */
1937 FileName?: string
1938 }
1939
1940 // 火山引擎标准剪辑参数(基于 Track 轨道)
1941 export interface DirectEditParam {
1942 /** 画布参数 */
1943 Canvas?: CanvasParam
1944 /** 输出参数 */
1945 Output?: OutputParam
1946 /** 轨道列表,每个轨道是一个元素数组 */
1947 Track?: TrackElement[][]
1948 /** 上传参数 */
1949 Upload?: UploadParam
1950 /** 上传空间(废弃,使用 Upload.SpaceName) */
1951 Uploader?: string
1952 }
1953
1954 // ========== 简化的操作接口(用于 MCP,内部转换为 Track 结构) ==========
1955
1956 // 保留原有的简化操作接口,用于 MCP 层
1957 export interface SimpleDirectEditParam {
1958 /** 视频源类型 */
1959 VideoSourceType: VideoSourceType
1960 /** 视频源 (VID 或 URL) */
1961 VideoSource: string
1962 /** 输出宽度 */
1963 Width?: number
1964 /** 输出高度 */
1965 Height?: number
1966 /** 输出码率 (kbps) */
1967 Bitrate?: number
1968 /** 输出帧率 */
1969 FrameRate?: number
1970 /** 剪辑操作列表 */
1971 Operations: DirectEditOperation[]
1972 }
1973
1974 // 剪辑任务应用类型
1975 export enum DirectEditApplicationType {
1976 /** 普通视频剪辑场景 */
1977 VideoTrackToB = 'VideoTrackToB',
1978 /** 短剧高光剪辑场景 */
1979 VideoTrackHighlight = 'VideoTrackHighlight',
1980 }
1981
1982 // 提交异步剪辑任务请求
1983 export interface SubmitDirectEditTaskAsyncRequest {
1984 /** 点播空间名 */
1985 SpaceName?: string
1986 /** 任务产物要上传到的点播空间名称 */
1987 Uploader?: string
1988 /** 剪辑任务类型:VideoTrackToB(普通视频剪辑)或 VideoTrackHighlight(短剧高光剪辑) */
1989 Application: DirectEditApplicationType | string
1990 /** 剪辑参数 */
1991 EditParam: DirectEditParam
1992 /** 优先级,范围 0-9,数字越大优先级越高 */
1993 Priority?: number
1994 /** 回调地址 */
1995 CallbackUrl?: string
1996 /** 自定义字段,将在视频剪辑完成事件中透传返回,长度限制为 64 KB */
1997 CallbackArgs?: string
1998 }
1999
2000 // 提交异步剪辑任务响应
2001 export interface SubmitDirectEditTaskAsyncResponse {
2002 /** 剪辑任务 ID(API 返回字段名为 ReqId) */
2003 ReqId: string
2004 }
2005
2006 // 剪辑任务状态
2007 export enum DirectEditTaskStatus {
2008 /** 处理中 */
2009 Processing = 'Processing',
2010 /** 处理完成 */
2011 Completed = 'Completed',
2012 /** 处理失败 */
2013 Failed = 'Failed',
2014 }
2015
2016 // 获取剪辑任务结果请求
2017 export interface GetDirectEditResultRequest {
2018 /** 任务 ID 列表(提交任务时返回的 ReqId),数组类型,数量不可超过 30 个 */
2019 ReqIds: string[]
2020 }
2021
2022 // 获取剪辑任务结果响应(单个任务信息)
2023 export interface GetDirectEditResultItem {
2024 /** 任务 ID */
2025 TaskId: string
2026 /** 请求 ID */
2027 ReqId: string
2028 /** 剪辑任务类型 */
2029 Application: string
2030 /** 任务状态:pending, start, processing, success, failed, failed_run, user_canceled */
2031 Status: string
2032 /** 任务信息/错误信息 */
2033 Message?: string
2034 /** 任务 ID 列表 */
2035 TaskList?: string
2036 /** 输出视频 VID */
2037 OutputVid?: string
2038 /** 输出视频 URL */
2039 OutputUrl?: string
2040 /** 任务创建时间 */
2041 CreateAt?: string
2042 /** 任务完成时间 */
2043 FinishAt?: string
2044 /** 输出产物上传的空间名 */
2045 Uploader?: string
2046 /** 优先级 */
2047 Priority?: number
2048 /** 回调地址 */
2049 CallbackUri?: string
2050 /** 自定义字段 */
2051 CallbackArgs?: string
2052 /** 剪辑参数 */
2053 EditParam?: DirectEditParam
2054 }
2055
2056 // 获取剪辑任务结果响应(API 返回数组)
2057 export interface GetDirectEditResultResponse extends Array<GetDirectEditResultItem> {}
2058
2059 // ========== GetAideoTaskResultResponse 类型 ==========
2060
2061 // 获取异步智能视频处理任务结果响应
2062 export interface GetAideoTaskResultResponse {
2063 /** 智能视频处理任务的 ID */
2064 TaskId: string
2065 /** Aideo Agent 任务状态 */
2066 Status: AideoTaskStatus
2067 /** 提交任务时使用的 AI 技能类型 */
2068 SkillType?: SkillType
2069 /** 提交任务时传入的输入文件信息 */
2070 MultiInputs: MultiInput[]
2071 /** 提交任务时传入的 SkillParams 字符串 */
2072 SkillParams: string
2073 /** 智能视频处理任务执行结果 */
2074 ApiResponses: ApiResponse[]
2075 }
2076
2077 // ========== 批量上传结果类型 ==========
2078
2079 // 单个上传成功结果
2080 export interface UploadSuccess {
2081 success: true
2082 vid: string
2083 url: string
2084 index: number
2085 }
2086
2087 // 单个上传失败结果
2088 export interface UploadFailure {
2089 success: false
2090 url: string
2091 index: number
2092 error: string
2093 }
2094
2095 // 上传结果联合类型
2096 export type UploadResult = UploadSuccess | UploadFailure
2097
2098 // ========== 短剧解说相关接口 ==========
2099
2100 // 短剧解说配置
2101 export interface DramaRecapConfig {
2102
2103 /** 是否由 AI 自动生成解说词。true:系统将根据视频内容自动创作解说文案,此时不能设置 RecapText;false(默认):使用您提供的文案,此时 RecapText 为必填 */
2104 AutoGenerateRecapText?: boolean
2105 /** AI 生成解说词的风格指令 */
2106 RecapStyle?: string
2107 /** 期望的解说词语速,范围 [0.5, 2.0] */
2108 RecapTextSpeed?: number
2109 /** 期望 AI 生成的解说词长度,最大 5000 */
2110 RecapTextLength?: number
2111 /** AI 配音时句间停顿的时长,单位毫秒,范围 [1, 1000] */
2112 PauseTime?: number
2113 /** 是否允许解说词匹配重复的视频画面 */
2114 AllowRepeatMatch?: boolean
2115 }
2116
2117 // 创建短剧解说任务请求
2118 export interface CreateDramaRecapTaskRequest {
2119 /** 空间名 */
2120 SpaceName: string
2121 /** 视频 VID 列表 */
2122 Vids: string[]
2123 /** 剧本还原任务 ID(可选,如果没有则自动执行剧本还原) */
2124 DramaScriptTaskId?: string
2125 /** 自定义解说词(可选) */
2126 RecapText?: string
2127 /** 短剧解说配置 */
2128 DramaRecapConfig: DramaRecapConfig
2129 /** 说话人配置 */
2130 SpeakerConfig?: {
2131 /** 应用 ID */
2132 AppId: string
2133 /** 集群 */
2134 Cluster: string
2135 /** 音色类型 */
2136 VoiceType: string
2137 }
2138 /** 是否擦除字幕,默认 true */
2139 IsEraseSubtitle?: boolean
2140 /** 字体配置 */
2141 FontConfig?: {
2142 /** 字体颜色,格式为 #RRGGBB */
2143 Color?: string
2144 /** 字体大小 */
2145 Size?: number
2146 /** 字体名称 */
2147 Name?: string
2148 }
2149 }
2150
2151 // 创建短剧解说任务响应
2152 export interface CreateDramaRecapTaskResponse {
2153 /** 解说视频生成任务 ID */
2154 TaskId: string
2155 /** 剧本还原任务 ID */
2156 DramaScriptTaskId: string
2157 }
2158
2159 // 查询短剧解说任务结果请求
2160 export interface QueryDramaRecapTaskRequest {
2161 /** 任务 ID */
2162 TaskId: string
2163 /** 空间名 */
2164 SpaceName: string
2165 }
2166
2167 // 短剧解说任务状态枚举
2168 export enum DramaRecapTaskStatus {
2169 /** 处理中 */
2170 Processing = 'running',
2171 /** 处理完成 */
2172 Completed = 'success',
2173 /** 处理失败 */
2174 Failed = 'failed',
2175 }
2176
2177 // 查询短剧解说任务结果响应
2178 export interface QueryDramaRecapTaskResponse {
2179 /** 任务 ID */
2180 TaskId: string
2181 /** 任务状态 */
2182 Status: DramaRecapTaskStatus
2183 /** 输出视频 VID */
2184 Vid?: string
2185 /** 输出视频 URL */
2186 OutputUrl?: string
2187 /** 任务创建时间 */
2188 CreateAt?: string
2189 /** 任务完成时间 */
2190 FinishAt?: string
2191 /** 错误信息 */
2192 ErrorMessage?: string
2193 }
2194
2194 lines TYPESCRIPT