Conheça os parâmetros de produção, as configurações avançadas e os exemplos de SDK para Script-to-Video.
Tanto o Script-to-Video quanto o Image-Text Matching utilizam a API SubmitBatchMediaProducingJob para enviar uma tarefa. Para diferenciá-los com base nos parâmetros, consulte Diferenças de parâmetros.
Nesta API, a região especificada na URL do OSS de todos os ativos de mídia deve ser idêntica ao endpoint de serviço da OpenAPI.
Regiões compatíveis: China (Shanghai), China (Beijing), China (Hangzhou), China (Shenzhen), EUA (Silicon Valley) e Singapura.
Na prática, substitua todos os espaços reservados nos exemplos, como [your-bucket], [your-region-id], [your-file-name], [your-file-path] e IDs de ativos de mídia ("**9d46c8b4548681030f6e**"), pelos seus valores reais.
Para compreender melhor este documento, leia primeiro o guia de Produção de vídeo em lote e familiarize-se com os conceitos e o fluxo de trabalho do Script-to-Video.
-
O Script-to-Video oferece dois modos de produção: Global Scripts e Segmented Scripts.
Global Scripts: Combina aleatoriamente vários roteiros completos de narração com ativos de vídeo para gerar um grande volume de vídeos com estilo semelhante.
Segmented Scripts: Divide um roteiro de narração em múltiplos segmentos e associa cada segmento a um grupo específico de ativos.
-
A definição do modo segue a lógica de parâmetros abaixo:
Se SpeechTextArray não estiver vazio, o sistema considera o modo Global Scripts.
Caso SpeechTextArray esteja vazio e pelo menos um campo MediaGroup.Duration ou MediaGroup.SpeechTextArray no MediaGroupArray possua valor, o modo será Segmented Scripts.
Quando SpeechTextArray estiver vazio e todos os valores de MediaGroup.Duration e MediaGroup.SpeechTextArray no MediaGroupArray também estiverem vazios, o modo aplicado será Global Scripts.
Observações de uso
Para enviar um trabalho de produção de vídeo em lote que mistura inteligentemente vários ativos de vídeo, áudio e imagem, consulte SubmitBatchMediaProducingJob. Os principais parâmetros da API estão detalhados nas seções
InputConfig,EditingConfigeOutputConfigabaixo.Para obter informações detalhadas sobre um trabalho de criação de vídeo em lote, acesse GetBatchMediaProducingJob.
InputConfig
O InputConfig define os ativos básicos: clipes de vídeo, narrações, música de fundo e adesivos.
|
Parâmetro |
Tipo |
Descrição |
Exemplo |
Obrigatório |
Modos compatíveis |
|
MediaGroupArray |
List<MediaGroup> |
Especifica os ativos de source. Permite agrupar ativos. Nome do grupo: Até 50 caracteres. Não aceita emojis. Lista de materiais: ID do ativo de mídia ou URL do OSS do material. Aceita no máximo 40 grupos, cada um contendo até 200 materiais. |
Sim |
|
|
|
TitleArray |
List<String> |
Um array de títulos. O sistema seleciona aleatoriamente um título para cada produção. Máximo de 50 títulos, cada um com até 50 caracteres. |
["Title 1","Title 2"] |
Não |
|
|
SubHeadingArray |
List<SubHeading> |
Configurações de subtítulos multinível. |
[{"Level":1,"TitleArray":["Level 1 subtitle 1","Level 1 subtitle 2"]},{"Level":3,"TitleArray":["Level 3 subtitle"]}] |
Não |
|
|
SpeechTextArray |
List<String> |
|
["Voiceover content 1","Voiceover content 2"] |
Não |
|
|
StickerArray |
List<Sticker> |
|
[{"MediaId":"**9d46c8b4548681030f6e**","X":10,"Y":100,"Width":300,"Height":300,"Opacity":0,6}] |
Não |
|
|
BackgroundMusicArray |
List<String> |
|
["**b4549d46c88681030f6e","549d46c88b4681030f6e**"] |
Não |
|
|
BackgroundImageArray |
List<String> |
|
["**b4549d46c88681030f6e","549d46c88b4681030f6e**"] |
Não |
|
MediaGroup
As diferenças de parâmetros do MediaGroup entre Global Scripts e Segmented Scripts aparecem na coluna Modos compatíveis.
|
Parâmetro |
Tipo |
Descrição |
Exemplo |
Obrigatório |
Modos compatíveis |
|
GroupName |
String |
Nome do grupo. Máximo de 50 caracteres, sem emojis. |
Group1 |
Sim |
|
|
MediaArray |
List<String> |
|
**b4549d46c88681030f6e** |
Sim |
|
|
SpeechTextArray |
List<String> |
|
["Voiceover content 1","Voiceover content 2"] |
Não |
|
|
Duration |
Float |
Duração do grupo atual, em segundos. Utilize apenas quando |
10 |
Não. Padrão: 5. |
|
|
SplitMode |
String |
|
NoSplit |
Não. Padrão: AverageSplit. |
|
|
Volume |
Float |
|
0,5 |
Não |
|
|
DurationAutoAdapt |
Boolean |
Indica se a adaptação automática de duração deve ser ativada para este grupo. Quando ativado e não há narração, a duração do grupo é ajustada para garantir que os clipes de vídeo sejam reproduzidos na velocidade original. |
true |
Não. Padrão: false. |
|
Exemplo: Modo Global Scripts
{
"MediaGroupArray": [
{
"GroupName": "UseMediaId",
"MediaArray": [
"****9d46c886b45481030f6e****",
"****c886810b4549d4630f6e****"
],
"SplitMode": "NoSplit"
},
{
"GroupName": "UseOssUrl",
"MediaArray": [
"http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].mp4",
"http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].png"
]
}
],
"TitleArray": [
"Freshippo opens a new location in Huilongguan",
"A new Freshippo store opens"
],
"SubHeadingArray": [
{
"Level": 1,
"TitleArray": ["Subtitle 1", "Subtitle 2"]
},
{
"Level": 3,
"TitleArray": ["Level 3 subtitle"]
}
],
"SpeechTextArray": [
"A new Freshippo store just opened in the nearby mall. It's the grand opening today, so I rushed over to check it out. The store isn't huge, but it's packed with people. Snacks and drinks are pretty cheap, and the checkout lines are super long. Come and see for yourself!",
"A new Freshippo store just opened in the nearby mall. It's the grand opening today, so I rushed over to check it out.",
"<speak>Today, our hero, table tennis legend <phoneme alphabet="ipa" ph="mɑː lʊŋ">Ma Long</phoneme>, is striving for the pinnacle of glory.</speak>"
],
"StickerArray": [
{
"MediaId": "****9d46c8b4548681030f6e****",
"X": 10,
"Y": 100,
"Width": 300,
"Height": 300,
"Opacity": 0.6
},
{
"MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].png",
"X": 10,
"Y": 100,
"Width": 300,
"Height": 300
}
],
"BackgroundMusicArray": [
"****b4549d46c88681030f6e****",
"****549d46c88b4681030f6e****",
"http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].mp3"
],
"BackgroundImageArray": [
"****6c886b4549d481030f6e****",
"****9d46c8548b4681030f6e****",
"http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].png"
]
}
Exemplo: Segmented Scripts
{
"MediaGroupArray": [{
"GroupName": "start",
"MediaArray": ["https://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].jpeg", "https://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].mp4"],
"Duration": 5,
"SplitMode": "NoSplit",
"Volume": 1
},
{
"GroupName": "group1",
"MediaArray": ["https://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].png", "https://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].mp4"],
"SpeechTextArray": ["A new Freshippo store just opened in the nearby mall.", "It's the grand opening today.", "<speak>Today, our hero, table tennis legend <phoneme alphabet="ipa" ph="mɑː lʊŋ">Ma Long</phoneme>, is striving for the pinnacle of glory.</speak>"]
},
{
"GroupName": "group2",
"MediaArray": ["https://[your-bucket].oss-[your-region-id].aliyuncs.com/0-test-batch-editing-materials/normal%20video.mp4", "https://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].jpeg"],
"SpeechTextArray": ["The store isn't huge, but it's packed with people. Snacks and drinks are pretty cheap, and the checkout lines are super long.", "The scene is very lively, with crowds of people and a wide variety of goods."]
},
{
"GroupName": "group3",
"MediaArray": ["https://[your-bucket].oss-[your-region-id].aliyuncs.com/0-test-batch-editing-materials/young_sunset_walk.mp4"],
"SpeechTextArray": ["Come and see for yourself!", "Hurry and come take a look!"]
},
{
"GroupName": "end",
"MediaArray": ["https://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].jpg", "https://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].mp4"],
"Duration": 5
}
],
"TitleArray": [
"Freshippo opens a new location in Huilongguan",
"A new Freshippo store opens"
],
"StickerArray": [
{
"MediaId": "****9d46c8b4548681030f6e****",
"X": 10,
"Y": 100,
"Width": 300,
"Height": 300,
"Opacity": 0.6
},
{
"MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].png",
"X": 10,
"Y": 100,
"Width": 300,
"Height": 300
}
],
"SubHeadingArray": [
{
"Level": 1,
"TitleArray": ["Level 1 subtitle 1", "Level 1 subtitle 2"]
},
{
"Level": 3,
"TitleArray": ["Level 3 subtitle"]
}
],
"BackgroundMusicArray": [
"****b4549d46c88681030f6e****",
"****549d46c88b4681030f6e****",
"http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].mp3"
],
"BackgroundImageArray": [
"****6c886b4549d481030f6e****",
"****9d46c8548b4681030f6e****",
"http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name].png"
]
}
EditingConfig
O EditingConfig especifica volume, posicionamento e outras configurações de produção.
Todos os parâmetros são compatíveis com os modos Global Scripts e Segmented Scripts, exceto:
ProcessConfig.AlignmentMode tem efeito apenas no modo Global Scripts.
SpeechConfig.SpecialWordsConfig tem efeito apenas no modo Segmented Scripts.
|
Parâmetro |
Tipo |
Descrição |
Exemplo |
Obrigatório |
|
JSON |
Configuração do ativo de vídeo de entrada. |
{"Volume":"1","MediaMetaDataArray":[{"Media":"**6c886b4549d481030f6e**","GroupName":"GroupA","TimeRangeList":[{"In":"0","Out":"1"},{"In":"2","Out":"3"}]}]} |
Não |
|
|
JSON |
Configuração para títulos. |
{"Alignment":"TopCenter","AdaptMode":"AutoWrap","Font":"Alibaba PuHuiTi 2.0 95 ExtraBold","SizeRequestType":"Nominal","Y":0.1} |
Não |
|
|
SubHeadingConfig |
JSON |
Configuração para subtítulos multinível. Campos JSON:
|
{"1":{"Y":0.3,"FontSize":40},"3":{"Y":0.5,"FontSize":30}} |
Não |
|
JSON |
Configuração da narração. |
Não |
||
|
JSON |
Configuração da música de fundo. |
{"Volume":0.2} |
Não |
|
|
JSON |
Configuração da imagem de fundo. Ignorado se uma imagem de fundo já estiver definida no InputConfig. |
{"SubType":"Blur","Radius":0.5} |
Não |
|
|
JSON |
Configuração do processo de mixagem e edição. |
Não |
||
|
JSON |
Configuração de canvas para visualização front-end. |
{"Width": 1080,"Height": 1920} |
Não |
|
|
ProduceConfig |
JSON |
Configuração padrão de edição e produção. Para campos, consulte EditingProduceConfig. |
{"AutoRegisterInputVodMedia":true,"OutputWebmTransparentChannel":true,"CoverConfig":{"StartTime":3.3},"AudioChannelCopy":"left","PipelineId":"**d54a97cff4108b555b01166d4**","MaxBitrate":5000,"KeepOriginMaxBitrate":false,"KeepOriginVideoMaxFps":false} |
Não |
ProcessConfig
|
Parâmetro |
Tipo |
Descrição |
Exemplo |
Obrigatório |
|
SingleShotDuration |
Float |
Duração de cada plano segmentado automaticamente ao dividir ativos de vídeo longos, em segundos. |
5 |
Não. Padrão: 3. |
|
AllowVfxEffect |
Boolean |
Indica se efeitos especiais devem ser adicionados. |
true |
Não. Padrão: false. |
|
VfxEffectProbability |
Float |
Probabilidade de aplicar um efeito a cada clipe. Intervalo: 0,0–1,0. Aceita 2 casas decimais. |
0,6 |
Não. Padrão: 0,5. |
|
VfxFirstClipEffectList |
List<String> |
|
["slightshow","starfieldshinee"] |
Não |
|
VfxNotFirstClipEffectList |
List<String> |
|
["zoomslight","zoom"] |
Não |
|
AllowTransition |
Boolean |
Indica se efeitos de transição devem ser adicionados. |
true |
Não. Padrão: false. |
|
TransitionDuration |
Float |
Duração das transições em segundos. Se |
0,5 |
Não. Padrão: 0,5. |
|
TransitionList |
List<String> |
Uma lista de transições personalizadas. Se |
["directional", "linearblur"] |
Não |
|
UseUniformTransition |
Boolean |
Indica se a mesma transição deve ser usada em todo o vídeo. |
true |
Não. Padrão: true. |
|
AllowFilter |
Boolean |
Indica se filtros personalizados devem ser adicionados. |
false |
Não. Padrão: false. |
|
FilterList |
List<String> |
Uma lista de filtros personalizados. Se |
["m1", "m2"] |
Não |
|
AlignmentMode |
String |
Modo de alinhamento para vídeo e narração. Válido apenas no modo Global Scripts. Valores válidos:
|
AutoSpeed |
Não. Padrão: AutoSpeed. |
|
ImageDuration |
Float |
Duração dos ativos de imagem estática, em segundos. |
2 |
Não. Padrão: 2. |
Exemplo de parâmetro
{
"MediaConfig": {
"Volume": 0 // Input video assets are muted by default
},
"TitleConfig": {
"Alignment": "TopCenter",
"AdaptMode": "AutoWrap",
"Font": "Alibaba PuHuiTi 2.0 95 ExtraBold",
"SizeRequestType": "Nominal",
"Y": 0.1, // Y-coordinate for portrait video
"Y": 0.05, // Y-coordinate for landscape video
"Y": 0.08 // Y-coordinate for square video
},
"SubHeadingConfig": {
"1": {
"Y": 0.3,
"FontSize": 40
},
"3": {
"Y": 0.5,
"FontSize": 30
}
},
"SpeechConfig": {
"Volume": 1, // Voiceover uses original volume by default
"SpeechRate": 0,
"Voice": null,
"Style": null,
"CustomizedVoice": null, // Voice ID. If set, Voice and Style are ignored.
"AsrConfig": {
"Alignment": "TopCenter",
"AdaptMode": "AutoWrap",
"Font": "Alibaba PuHuiTi 2.0 65 Medium",
"SizeRequestType": "Nominal",
"Spacing": -1,
"Y": 0.8, // Subtitle Y-coordinate for portrait video
"Y": 0.9, // Subtitle Y-coordinate for landscape video
"Y": 0.85 // Subtitle Y-coordinate for square video
},
"SpecialWordsConfig": [{
"Type": "Highlight",
"Style": {
"FontName": "KaiTi",
"FontSize": 80,
"FontColor": "20AEE9",
"OutlineColour": "2D20E9",
"Outline": 3,
"FontFace": {
"Bold": true,
"Underline": true
}
},
"WordsList": [
"ApsaraVideo",
"Intelligent Media Services",
"Batch video creation"
]
},
{
"Type": "Highlight",
"Style": {
"FontFace": {
"Italic": true
}
},
"WordsList": [
"product",
"take a look"
]
},
{
"Type": "Forbidden",
"WordsList": [
"pilipala",
"bilibala"
],
"SoundReplaceMode": "None"
}
]},
"BackgroundMusicConfig": {
"Volume": 0.2, // Background music at 20% volume by default
"Style": null
},
"ProcessConfig": {
"SingleShotDuration": 3, // Duration of a shot after splitting
"AllowVfxEffect": false, // Specifies whether to add special effects
"AllowTransition": false, // Specifies whether to add transition effects
"AlignmentMode": "AutoSpeed" // This field is supported only in Global Scripts mode
}
}
TemplateConfig
O TemplateConfig contém parâmetros comuns para produção de vídeo em lote. Para parâmetros detalhados e exemplos, consulte TemplateConfig.
Parâmetros do OutputConfig
O OutputConfig especifica o destino de saída, convenções de nomenclatura, resolução e quantidade de vídeos.
Os parâmetros aplicam-se a ambos os modos.
|
Parâmetro |
Tipo |
Descrição |
Exemplo |
Obrigatório |
|
MediaURL |
String |
URL do vídeo de saída. Deve incluir o espaço reservado |
Regra: http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name]_{index}.mp4 Exemplo: http://example.oss-cn-shanghai.aliyuncs.com/example/example_{index}.mp4 |
Obrigatório se GeneratePreviewOnly for falso e a saída for para o OSS. |
|
StorageLocation |
String |
Local de armazenamento para ativos de mídia enviados ao ApsaraVideo VOD. |
Regra: [your-vod-bucket].oss-[your-region-id].aliyuncs.com Exemplo: outin-**6c886b4549d481030f6e**.oss-cn-shanghai.aliyuncs.com |
Obrigatório se GeneratePreviewOnly for falso e a saída for para o VOD. |
|
FileName |
String |
Nome do arquivo de saída. Deve incluir o espaço reservado |
Regra: [your-file-name]__{index}.mp4 Exemplo: example_{index}.mp4 |
Obrigatório se GeneratePreviewOnly for falso e a saída for para o VOD. |
|
GeneratePreviewOnly |
Boolean |
|
false |
Não. Padrão: false. |
|
Count |
Integer |
Número de vídeos a serem gerados. Máximo: 100. |
10 |
Não. Padrão: 1. |
|
MaxDuration |
Float |
Duração máxima por vídeo de saída, em segundos.
|
20 |
Não. Padrão: 15. |
|
FixedDuration |
Float |
Duração fixa por vídeo de saída. Se definido, a duração do vídeo ajusta-se a este valor.
|
20 |
Não. Padrão: 15. |
|
Width |
Integer |
Largura do vídeo de saída, em pixels. |
1080 |
Sim |
|
Height |
Integer |
Altura do vídeo de saída, em pixels. |
1920 |
Sim |
|
JSON |
Configuração do fluxo de vídeo de saída (CRF, codec, etc.). |
{"Crf": 27} |
Não |
Exemplo de parâmetro
{
"MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name]_{index}.mp4",
"Count": 20,
"MaxDuration": 15,
"Width": 1080,
"Height": 1920,
"Video": {"Crf": 27},
"GeneratePreviewOnly":false
}
Aplicações
Exemplo 1: Configure introdução e encerramento com o modo Segmented Scripts
Caso de uso
Adicione uma introdução e um encerramento consistentes definindo MediaGroup.SplitMode como NoSplit para o primeiro e o último grupos. Dessa forma, o sistema reproduz integralmente um ativo selecionado aleatoriamente desses grupos.
Código de exemplo
Exemplo 2: Crie um vídeo de montagem de rostos
Exemplo de SDK
Pré-requisitos
Você instalou o SDK do servidor IMS. Para mais informações, consulte Introdução.
Exemplo de código
Este exemplo utiliza o modo Global Scripts.
Parâmetros de entrada da API
Configurações avançadas
Para configurações avançadas, consulte Lógica e configurações avançadas para criação de vídeo em lote com um clique.
FAQ
Para perguntas frequentes sobre Script-to-Video, consulte FAQ.
Como corrigir mudanças de cena bruscas ou excessivamente frequentes?
Como controlar o ritmo das mudanças de cena e a duração dos planos?
Como a duração de exibição de uma imagem é calculada no vídeo final?
Como garantir que um clipe de vídeo seja reproduzido integralmente no vídeo final?
Como alternar entre clipes de vídeo com áudio original e clipes com narração?
Referências
SubmitBatchMediaProducingJob: envie um trabalho de produção de vídeo em lote.
GetBatchMediaProducingJob: recupera detalhes de um trabalho de produção de vídeo em lote.