Tous les produits
Search
Centre de documentation

Intelligent Media Services:Scénarios courants

Dernière mise à jour :Aug 11, 2026

Paramètres de production, configurations avancées et exemples SDK pour la mise en correspondance image-texte dans des scénarios courants.

Important
  • Le Script vers vidéo et la mise en correspondance image-texte utilisent tous deux l'API SubmitBatchMediaProducingJob pour soumettre une tâche. Pour les différencier sur la base des paramètres, consultez les Différences de paramètres.

  • Dans cette API, la région spécifiée dans l'URL OSS de tous les éléments multimédias doit être identique au point de terminaison du service OpenAPI.

  • Régions prises en charge : Chine (Shanghai), Chine (Pékin), Chine (Hangzhou), Chine (Shenzhen), États-Unis (Silicon Valley) et Singapour.

  • Remplacez tous les espaces réservés dans les exemples ([your-bucket], [your-region-id], [your-file-name], [your-file-path] et les ID des éléments multimédias) par vos valeurs réelles.

Remarque
  • Pour mieux comprendre ce document, commencez par lire le guide Production vidéo par lots afin de vous familiariser avec les concepts et le flux de travail des scénarios courants de mise en correspondance image-texte.

  • La mise en correspondance image-texte propose deux modes de génération de vidéos :

    • Scripts globaux

    • Script de storyboard

Référence API

  • Pour soumettre une tâche de production vidéo par lots qui mixe intelligemment plusieurs éléments vidéo, audio et image, consultez l'API SubmitBatchMediaProducingJob. Les principaux paramètres de l'API sont détaillés dans les sections InputConfig, EditingConfig et OutputConfig ci-dessous.

  • Pour obtenir des informations détaillées sur une tâche de création vidéo par lots, consultez l'API GetBatchMediaProducingJob.

InputConfig

InputConfig spécifie les paramètres des clips vidéo, des voix off, de la musique d'ambiance et des autocollants.

Parameter

Type

Description

Example

Required

Supported modes

MediaArray

List<String>

  • Spécifiez et téléchargez les éléments source. Vous pouvez fournir une liste d'ID d'éléments multimédias ou d'URL OSS. La durée totale des vidéos ne peut pas dépasser deux heures.

  • Formats pris en charge : Formats vidéo.

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

MediaArray ou MediaSearchInput est requis

Les deux

MediaSearchInput

MediaSearchInput

Recherche intelligemment des éléments correspondants en spécifiant une bibliothèque de recherche et un texte descriptif.

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

Les deux

TitleArray

List<String>

Un tableau de titres. Un titre est sélectionné aléatoirement pour chaque production.

Maximum de 50 titres, chacun pouvant contenir jusqu'à 50 caractères.

["Title 1","Title 2"]

Non

Les deux

SubHeadingArray

List<SubHeading>

Paramètres de sous-titres multiniveaux.

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

Non

Les deux

SpeechTextArray

List<String>

  • Un tableau de scripts de voix off. Un script est sélectionné aléatoirement pour chaque production.

  • Maximum de 50 scripts, chacun pouvant contenir jusqu'à 1 000 caractères.

  • Prend en charge le contrôle de la synthèse vocale à l'aide de SSML.

    Important

    Actuellement, seules les balises <break>, <s>, <sub>, <w>, <phoneme> et <say-as> sont prises en charge.

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

Non

Scripts globaux

SceneInfo

SceneInfo

Paramètres de configuration de la scène.

Exemple : Scripts globaux

Exemple : Script de storyboard

Oui

Script de storyboard

StickerArray

List<Sticker>

  • Un tableau d'autocollants. Un élément est sélectionné aléatoirement pour chaque production. Maximum de 50 autocollants. Prend en charge les ID d'éléments multimédias ou les URL OSS.

  • Règle de sélection : Si vous fournissez 10 autocollants et demandez 20 vidéos, le système choisira un index de départ aléatoire (par exemple, 3) et sélectionnera les autocollants de manière cyclique : 3, 4, 5, ..., 10, 1, 2, 3, ...

  • Formats pris en charge : Formats d'image.

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

Non

Les deux

BackgroundMusicArray

List<String>

  • Un tableau de pistes musicales d'ambiance. Une piste est sélectionnée aléatoirement pour chaque production. Maximum de 50 pistes. Prend en charge les ID d'éléments multimédias ou les URL OSS.

  • Règle de sélection : Fonctionne de la même manière que StickerArray.

  • Formats pris en charge : Formats audio.

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

Non

Les deux

BackgroundImageArray

List<String>

  • Un tableau d'images d'arrière-plan. Une image est sélectionnée aléatoirement pour chaque production. Maximum de 50 images. Prend en charge les ID d'éléments multimédias ou les URL OSS.

  • Règle de sélection : Fonctionne de la même manière que StickerArray.

  • Formats pris en charge : Formats d'image.

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

Non

Les deux

MediaSearchInput

Parameter

Type

Description

Required

LibSearchCondition

LibSearchCondition

Configuration des conditions de la bibliothèque de recherche.

Obligatoire

LibSearchCondition

Parameter

Type

Description

Example

Required

SearchLibs

List<String>

Une liste de bibliothèques de recherche.

["ims-default-search-lib"]

Oui

SearchText

String

Texte descriptif pour la mise en correspondance des éléments. Maximum de 20 caractères.

Ocean, coral reef, seals, dolphins, marine environment

Oui

SceneInfo

Parameter

Type

Description

Required

Scene

String

Le type de scène de mise en correspondance. Pour les scénarios courants, définissez cette valeur sur General.

Oui

ShotInfo

ShotInfo

Configuration du storyboard.

Remarque

Ce paramètre s'applique uniquement au mode Script de storyboard.

Non

ShotInfo

Remarque

Ce paramètre s'applique uniquement au mode Script de storyboard.

Parameter

Type

Description

Required

ShotScripts

List<ShotScript>

Un tableau de scripts de storyboard.

Oui

ShotScript

Remarque

Ce paramètre s'applique uniquement au mode Script de storyboard.

Parameter

Type

Description

Example

Required

ScriptText

String

Le texte du script pour une scène unique, utilisé pour décrire le contenu de la scène aux fins de la mise en correspondance visuelle.

He is recently developing a new magic potion.

Non

SpeechText

String

  • Le script de voix off pour une scène unique, pouvant contenir jusqu'à 100 caractères.

  • Prend en charge le contrôle de la synthèse vocale à l'aide de SSML.

    Important

    Seules les balises <break>, <s>, <sub>, <w>, <phoneme> et <say-as> sont prises en charge.

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

Non

Duration

Float

  • La durée de la scène en secondes. Doit être ≥ 1 seconde.

  • Ceci n'est effectif que si aucune voix off n'est fournie. Si une voix off existe, la durée de la scène est automatiquement déterminée par la longueur de la voix off.

5

Non

Volume

Float

  • Le volume de la vidéo d'entrée pour cette scène. S'il est défini, il remplace le volume global défini dans EditingConfig.MediaConfig.Volume pour cette scène.

  • Plage de valeurs : [0, 10,0]. Prend en charge deux décimales.

0.5

Non

Exemple : Mode Scripts globaux

{
  // 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"
  ]
}

Exemple : mode 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

Le paramètre EditingConfig contrôle les titres, le volume, le positionnement et d'autres paramètres de production. Laissez ce champ vide pour utiliser les valeurs par défaut.

Remarque

Les paramètres sont identiques pour les deux modes de génération.

Paramètre

Type

Description

Exemple

Obligatoire

MediaConfig

JSON

Configuration des assets vidéo d'entrée.

Exemple de paramètre

Non

TitleConfig

JSON

Configuration des titres.

Exemple de paramètre

Non

SubHeadingConfig

JSON

Configuration des sous-titres multiniveaux.

Champs JSON :

Exemple de paramètre

Non

SpeechConfig

JSON

Configuration de la voix off.

Exemple de paramètre

Non

BackgroundMusicConfig

JSON

Configuration de la musique de fond.

{"Volume":0.2}

Non

BackgroundImageConfig

JSON

Configuration de l'image d'arrière-plan. Sans effet si une image d'arrière-plan est spécifiée dans InputConfig.

{"SubType":"Blur","Radius":0.5}

Non

ProcessConfig

JSON

Configuration du processus de mixage et de montage.

Exemple de paramètre

Non

FECanvas

JSON

Configuration du canevas pour l'aperçu frontal.

{"Width": 1080,"Height": 1920}

Non

ProduceConfig

JSON

Configuration standard de montage et de production. Pour les champs, consultez EditingProduceConfig.

{"AutoRegisterInputVodMedia":true,"OutputWebmTransparentChannel":true,"CoverConfig":{"StartTime":3.3},"AudioChannelCopy":"left","PipelineId":"d54a97cff4108b555b01166d4b","MaxBitrate":5000,"KeepOriginMaxBitrate":false,"KeepOriginVideoMaxFps":false}

Non

ProcessConfig

Paramètre

Type

Description

Exemple

Obligatoire

SingleShotDuration

Float

Durée de chaque plan segmenté (en secondes) lors du fractionnement des assets vidéo longs.

5

Non. Valeur par défaut : 3.

EnableClipSplit

Boolean

Active le fractionnement des clips par IA (fractionne les assets longs en fonction des changements de scène). Si la valeur est true, SingleShotDuration est ignoré.

false

Non. Valeur par défaut : false.

AllowVfxEffect

Boolean

Indique s'il faut ajouter des effets spéciaux.

true

Non. Valeur par défaut : false.

VfxEffectProbability

Float

Probabilité d'application d'un effet à chaque clip. Plage : 0,0 à 1,0. Prend en charge 2 décimales.

0.6

Non. Valeur par défaut : 0,5.

VfxFirstClipEffectList

List<String>

  • Si la liste n'est pas vide, l'effet pour le premier clip de la vidéo sera choisi dans cette liste.

  • Si la liste est vide, un effet aléatoire est choisi parmi les valeurs par défaut suivantes : slightshow, starfieldshinee, starfieldshinee2, starsparkle, colorfulripples, starfield.

  • Exemples d'effets : Exemples d'effets spéciaux.

["slightshow","starfieldshinee"]

Non

VfxNotFirstClipEffectList

List<String>

  • Si la liste n'est pas vide, les effets pour tous les clips autres que le premier seront choisis dans cette liste.

  • Si la liste est vide, un effet aléatoire est choisi parmi les valeurs par défaut suivantes : zoomslight, zoom, zoominout, slightshake.

  • Exemples d'effets : Exemples d'effets spéciaux.

["zoomslight","zoom"]

Non

AllowTransition

Boolean

Indique s'il faut ajouter des effets de transition.

true

Non. Valeur par défaut : false.

TransitionDuration

Float

Durée des transitions en secondes. Si TransitionDuration > ClipDuration - 1, la transition pour ce clip ne sera pas appliquée.

0.5

Non. Valeur par défaut : 0,5.

TransitionList

List<String>

Une liste de transitions personnalisées. Si AllowTransition est défini sur true, une transition aléatoire de cette liste sera utilisée. Pour connaître les transitions disponibles, consultez Effets de transition. Si cette liste est vide, une transition aléatoire est choisie parmi : linearblur, colordistance, crosshatch, dreamyzoom, doomscreentransition_up.

["directional", "linearblur"]

Non

UseUniformTransition

Boolean

Indique s'il faut utiliser une transition uniforme tout au long d'une même vidéo.

true

Non. Valeur par défaut : true.

AllowFilter

Boolean

Indique s'il faut ajouter des filtres personnalisés.

false

Non. Valeur par défaut : false.

FilterList

List<String>

Une liste de filtres personnalisés. Si AllowFilter est défini sur true, un filtre aléatoire de cette liste est appliqué. Pour connaître les filtres disponibles, consultez Filtres. Si cette liste est vide, aucun filtre n'est appliqué.

["m1", "m2"]

Non

AllowDuplicateMatch

Boolean

Indique si un clip correspondant peut être réutilisé.

false

Non. Valeur par défaut : false.

ImageDuration

Float

La durée des assets d'images statiques, en secondes.

2

Non. Valeur par défaut : 2.

Exemple

Tous les paramètres EditingConfig sont facultatifs. Configuration par défaut :

{
  "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

TemplateConfig contient les paramètres communs pour la production vidéo par lots. Pour obtenir les paramètres détaillés et des exemples, consultez TemplateConfig.

OutputConfig

Remarque
  • OutputConfig spécifie la destination de sortie, le nommage, la résolution et le nombre de vidéos.

  • Les paramètres s'appliquent aux deux modes de génération.

Parameter

Type

Description

Example

Required

MediaURL

String

L'URL de la vidéo de sortie, qui doit inclure l'espace réservé {index}.

Format : http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name]_{index}.mp4

Exemple : http://example.oss-cn-shanghai.aliyuncs.com/example/example_{index}.mp4

Obligatoire si GeneratePreviewOnly est false et que la sortie est dirigée vers OSS.

StorageLocation

String

L'emplacement de stockage des éléments multimédias envoyés vers ApsaraVideo VOD.

Format : [your-vod-bucket].oss-[your-region-id].aliyuncs.com

Exemple : outin-**6c886b4549d481030f6e**.oss-cn-shanghai.aliyuncs.com

Obligatoire si GeneratePreviewOnly est false et que la sortie est dirigée vers VOD.

FileName

String

Le nom du fichier de sortie, qui doit inclure l'espace réservé {index}.

Format : [your-file-name]__{index}.mp4

Exemple : example_{index}.mp4

Obligatoire si GeneratePreviewOnly est false et que la sortie est dirigée vers VOD.

GeneratePreviewOnly

Boolean

  • Si la valeur est true, la tâche génère uniquement une chronologie de prévisualisation sans produire réellement de vidéo. L'URL de sortie n'est pas requise.

  • Une fois la tâche terminée, vous pouvez interroger le résultat à l'aide de GetBatchMediaPoducingJob pour obtenir l'ID du projet de montage (projectId), puis appeler GetEditingProject pour récupérer la chronologie de prévisualisation.

false

Non. Valeur par défaut : false.

Count

Integer

Le nombre de vidéos à générer en sortie.

  • Scripts globaux : jusqu'à 100.

  • Script de storyboard : jusqu'à 100.

10

Non. Valeur par défaut : 1.

MaxDuration

Float

La durée maximale de chaque vidéo de sortie, en secondes.

Si un paramètre SpeechText est fourni, ce paramètre est ignoré et la durée de la vidéo correspond à la longueur de la voix off.

Si aucun paramètre SpeechText n'est fourni, la durée de la vidéo ne dépassera pas cette valeur.

20

Non. Valeur par défaut : 15.

FixedDuration

Float

La durée fixe de chaque vidéo de sortie. Si ce paramètre est défini, la durée de la vidéo sera ajustée pour correspondre à cette valeur.

Remarque :

  • Non pris en charge dans le mode Script de storyboard.

  • Pris en charge dans le mode Scripts globaux uniquement si le tableau SpeechTextArray est vide.

  • Vous ne pouvez choisir qu'un seul paramètre entre FixedDuration et MaxDuration.

20

Non. Valeur par défaut : 15.

Width

Integer

La largeur de la vidéo de sortie en pixels.

1080

Oui

Height

Integer

La hauteur de la vidéo de sortie en pixels.

1920

Oui

Video

JSONObject

Configuration du flux vidéo de sortie, telle que CRF et le codec.

{"Crf": 27}

Non

Exemple

{
 	"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
}

Exemples SDK

Prérequis

Vous avez installé le SDK serveur IMS. Pour plus d'informations, consultez Premiers pas.

Exemple de code

Cet exemple utilise le mode Scripts globaux.

Développer pour voir l'exemple de code

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;
            }
        }
    }
}

Paramètres d'entrée de l'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"
}

Logique de traitement et configuration avancée

Logique de traitement

Mode Script global :

  • Si des éléments vidéo sont sélectionnés dans la bibliothèque de recherche à partir d'un texte descriptif, ce texte sert de requête pour identifier intelligemment les extraits vidéo correspondants.

  • Si une vidéo longue est fournie en entrée, elle est d'abord découpée en plans plus courts. La vidéo finale combine ces plans. La durée par défaut de chaque plan est de 3 secondes ; vous pouvez la personnaliser à l'aide du paramètre SingleShotDuration.

  • En l'absence de voix off, le système sélectionne et assemble aléatoirement des extraits vidéo pour générer une vidéo d'environ 15 secondes.

  • Si une voix off est fournie, le système associe intelligemment les visuels au texte et les synchronise avec la narration afin de produire plusieurs vidéos par lot.

Mode Script de storyboard :

  • Lorsque des éléments vidéo sont sélectionnés dans la bibliothèque de recherche à partir d'un texte descriptif, celui-ci permet de rechercher et d'extraire intelligemment les extraits vidéo pertinents.

  • Dans ce mode, ne définissez pas SpeechTextArray. Contrôlez le contenu, la durée et la voix off de chaque scène via SceneInfo.ShotInfo.ShotScripts.

  • Au sein d'une même scène, le système tente d'abord d'associer et de recadrer les extraits en fonction du ScriptText. Si le ScriptText n'est pas renseigné mais que le SpeechText l'est, l'association se base sur la voix off.

  • La durée d'une scène est synchronisée soit avec la longueur de la voix off, soit avec une durée personnalisée.

Configuration avancée

Pour les paramètres avancés, consultez la rubrique Logique et configurations avancées pour la création vidéo en un clic par lot.

Références