Todos os produtos
Search
Central de documentação

Intelligent Media Services:Cenários comuns

Última atualização: Jul 03, 2026

Parâmetros de produção, configurações avançadas e exemplos de SDK para Correspondência de Imagem-Texto em cenários comuns.

Importante
  • Tanto Script-to-Video quanto Correspondência de Imagem-Texto 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 do serviço OpenAPI.

  • Regiões suportadas: China (Shanghai), China (Beijing), China (Hangzhou), China (Shenzhen), EUA (Silicon Valley) e Singapura.

  • Substitua todos os placeholders nos exemplos ([your-bucket], [your-region-id], [your-file-name], [your-file-path] e IDs de ativos de mídia) pelos seus valores reais.

Nota
  • 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 dos cenários comuns de Correspondência de Imagem-Texto.

  • A Correspondência de Imagem-Texto oferece dois modos de geração de vídeo:

    • Global Scripts

    • Storyboard Script

Referência da API

  • 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, EditingConfig e OutputConfig abaixo.

  • Para obter informações detalhadas sobre um trabalho de criação de vídeo em lote, consulte GetBatchMediaProducingJob.

InputConfig

O InputConfig especifica parâmetros para clipes de vídeo, narrações, música de fundo e adesivos.

Parâmetro

Tipo

Descrição

Exemplo

Obrigatório

Modes suportados

MediaArray

List<String>

  • Especifique e envie os ativos de source. Forneça uma lista de IDs de ativos de mídia ou URLs do OSS. A duração total do vídeo não pode exceder duas horas.

  • Formatos suportados: Formatos de vídeo.

["**b4549d46c88681030f6e","549d46c88b4681030f6e**"]

MediaArray ou MediaSearchInput é obrigatório

Ambos

MediaSearchInput

MediaSearchInput

Busca inteligentemente por ativos correspondentes ao especificar uma biblioteca de pesquisa e texto descritivo.

{"LibSearchCondition":{"SearchLibs":["ims-default-search-lib","test-20"],"SearchText":"Alibaba Cloud assistant is learning how to livestream"}}

Ambos

TitleArray

List<String>

Um array de títulos. Um título é selecionado aleatoriamente para cada produção.

Máximo de 50 títulos, cada um com até 50 caracteres.

["Title 1","Title 2"]

Não

Ambos

SubHeadingArray

List<SubHeading>

Configurações de subtítulos multiníveis.

[{"Level":1,"TitleArray":["Level 1 subtitle 1","Level 1 subtitle 2"]},{"Level":3,"TitleArray":["Level 3 subtitle"]}]

Não

Ambos

SpeechTextArray

List<String>

  • Um array de roteiros de narração. Um roteiro é selecionado aleatoriamente para cada produção.

  • Máximo de 50 roteiros, cada um com até 1000 caracteres.

  • Suporta controle de síntese de fala usando SSML.

    Importante

    Atualmente, apenas <break>, <s>, <sub>, <w>, <phoneme> e <say-as> são suportados.

["Voiceover content 1","Voiceover content 2"]

Não

Global Scripts

SceneInfo

SceneInfo

Parâmetros de configuração de cena.

Exemplo: Global Scripts

Exemplo: Storyboard Script

Sim

Storyboard Script

StickerArray

List<Sticker>

  • Um array de adesivos. Um é selecionado aleatoriamente para cada produção. Máximo de 50 adesivos. Suporta IDs de ativos de mídia ou URLs do OSS.

  • Regra de seleção: Se você fornecer 10 adesivos e solicitar 20 vídeos, o sistema escolherá um índice inicial aleatório (por exemplo, 3) e selecionará os adesivos ciclicamente: 3, 4, 5, ..., 10, 1, 2, 3, ...

  • Formatos suportados: Formatos de imagem.

[{"MediaId":"**9d46c8b4548681030f6e**","X":10,"Y":100,"Width":300,"Height":300,"Opacity":0,6}]

Não

Ambos

BackgroundMusicArray

List<String>

  • Um array de faixas de música de fundo. Uma é selecionada aleatoriamente para cada produção. Máximo de 50 faixas. Suporta IDs de ativos de mídia ou URLs do OSS.

  • Regra de seleção: Funciona da mesma forma que o StickerArray.

  • Formatos suportados: Formatos de áudio.

["**b4549d46c88681030f6e","549d46c88b4681030f6e**"]

Não

Ambos

BackgroundImageArray

List<String>

  • Um array de imagens de fundo. Uma é selecionada aleatoriamente para cada produção. Máximo de 50 imagens. Suporta IDs de ativos de mídia ou URLs do OSS.

  • Regra de seleção: Funciona da mesma forma que o StickerArray.

  • Formatos suportados: Formatos de imagem.

["**b4549d46c88681030f6e","549d46c88b4681030f6e**"]

Não

Ambos

MediaSearchInput

Parâmetro

Tipo

Descrição

Obrigatório

LibSearchCondition

LibSearchCondition

Configuração para condições da biblioteca de pesquisa.

Obrigatório

LibSearchCondition

Parâmetro

Tipo

Descrição

Exemplo

Obrigatório

SearchLibs

List<String>

Uma lista de bibliotecas de pesquisa.

["ims-default-search-lib"]

Sim

SearchText

String

Texto descritivo para correspondência de ativos. Máximo de 20 caracteres.

Ocean, coral reef, seals, dolphins, marine environment

Sim

SceneInfo

Parâmetro

Tipo

Descrição

Obrigatório

Scene

String

O tipo de cena correspondente. Para cenários comuns, defina como General.

Sim

ShotInfo

ShotInfo

Configuração para o storyboard.

Nota

Este parâmetro aplica-se apenas ao modo Storyboard Script.

Não

ShotInfo

Nota

Este parâmetro aplica-se apenas ao modo Storyboard Script.

Parâmetro

Tipo

Descrição

Obrigatório

ShotScripts

List<ShotScript>

Um array de roteiros de storyboard.

Sim

ShotScript

Nota

Este parâmetro aplica-se apenas ao modo Storyboard Script.

Parâmetro

Tipo

Descrição

Exemplo

Obrigatório

ScriptText

String

O texto do roteiro para uma única cena, usado para descrever o conteúdo da cena para correspondência visual.

He is recently developing a new magic potion.

Não

SpeechText

String

  • O roteiro de narração para uma única cena, com até 100 caracteres.

  • Suporta controle de síntese de fala usando SSML.

    Importante

    Apenas <break>, <s>, <sub>, <w>, <phoneme> e <say-as> são suportados.

The old magician Danny is fiddling with strange instruments; he is recently developing a new magic potion.

Não

Duration

Float

  • A duração da cena em segundos. Deve ser ≥ 1 segundo.

  • Efetivo apenas se nenhuma narração for fornecida. Caso exista uma narração, a duração da cena será determinada automaticamente pelo comprimento da narração.

5

Não

Volume

Float

  • O volume do vídeo de entrada para esta cena. Se definido, substitui o volume global configurado em EditingConfig.MediaConfig.Volume para esta cena específica.

  • Faixa de valores: [0, 10,0]. Suporta duas casas decimais.

0,5

Não

Exemplo: Modo Global Scripts

{
  // Choose either MediaArray or MediaSearchInput
  "MediaArray": [
    "****9d46c886b45481030f6e****",
    "****c886810b4549d4630f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test1.mp4",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test2.png"
  ],
  // Choose either MediaArray or MediaSearchInput
  "MediaSearchInput": {
        "LibSearchCondition": {
            "SearchLibs": [
                "ims-default-search-lib",
                "test-20"
            ],
            "SearchText": "Alibaba Cloud assistant is learning how to livestream"
      }
  },
  "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>"
  ],
  "Sticker": {
    "MediaId": "****b681034549d46c880f6e****",
    "X": 10,
    "Y": 100,
    "Width": 300,
    "Height": 300,
    "Opacity": 0.6
  },
  "StickerArray": [
    {
      "MediaId": "****9d46c8b4548681030f6e****",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300,
      "Opacity": 0.6
    },
    {
      "MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test3.png",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300
    }
  ],
  "BackgroundMusicArray": [
    "****b4549d46c88681030f6e****",
    "****549d46c88b4681030f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test4.mp3"
  ],
  "BackgroundImageArray": [
    "****6c886b4549d481030f6e****",
    "****9d46c8548b4681030f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test1.png"
  ]
}

Exemplo: Modo Storyboard Script

{
  // Choose either MediaArray or MediaSearchInput
  "MediaArray": ["****9d46c886b45481030f6e****", "****c886810b4549d4630f6e****"],
  // Choose either MediaArray or MediaSearchInput
  "MediaSearchInput": {
        "LibSearchCondition": {
            "SearchLibs": [
                "ims-default-search-lib",
                "test-20"
            ],
            "SearchText": "Alibaba Cloud assistant is learning how to livestream"
      }
  },
  "SceneInfo": {
    "Scene": "General", // General matching 
    "ShotInfo": {
      "ShotScripts": [
        {
          "ScriptText": "This is the visual script for the first scene",
          "SpeechText": "This is the voiceover for the first scene. The scene's duration will match the voiceover length."
        },
        {
          "ScriptText": "This is the visual script for the second scene. With no voiceover, you can set a custom duration.",
          "Duration": 5.0, // Can be set when there's no voiceover script.
          "Volume": 1.0 // Set the volume of video materials.
        },
        {
          "ScriptText": "This is the visual script for the third scene.",
          "SpeechText": "<speak>Voiceover supports SSML. The battle is <phoneme alphabet=\"py\" ph=\"zheng4 hao3\">fierce</phoneme>. Today, our hero, table tennis legend Ma Long, is striving for the pinnacle of glory. <s>In the quarter-finals against the formidable Togami Shunsuke, Ma Long showed no fear, giving his all in every rally.</s> His precise shots and calm judgment gave him the upper hand. In the end, Ma Long successfully defeated his opponent to advance to the semi-finals.<break time=\"1000ms\"/></speak>"
        }
      ]
    }
  },
   "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"]
    }
  ],
  "StickerArray": [
    {
      "MediaId": "****9d46c8b4548681030f6e****",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300
    },
    {
      "MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test3.png",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300
    }
  ],
  "BackgroundMusicArray": [
    "****b4549d46c88681030f6e****",
    "****549d46c88b4681030f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test4.mp3"
  ],
  "BackgroundImageArray": [
    "****6c886b4549d481030f6e****",
    "****9d46c8548b4681030f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test1.png"
  ]
}

EditingConfig

O EditingConfig controla títulos, volume, posicionamento e outras configurações de produção. Deixe vazio para usar os padrões.

Nota

Os parâmetros são os mesmos para ambos os modos de geração.

Parâmetro

Tipo

Descrição

Exemplo

Obrigatório

MediaConfig

JSON

Configuração para ativos de vídeo de entrada.

Exemplo de parâmetro

Não

TitleConfig

JSON

Configuração para títulos.

Exemplo de parâmetro

Não

SubHeadingConfig

JSON

Configuração para subtítulos multiníveis.

Campos JSON:

Exemplo de parâmetro

Não

SpeechConfig

JSON

Configuração para a narração.

Exemplo de parâmetro

Não

BackgroundMusicConfig

JSON

Configuração para música de fundo.

{"Volume":0,2}

Não

BackgroundImageConfig

JSON

Configuração de imagem de fundo. Não tem efeito se uma imagem de fundo for especificada no InputConfig.

{"SubType":"Blur","Radius":0,5}

Não

ProcessConfig

JSON

Configuração para o processo de mixagem e edição.

Exemplo de parâmetro

Não

FECanvas

JSON

Configuração de canvas para pré-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":"d54a97cff4108b555b01166d4b","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 (segundos) quando ativos de vídeo longos são divididos.

5

Não. Valor padrão: 3.

EnableClipSplit

Boolean

Ativa a segmentação de clipes por IA (divide ativos longos por mudanças de cena). Se verdadeiro, SingleShotDuration é ignorado.

false

Não. Valor padrão: false.

AllowVfxEffect

Boolean

Indica se efeitos especiais devem ser adicionados.

true

Não. Valor padrão: false.

VfxEffectProbability

Float

Probabilidade de aplicar um efeito a cada clipe. Faixa: 0,0 a 1,0. Suporta 2 casas decimais.

0,6

Não. Valor padrão: 0,5.

VfxFirstClipEffectList

List<String>

  • Se não estiver vazio, o efeito para o primeiro clipe do vídeo será escolhido desta lista.

  • Se estiver vazio, um efeito aleatório é escolhido entre os seguintes padrões: slightshow, starfieldshinee, starfieldshinee2, starsparkle, colorfulripples, starfield.

  • Exemplos de efeitos: Exemplos de efeitos especiais.

["slightshow","starfieldshinee"]

Não

VfxNotFirstClipEffectList

List<String>

  • Se não estiver vazio, os efeitos para todos os clipes, exceto o primeiro, serão escolhidos desta lista.

  • Se estiver vazio, um efeito aleatório é escolhido entre os seguintes padrões: zoomslight, zoom, zoominout, slightshake.

  • Exemplos de efeitos: Exemplos de efeitos especiais.

["zoomslight","zoom"]

Não

AllowTransition

Boolean

Indica se efeitos de transição devem ser adicionados.

true

Não. Valor padrão: false.

TransitionDuration

Float

Duração das transições em segundos. Se TransitionDuration > ClipDuration - 1, a transição para esse clipe não será aplicada.

0,5

Não. Valor padrão: 0,5.

TransitionList

List<String>

Uma lista de transições personalizadas. Se AllowTransition for true, uma transição aleatória desta lista será usada. Para transições disponíveis, consulte Efeitos de transição. Se esta lista estiver vazia, uma transição aleatória é escolhida entre: linearblur, colordistance, crosshatch, dreamyzoom, doomscreentransition_up.

["directional", "linearblur"]

Não

UseUniformTransition

Boolean

Indica se deve ser usada uma transição uniforme em todo o vídeo.

true

Não. Valor padrão: true.

AllowFilter

Boolean

Indica se filtros personalizados devem ser adicionados.

false

Não. Valor padrão: false.

FilterList

List<String>

Uma lista de filtros personalizados. Se AllowFilter for true, um filtro aleatório desta lista será aplicado. Para filtros disponíveis, consulte Filtros. Se esta lista estiver vazia, nenhum filtro será aplicado.

["m1", "m2"]

Não

AllowDuplicateMatch

Boolean

Indica se um clipe correspondente pode ser reutilizado.

false

Não. Valor padrão: false.

ImageDuration

Float

A duração para ativos de imagem estática, em segundos.

2

Não. Valor padrão: 2.

Exemplo

Todos os parâmetros do EditingConfig são opcionais. Configuração padrão:

{
  "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
  },
  "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
    }
  },
  "SubHeadingConfig": {
    "1": {
      "Y": 0.3,
      "FontSize": 40
    },
    "3": {
      "Y": 0.5,
      "FontSize": 30
    }
  },
  "BackgroundMusicConfig": {
    "Volume": 0.2,   // Background music at 20% volume by default
    "Style": null
  },
  "ProcessConfig": {
    "SingleShotDuration": 3,      // Duration of segmented shots. Choose one: SingleShotDuration or EnableClipSplit.
    "EnableClipSplit": false,      // Whether to use AI clip segmentation. If true, SingleShotDuration is ignored.
    "AllowVfxEffect": false,	  // Whether to add special effects.
    "AllowTransition": false,	  // Whether to add transitions.
    "AllowDuplicateMatch": false // In image-text matching mode, whether to allow reuse of matched clips.
  }
}

TemplateConfig

O TemplateConfig contém parâmetros comuns para produção de vídeo em lote. Para parâmetros detalhados e exemplos, consulte TemplateConfig.

OutputConfig

Nota
  • O OutputConfig especifica o destino de saída, nomenclatura, resolução e quantidade de vídeos.

  • Os parâmetros aplicam-se a ambos os modos de geração.

Parâmetro

Tipo

Descrição

Exemplo

Obrigatório

MediaURL

String

A URL do vídeo de saída, que deve incluir o placeholder {index}.

Formato: 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

O local de armazenamento para ativos de mídia enviados ao ApsaraVideo VOD.

Formato: [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

O nome do arquivo de saída, que deve incluir o placeholder {index}.

Formato: [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

  • Se verdadeiro, o trabalho gera apenas uma linha do tempo de pré-visualização sem produzir efetivamente um vídeo. A URL de saída não é necessária.

  • Após a conclusão do trabalho, consulte o resultado usando GetBatchMediaPoducingJob para obter o ID do projeto de edição (projectId) e, em seguida, chame GetEditingProject para recuperar a linha do tempo de pré-visualização.

false

Não. Valor padrão: false.

Count

Integer

A quantidade de vídeos a serem gerados.

  • Global Scripts: até 100.

  • Storyboard Script: até 100.

10

Não. Valor padrão: 1.

MaxDuration

Float

A duração máxima para cada vídeo de saída, em segundos.

Se um SpeechText for fornecido, este parâmetro é ignorado e a duração do vídeo corresponde ao comprimento da narração.

Se nenhum SpeechText for fornecido, a duração do vídeo não excederá este valor.

20

Não. Valor padrão: 15.

FixedDuration

Float

A duração fixa para cada vídeo de saída. Se definido, a duração do vídeo será ajustada para corresponder a este valor.

Observação:

  • Não suportado no modo Storyboard Script.

  • Suportado no modo Global Scripts apenas se SpeechTextArray estiver vazio.

  • Escolha apenas um entre FixedDuration e MaxDuration.

20

Não. Valor padrão: 15.

Width

Integer

A largura do vídeo de saída em pixels.

1080

Sim

Height

Integer

A altura do vídeo de saída em pixels.

1920

Sim

Video

JSONObject

Configuração para o fluxo de vídeo de saída, como CRF e codec.

{"Crf": 27}

Não

Exemplo

{
 	"MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name]_{index}.mp4",
 	"Count": 1,
 	"MaxDuration": 15,
 	"Width": 1080,
 	"Height": 1920,
 	"Video": {"Crf": 27},
        "GeneratePreviewOnly":false
}

Exemplos de SDK

Pré-requisitos

Instale o SDK do servidor IMS. Para mais informações, consulte Introdução.

Exemplo de código

Este exemplo utiliza o modo Global Scripts.

Expandir para visualizar o exemplo de código

package com.example;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.ice20201109.Client;
import com.aliyun.ice20201109.models.*;
import com.aliyun.teaopenapi.models.Config;

import java.util.*;

/**
 *  Maven dependencies required:
 *   <dependency>
 *      <groupId>com.aliyun</groupId>
 *      <artifactId>ice20201109</artifactId>
 *      <version>2.3.0</version>
 *  </dependency>
 *  <dependency>
 *      <groupId>com.alibaba</groupId>
 *      <artifactId>fastjson</artifactId>
 *      <version>1.2.9</version>
 *  </dependency>
 */

public class SmartMixBatchEditingService {

    static final String regionId = "[your-bucket]"; // Image-text matching supports cn-shanghai, cn-beijing, cn-hangzhou
    static final String bucket = "[your-region-id]";
    private Client iceClient;

    public static void main(String[] args) throws Exception {
        SmartMixBatchEditingService smartMixBatchEditingService = new SmartMixBatchEditingService();
        smartMixBatchEditingService.initClient();
        smartMixBatchEditingService.runExample();
    }

    public void initClient() throws Exception {
        // Alibaba Cloud account AccessKey has access permissions for all APIs. We recommend that you use a RAM user for API access or daily operations.
        // This example demonstrates storing the AccessKey ID and AccessKey Secret in environment variables. For configuration methods, see: https://www.alibabacloud.com/help/zh/sdk/developer-reference/v2-manage-access-credentials
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();

        Config config = new Config();
        config.setCredential(credentialClient);

        // If you need to hardcode the AccessKey ID and AccessKey Secret, use the code below. However, we strongly recommend not saving the AccessKey ID and AccessKey Secret in your project code, as this may lead to AccessKey leakage, threatening the security of all resources under your account.
        // config.accessKeyId = <AccessKey ID created in step 2>;
        // config.accessKeySecret = <AccessKey Secret created in step 2>;
        config.endpoint = "ice." + regionId + ".aliyuncs.com";
        config.regionId = regionId;
        iceClient = new Client(config);
    }

    public void runExample() throws Exception {

        // Video materials
        List<String> mediaArray = Arrays.asList(
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-1.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-2.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-3.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-4.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-5.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-6.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-7.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-8.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-9.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-10.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-11.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-12.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-13.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-14.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-15.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-16.mp4"
        );

        // Voiceover script
        String speechText = "In the vast expanse of the deep blue, a vibrant picture unfolds. In the clear turquoise water, coral reefs, like underwater forests, are a kaleidoscope of colors...";

        // Video title
        String title = "Protect Our Blue Home";

        JSONObject inputConfig = new JSONObject();
        inputConfig.put("MediaArray", mediaArray);
        inputConfig.put("SpeechText", speechText);
        inputConfig.put("Title", title);

        // Number of videos to produce
        int produceCount = 4;

        // Output resolution (portrait)
        int outputWidth = 1080;
        int outputHeight = 1920;

        // Output resolution (landscape)
        //int outputWidth = 1920;
        //int outputHeight = 1080;

        // Output OSS URL, must include the {index} placeholder
        String mediaUrl = "http://" + bucket + ".oss-" + regionId + ".aliyuncs.com/smart_mix/output_{index}.mp4";

        JSONObject outputConfig = new JSONObject();
        outputConfig.put("MediaURL", mediaUrl);
        outputConfig.put("Count", produceCount);
        outputConfig.put("Width", outputWidth);
        outputConfig.put("Height", outputHeight);

        // Submit batch video production job
        SubmitBatchMediaProducingJobRequest request = new SubmitBatchMediaProducingJobRequest();
        request.setInputConfig(inputConfig.toJSONString());
        request.setOutputConfig(outputConfig.toJSONString());

        SubmitBatchMediaProducingJobResponse response = iceClient.submitBatchMediaProducingJob(request);
        String jobId = response.getBody().getJobId();
        System.out.println("Start smart mix batch job, batchJobId: " + jobId);

        // Poll job status until all are finished
        System.out.println("Waiting job finished...");
        int maxTry = 3000;
        int i = 0;
        while (i < maxTry) {
            Thread.sleep(3000);
            i++;
            GetBatchMediaProducingJobRequest getRequest = new GetBatchMediaProducingJobRequest();
            getRequest.setJobId(jobId);
            GetBatchMediaProducingJobResponse getResponse = iceClient.getBatchMediaProducingJob(getRequest);
            String status = getResponse.getBody().getEditingBatchJob().getStatus();
            System.out.println("BatchJobId: " + jobId + ", status:" + status);

            if ("Failed".equals(status)) {
                System.out.println("Batch job failed. JobInfo: " + JSONObject.toJSONString(getResponse.getBody().getEditingBatchJob()));
                throw new Exception("Produce failed. BatchJobId: " + jobId);
            }

            if ("Finished".equals(status)) {
                System.out.println("Batch job finished. JobInfo: " + JSONObject.toJSONString(getResponse.getBody().getEditingBatchJob()));
                break;
            }
        }
    }
}

Parâmetros de entrada da API

InputConfig

{
	"MediaArray": [
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-1.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-2.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-3.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-4.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-5.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-6.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-7.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-8.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-9.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-10.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-11.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-12.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-13.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-14.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-15.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-16.mp4"
	],
	"SpeechText": "In the vast expanse of the deep blue, a vibrant picture unfolds. In the clear turquoise water, coral reefs, like underwater forests, are a kaleidoscope of colors...",
	"Title":"Protect Our Blue Home"
}

OutputConfig

{
  "Count": 4,
  "Height": 1080,
  "Width": 1920,
  "MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name]_{index}.mp4"
}

Lógica de edição e configuração avançada

Lógica de processamento

Modo Global Scripts:

  • Se os ativos de vídeo forem selecionados da biblioteca de pesquisa com base em texto descritivo, o texto será usado como consulta para encontrar inteligentemente clipes de vídeo correspondentes.

  • Caso um vídeo longo seja fornecido como entrada, ele será primeiramente segmentado em planos mais curtos. O vídeo final será uma combinação desses planos. A duração padrão para cada plano é de 3 segundos, personalizável através do parâmetro SingleShotDuration.

  • Na ausência de narração, o sistema seleciona e une clipes de vídeo aleatoriamente para criar um vídeo de aproximadamente 15 segundos.

  • Quando uma narração é fornecida, o sistema combina inteligentemente elementos visuais ao texto e os sincroniza com a narração para produzir múltiplos vídeos em lote.

Modo Storyboard Script:

  • Se os ativos de vídeo forem selecionados da biblioteca de pesquisa com base em texto descritivo, o texto será utilizado para buscar e recuperar inteligentemente clipes de vídeo correspondentes.

  • Neste modo, não se define SpeechTextArray. Em vez disso, controle o conteúdo, a duração e a narração de cada cena usando SceneInfo.ShotInfo.ShotScripts.

  • Dentro de uma única cena, o sistema tenta primeiro corresponder e aparar clipes com base no ScriptText. Se o ScriptText não for fornecido, mas o SpeechText estiver presente, a correspondência baseia-se na narração.

  • A duração de uma cena é sincronizada com o comprimento da narração ou com uma duração personalizada definida.

Configuração avançada

Para configurações avançadas, consulte Lógica e configurações avançadas para criação de vídeo em lote com um clique.

Referências