通过初始化配置接入视频剪辑Web SDK

PlayerAspectRatio

enum PlayerAspectRatio {

w1h1 = '1:1',

w2h1 = '2:1',

w4h3 = '4:3',

w3h4 = '3:4',

w9h16 = '9:16',

w16h9 = '16:9',

w21h9 = '21:9',

}VoiceConfig

interface VoiceConfig {

volume: number; // 音量,取值0~100,默认值50

speech_rate: number; // 语速,取值范围:-500~500,默认值:0

pitch_rate: number; // 语调,取值范围:-500~500,默认值:0

format?: string; // 输出文件格式,支持:PCM/WAV/MP3

}InputMedia

type InputMedia = (InputVideo | InputAudio | InputImage)

interface InputSource {

sourceState?: 'ready' | 'loading' | 'fail';

}

type MediaIdType = 'mediaId' | 'mediaURL';

interface SpriteConfig {

num: string;

lines: string;

cols: string;

cellWidth?: string;

cellHeight?: string;

}

interface MediaMark {

startTime: number;

endTime: number;

content: string;

}

interface InputVideo extends InputSource {

mediaId: string;

mediaIdType?: MediaIdType;

mediaType: 'video';

video: {

title: string;

coverUrl?: string;

duration: number;

format?: string;

src?: string;

snapshots?: string[];

sprites?: string[];

spriteConfig?: SpriteConfig;

width?: number;

height?: number;

rotate?: number;

bitrate?: number;

fps?: number;

hasTranscodedAudio?: true;

agentAudioSrc?: string;

marks?: MediaMark[];

codec?: string;

};

}

interface InputAudio extends InputSource {

mediaId: string;

mediaIdType?: MediaIdType;

mediaType: 'audio';

audio: {

title: string;

duration: number;

coverUrl?: string;

src?: string;

marks?: MediaMark[];

formatNames?: string[];

};

}

interface InputImage extends InputSource {

mediaId: string;

mediaIdType?: MediaIdType;

mediaType: 'image';

image: {

title: string;

coverUrl?: string;

src?: string;

width?: number;

height?: number;

rotate?: number;

};

}

type TimelineMaterial = { mediaIdType: MediaIdType; mediaId: string; mediaType: MediaType };MediaMark

interface MediaMark {

startTime: number;

endTime: number;

content: string;

}ASRResult

interface ASRResult {

content: string; // 字幕的内容

from: number; // 字幕的开始相对于识别素材的开始的时间偏移量

to: number; // 字幕的结束相对于识别素材的开始的时间偏移量

}StickerCategory

interface StickerCategory {

id: string; // 分类的 id

name: string; // 分类的名称,调用者自行切换语言

}StickerResponse

interface Sticker {

mediaId: string;

src: string;

}

interface StickerResponse {

total: number;

stickers: Sticker[];

}IProduceRecommend

interface IProduceRecommend {

width?: number;

height?: number;

bitrate?: number;

}CustomFontItem

interface CustomFontItem {

key: string; // 字体唯一标识

name?: string; // 展示的名字,没有用key

url: string; // 字体地址

// 用于前、后端字体渲染保持一致,页面文字渲染大小是您设置的字体大小乘以这个倍数

fontServerScale?: {

// 普通字幕字体倍数

common: number;

// 花字字体倍数

decorated: number;

};

}VoiceGroup

export interface VoiceGroup {

type: string; // 分类

category:string; // 主分类

voiceList?: Voice[];

emptyContent?: {

description: string;

linkText: string;

link: string;

};

getVoiceList?: (page: number, pageSize: number) => Promise<{ items: Voice[]; total: number }>;

getVoice?: (voiceId: string) => Promise;

getDemo?: (mediaId: string) => Promise<{ src: string }>;

}Voice

export interface Voice {

voiceUrl?: string; // 示例音频地址

demoMediaId?: string; // 示例音频的播放地址

voiceType: VoiceType; // 类型

voice: string; // 人声 key

name: string; // “人名”

desc: string; // 简介

tag?: string; // 标签

remark?: string; // 备注支持的语言等信息

custom?: boolean; // 是否专属人声

}VoiceType

enum VoiceType {

Male = 'Male', // 男声

Female = 'Female', // 女声

Boy = 'Boy', // 男孩童声

Girl = 'Girl', // 女孩童声

}AvatarConfig

// 数字人配置说明

interface AvatarConfig {

// 数字人列表

getAvatarList: () => DigitalHumanList[];

// 提交数字人任务

submitAvatarVideoJob: (

job: DigitalHumanJob,

) => Promise;

// 获取数字人任务结果

getAvatarVideoJob: (jobId: string) => Promise;

// 任务轮询时间

refreshInterval: number;

// 数字人输出视频配置

outputConfigs: Array<{

width: number;

height: number;

bitrates: number[];

}>;

filterOutputConfig?: (

item: DigitalHuman,

config: Array<{

width: number;

height: number;

bitrates: number[];

}>,

) => Array<{

width: number;

height: number;

bitrates: number[];

}>;

}

// 数字人详细类型说明

// 数字人参数

interface DigitalHuman {

avatarId: string; // 数字人ID

avatarName: string; // 数字人名称

coverUrl: string; // 数字人封面

videoUrl?: string; // 数字人视频demo地址

outputMask?: boolean; // 是否输出遮罩

transparent?: boolean; // 是否背景透明

}

// 数字人列表

interface DigitalHumanList {

default: boolean;

id: string;

name: string;

getItems: (pageNo: number, pageSize: number) => Promise<{ total: number; items: DigitalHuman[] }>;

}

// 数字人提交任务返回的信息

interface DigitalHumanJobInfo {

jobId: string;

mediaId: string;

}

// 数字人任务参数类型

type DigitalHumanJobParamTypes = {

text: {//文字驱动

text?: string;

params?: DigitalHumanTextParams;

output?: DigitalHumanOutputParams;

};

audio: {//音频文件驱动

mediaId?: string;

params?: DigitalHumanAudioParams;

output?: DigitalHumanOutputParams;

};

};

// text|audio

type DigitalHumanJobType = keyof DigitalHumanJobParamTypes;

// 数字人文字驱动任务参数

type DigitalHumanTextParams = {

voice: string;

volume: number;

speechRate: number;

pitchRate: number;

autoASRJob?: boolean;

};

// 数字人音频文件驱动任务参数

type DigitalHumanAudioParams = {

title: string;

autoASRJob?: boolean;

};

// 数字人输出视频其他参数

type DigitalHumanOutputParams = {

bitrate: number;

width: number;

height: number;

};

// 生成数字人字幕切片类型

type SubtitleClip = { from: number; to: number; content: string };

// 数字人任务运行轮询结果

interface DigitalHumanJobResult {

jobId: string;

mediaId: string;

done: boolean;

errorMessage?: string;

job?: DigitalHumanJob;

video?: InputVideo;

subtitleClips?: SubtitleClip[];

}

// 数字人任务

type DigitalHumanJob = {

type: T;

title: string;

avatar: DigitalHuman;

data: DigitalHumanJobParamTypes[T];

};

// 数字人生成视频

interface InputVideo {

mediaId: string;

mediaType: 'video';

video: {

title: string;

coverUrl?: string;

duration: number;

src?: string; // 当 useDynamicUrl 为 true 时,src 可以不传

snapshots?: string[];

sprites?: string[];

spriteConfig?: SpriteConfig;//精灵图

width?: number; // 视频源的宽度

height?: number; // 视频源的高度

rotate?: number; // 视频源的旋转角度

bitrate?: number; // 视频源的码率

fps?: number; // 视频源的帧率

hasTranscodedAudio?: true; // 是否含有转码后的音频流

agentAudioSrc?: string; // 代理的音频地址(用于分离音频轨),当 useDynamicUrl 为 true 时,agentAudioSrc 可以不传

marks?: MediaMark[];// 视频标记

};

}LicenseConfig // license的配置

type LicenseConfig = {

rootDomain?: string; // license使用的根域名,例如使用的域名是 editor.abc.com,这里填的值就是abc.com

licenseKey?: string; // 申请的licenseKey,参考顶部使用说明在控制台中申请

}AsrConfig// 智能生成字幕的配置

type AsrConfig = {

interval?: number; // 轮询时长,单位:毫秒

defaultText?: string; // 默认的文案

maxPlaceHolderLength?: number; // 默认的文案最大长度

submitASRJob: (mediaId: string, startTime: string, duration: string) => Promise;

getASRJobResult?: (jobId: string) => Promise;

}

interface ASRJobInfo {

jobId?: string;

jobDone: boolean;

jobError?: string;

result?: ASRResult[];

}TTSConfig// 智能配音任务的配置

type TTSConfig = {

interval?: number; // 轮询时长,单位:毫秒

submitAudioProduceJob: (text: string, voice: string, voiceConfig?: VoiceConfig) => Promise;

getAudioJobResult?: (jobId: string) => Promise;

}

interface VoiceConfig {

volume: number;

speech_rate: number;

pitch_rate: number;

format?: string;

custom?: boolean;

}

interface TTSJobInfo {

jobId?: string;

jobDone: boolean;

jobError?: string;

asr?: AudioASRResult[];

result?: InputAudio | null;

}

interface AudioASRResult {

begin_time?: string;

end_time?: string;

text?: string;

content?: string;

from?: number;

to?: number;

}PublicMaterialLibrary// 公共媒资库的配置

type PublicMaterialLibrary = {

getLists: () => Promise;

name?: string;

pageSize?: number; // 单页展示数量

};

type MaterialList = {

name?: string;

key: string;

tag?: string;

mediaType: 'video' | 'audio' | 'image';

styleType?: 'video' | 'audio' | 'image' | 'background';

getItems: (

pageIndex: number,

pageSize: number,

) => Promise<{

items: InputMedia[];

end: boolean;

}>;

};SubtitleConfigtype SubtitleConfig = {

// 自定义纹理列表

customTextures?: {

list: () => Promise<

Array<{

key: string;

url: string;

}>

>;

// 添加自定义纹理

onAddTexture: () => Promise<{

key: string;

url: string;

}>;

// 删除自定义纹理

onDeleteTexture: (key: string) => Promise;

};

}AliyunVideoEditor// AliyunVideoEditor 实例方法

type AliyunVideoEditor = {

init: (config: IConfig) => void; // 初始化编辑器

destroy: (keepState?: boolean) => boolean; // 销毁编辑器

version: string | undefined; // 获取编辑器版本

setCurrentTime: (currentTime: number) => void; // 设置编辑器预览时间

getCurrentTime: () => number; // 获取编辑器预览时间

getDuration: () => number; // 获取编辑器时长

addProjectMaterials: (materials: InputMedia[]) => void; // 添加项目素材到编辑器

setProjectMaterials: (materials: InputMedia[]) => void; // 设置项目素材到编辑器

updateProjectMaterials: (update: (materials: InputMedia[]) => InputMedia[]) => void; // 更新编辑器当前项目素材

deleteProjectMaterial: (mediaId: string) => void; // 删除编辑器项目素材

setProjectTimeline: ({ VideoTracks, AudioTracks, AspectRatio }: CustomTimeline) => Promise; // 设置编辑器的timeline

getProjectTimeline: () => any; // 获取编辑器的timeline

getEvents: (eventType?: 'ui' | 'player' | 'error' | 'websdk' | 'timeline') => IObservable>; // 获取编辑器的事件

importSubtitles: (type: 'ass' | 'srt' | 'clip' | 'asr', config: string) => void; // 批量导入字幕到编辑器

}VideoTranslation

type VideoTranslation = {

language?: {

// 源语言

source: Array<{

value: string;

label: string;

}>;

// 目标语言

target: Array<{

value: string;

label: string;

}>;

};

// 视频翻译

translation?: {

interval?: number;

submitVideoTranslationJob: (params: TranslationJobParams) => Promise;

getVideoTranslationJob: (jobId: string) => Promise;

};

// 字幕擦除

detext?: {

interval?: number;

submitDetextJob: (param: DetextJobParams) => Promise;

getDetextJob: (jobId: string) => Promise;

};

// 字幕提取

captionExtraction?: {

interval?: number;

submitCaptionExtractionJob: (param: CaptionExtractionJobParams) => Promise;

getCaptionExtractionJob: (jobId: string) => Promise;

};

};

interface TranslationJobParams {

type: 'Video' | 'Text' | 'TextArray';

mediaId?: string;

mediaIdType?: MediaIdType;

text?: string;

textArray?: string[];

editingConfig: {

SourceLanguage: string;

TargetLanguage: string;

DetextArea?: string;

SupportEditing?: boolean;

SubtitleTranslate?: {

TextSource: 'OCR' | 'SubtitleFile';

OcrArea?: string;

SubtitleConfig?: string;

};

};

}

interface TranslationJobInfo {

jobId?: string;

jobDone: boolean;

jobError?: string;

result?: {

video?: InputVideo;

timeline?: string;

text?: string;

textArray?: Array<{

Target: string;

Source: string;

}>;

};

}

interface DetextJobParams {

mediaId: string;

mediaIdType: MediaIdType;

box?: 'auto' | Array<[number, number, number, number]>;

}

interface DetextJobInfo {

jobId?: string;

jobDone: boolean;

jobError?: string;

result?: {

video?: InputVideo;

};

}

interface CaptionExtractionJobParams {

mediaId: string;

mediaIdType: MediaIdType;

box?: 'auto' | Array<[number, number, number, number]>;

}

interface CaptionExtractionJobInfo {

jobId?: string;

jobDone: boolean;

jobError?: string;

result?: {

srtContent?: string;

};

}

最新发表
友情链接

Copyright © 2022 世界杯进球_国足进世界杯了吗 - fulitb.com All Rights Reserved.