Tous les produits
Search
Centre de documentation

Intelligent Media Services:Script-to-Video

Dernière mise à jour :Aug 11, 2026

Découvrez les paramètres de production, les configurations avancées et des exemples de SDK pour Script-to-Video.

Important
  • Script-to-Video et Image-Text Matching utilisent tous deux l'API SubmitBatchMediaProducingJob pour soumettre une tâche. Pour les distinguer en fonction des paramètres, consultez la section Différences de paramètres.

  • Dans cette API, la région spécifiée dans l'URL OSS de toutes les ressources 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.

  • En pratique, remplacez tous les espaces réservés dans les exemples, tels que [your-bucket], [your-region-id], [your-file-name], [your-file-path] et les ID de ressources multimédias (« **9d46c8b4548681030f6e** »), par vos valeurs réelles.

Remarque
  • Pour mieux comprendre ce document, commencez par lire le guide Production vidéo par lot afin de vous familiariser avec les concepts et le flux de travail de Script-to-Video.

  • Script-to-Video prend en charge deux modes de production : Global Scripts et Segmented Scripts.

    • Global Scripts : Combine aléatoirement plusieurs scripts de voix off complets avec des ressources vidéo pour générer un grand nombre de vidéos au style similaire.

    • Segmented Scripts : Divise un script de voix off en plusieurs segments et associe chaque segment à un groupe spécifique de ressources.

    • Le mode est déterminé par la logique de paramétrage suivante :

Remarques sur l'utilisation

  • Pour soumettre une tâche de production vidéo par lot qui mélange intelligemment plusieurs ressources vidéo, audio et image, consultez la documentation relative à 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 lot, consultez GetBatchMediaProducingJob.

InputConfig

InputConfig spécifie les ressources de base : clips vidéo, voix off, musique d'arrière-plan et autocollants.

Paramètre

Type

Description

Exemple

Obligatoire

Modes pris en charge

MediaGroupArray

List<MediaGroup>

Spécifiez les ressources sources. La mise en groupe des ressources est prise en charge.

Nom du groupe : Jusqu'à 50 caractères. Les emojis ne sont pas pris en charge.

Liste de contenus : ID de ressource multimédia ou URL OSS du contenu.

Prend en charge un maximum de 40 groupes, chacun contenant jusqu'à 200 contenus. Si vous ajoutez plusieurs contenus au même groupe, le système en sélectionne un au hasard pour chaque tâche de production. Pour utiliser plusieurs contenus, créez des groupes distincts et ajoutez-y un contenu par groupe.

Exemple : mode Global Scripts

Exemple : mode Segmented Scripts

Oui

  • Global Scripts

  • Segmented Scripts

TitleArray

List<String>

Un tableau de titres. Un titre est sélectionné au hasard pour chaque production.

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

["Titre 1","Titre 2"]

Non

  • Global Scripts

  • Segmented Scripts

SubHeadingArray

List<SubHeading>

Paramètres de sous-titres multiniveaux.

[{"Level":1,"TitleArray":["Sous-titre niveau 1 1","Sous-titre niveau 1 2"]},{"Level":3,"TitleArray":["Sous-titre niveau 3"]}]

Non

  • Global Scripts

  • Segmented Scripts

SpeechTextArray

List<String>

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

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

  • Prise en charge du contrôle de la synthèse vocale via SSML.

  • La langue par défaut est le chinois (zh). Pour définir d'autres langues, consultez SpeechLanguage.

    Important

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

["Contenu voix off 1","Contenu voix off 2"]

Non

  • Global Scripts

StickerArray

List<Sticker>

  • Un tableau d'autocollants. Un autocollant est sélectionné au hasard pour chaque production. Maximum de 50 autocollants.

  • 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, ...

  • Pour connaître les formats pris en charge, consultez la section Formats d'image.

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

Non

  • Global Scripts

  • Segmented Scripts

BackgroundMusicArray

List<String>

  • Un tableau de pistes musicales d'arrière-plan. Une piste est sélectionnée au hasard pour chaque production. Maximum de 50 pistes. Prend en charge les ID de ressources multimédias ou les URL OSS.

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

  • Pour connaître les formats pris en charge, consultez la section Formats audio.

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

Non

  • Global Scripts

  • Segmented Scripts

BackgroundImageArray

List<String>

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

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

  • Pour connaître les formats pris en charge, consultez la section Formats d'image.

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

Non

  • Global Scripts

  • Segmented Scripts

MediaGroup

Remarque

Les différences de paramètres MediaGroup entre Global Scripts et Segmented Scripts sont indiquées dans la colonne Modes pris en charge.

Paramètre

Type

Description

Exemple

Obligatoire

Modes pris en charge

GroupName

String

Nom du groupe. Maximum de 50 caractères, sans emojis.

Groupe1

Oui

  • Global Scripts

  • Segmented Scripts

MediaArray

List<String>

  • Une liste de ressources, prenant en charge les ID de ressources multimédias ou les URL. Maximum de 200 ressources. Si vous ajoutez plusieurs ressources à MediaArray, le système en sélectionne une au hasard pour chaque tâche de production. Pour faire participer toutes les ressources à la vidéo produite, créez plusieurs groupes dans MediaGroupArray et ajoutez une ressource à chaque groupe.

  • Pour connaître les formats pris en charge, consultez la section Formats vidéo.

**b4549d46c88681030f6e**

Oui

  • Global Scripts

  • Segmented Scripts

SpeechTextArray

List<String>

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

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

  • Prise en charge du contrôle de la synthèse vocale via SSML.

    Important

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

["Contenu voix off 1","Contenu voix off 2"]

Non

  • Segmented Scripts

Duration

Float

Durée du groupe actuel, en secondes. À utiliser uniquement lorsque SpeechTextArray est vide.

10

Non. Par défaut : 5.

  • Global Scripts

SplitMode

String

NoSplit

Non. Par défaut : AverageSplit.

  • Global Scripts

  • Segmented Scripts

Volume

Float

  • Volume de la vidéo d'entrée pour ce groupe. Si défini, il remplace EditingConfig.MediaConfig.Volume pour ce groupe.

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

0,5

Non

  • Global Scripts

DurationAutoAdapt

Boolean

Indique s'il faut activer l'adaptation automatique de la durée pour ce groupe. Si activé et qu'aucune voix off n'est présente, la durée du groupe sera ajustée pour garantir que les clips vidéo soient lus à leur vitesse d'origine.

true

Non. Par défaut : false.

  • Global Scripts

Exemple : mode 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"
  ]
}

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

Le paramètre EditingConfig définit le volume, le positionnement et d'autres réglages de production.

Remarque

Tous les paramètres sont pris en charge dans les modes Global Scripts et Segmented Scripts, à l'exception des éléments suivants :

Parameter

Type

Description

Example

Required

MediaConfig

JSON

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

{"Volume":"1","MediaMetaDataArray":[{"Media":"**6c886b4549d481030f6e**","GroupName":"GroupA","TimeRangeList":[{"In":"0","Out":"1"},{"In":"2","Out":"3"}]}]}

No

TitleConfig

JSON

Configuration des titres.

{"Alignment":"TopCenter","AdaptMode":"AutoWrap","Font":"Alibaba PuHuiTi 2.0 95 ExtraBold","SizeRequestType":"Nominal","Y":0.1}

No

SubHeadingConfig

JSON

Configuration des sous-titres multiniveaux.

Champs JSON :

{"1":{"Y":0.3,"FontSize":40},"3":{"Y":0.5,"FontSize":30}}

No

SpeechConfig

JSON

Configuration de la voix off.

Voir Exemples de paramètres EditingConfig

No

BackgroundMusicConfig

JSON

Configuration de la musique de fond.

{"Volume":0.2}

No

BackgroundImageConfig

JSON

Configuration de l'image d'arrière-plan. Ignoré si une image d'arrière-plan est définie dans InputConfig.

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

No

ProcessConfig

JSON

Configuration du processus de mixage et de montage.

Voir Exemples de paramètres EditingConfig

No

FECanvas

JSON

Configuration du canevas pour l'aperçu frontal.

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

No

ProduceConfig

JSON

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

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

No

ProcessConfig

Parameter

Type

Description

Example

Required

SingleShotDuration

Float

Durée de chaque plan segmenté automatiquement lors du fractionnement de longues ressources vidéo, en secondes.

5

Non. Par défaut : 3.

AllowVfxEffect

Boolean

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

true

Non. 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. Par défaut : 0,5.

VfxFirstClipEffectList

List<String>

  • Si la liste n'est pas vide, l'effet du 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.

  • Pour des exemples d'effets, consultez Exemples d'effets spéciaux.

["slightshow","starfieldshinee"]

No

VfxNotFirstClipEffectList

List<String>

  • Si la liste n'est pas vide, les effets de 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.

  • Pour des exemples d'effets, consultez Exemples d'effets spéciaux.

["zoomslight","zoom"]

No

AllowTransition

Boolean

Indique s'il faut ajouter des effets de transition.

true

Non. 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. Par défaut : 0,5.

TransitionList

List<String>

Liste de transitions personnalisées. Si AllowTransition est défini sur true, une transition aléatoire de cette liste sera utilisée. Pour 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"]

No

UseUniformTransition

Boolean

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

true

Non. Par défaut : true.

AllowFilter

Boolean

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

false

Non. Par défaut : false.

FilterList

List<String>

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

["m1", "m2"]

No

AlignmentMode

String

Mode d'alignement pour la vidéo et la voix off. Effectif uniquement en mode Global Scripts.

Valeurs valides :

  • AutoSpeed : la durée de la piste vidéo est mise à l'échelle pour correspondre à la piste audio.

  • Cut : la piste vidéo est tronquée pour correspondre à la piste audio.

AutoSpeed

Non. Par défaut : AutoSpeed.

ImageDuration

Float

Durée des ressources d'images statiques, en secondes.

2

Non. Par défaut : 2.

Exemple de paramètre

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

Le paramètre TemplateConfig contient les paramètres communs pour la production de vidéos par lots. Pour obtenir la liste détaillée des paramètres et des exemples, consultez TemplateConfig.

Paramètres OutputConfig

Le paramètre OutputConfig spécifie la destination de sortie, les conventions de nommage, la résolution et le nombre de vidéos.

Les paramètres s'appliquent aux deux modes.

Parameter

Type

Description

Example

Required

MediaURL

String

URL de la vidéo de sortie. Doit inclure l'espace réservé {index}.

Règle : 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

Requis si GeneratePreviewOnly est false et si la sortie est destinée à OSS.

StorageLocation

String

Emplacement de stockage des ressources multimédias exportées vers ApsaraVideo VOD.

Règle : [your-vod-bucket].oss-[your-region-id].aliyuncs.com

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

Requis si GeneratePreviewOnly est false et si la sortie est destinée à VOD.

FileName

String

Nom du fichier de sortie. Doit inclure l'espace réservé {index}.

Règle : [your-file-name]__{index}.mp4

Exemple : example_{index}.mp4

Requis si GeneratePreviewOnly est false et si la sortie est destinée à VOD.

GeneratePreviewOnly

Boolean

  • Si la valeur est true, la tâche génère uniquement une chronologie d'aperçu 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 d'aperçu.

false

Non. Par défaut : false.

Count

Integer

Nombre de vidéos à exporter. Maximum : 100.

10

Non. Par défaut : 1.

MaxDuration

Float

Durée maximale par vidéo de sortie, en secondes.

20

Non. Par défaut : 15.

FixedDuration

Float

Durée fixe par vidéo de sortie. Si ce paramètre est défini, la durée de la vidéo s'ajuste à cette valeur.

  • Non pris en charge en mode Segmented Scripts.

  • En mode Global Scripts, ce paramètre est pris en charge lorsque SpeechTextArray est vide.

  • Vous pouvez définir soit FixedDuration, soit MaxDuration.

  • Règles de durée vidéo.

20

Non. Par défaut : 15.

Width

Integer

Largeur de la vidéo de sortie, en pixels.

1080

Yes

Height

Integer

Hauteur de la vidéo de sortie, en pixels.

1920

Yes

Video

JSON

Configuration du flux vidéo de sortie (CRF, codec, etc.).

{"Crf": 27}

No

Exemple de paramètre

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

Application

Exemple 1 : Configurer une intro et une outro avec le mode Segmented Scripts

Cas d'utilisation

Ajoutez une intro et une outro cohérentes en définissant MediaGroup.SplitMode sur NoSplit pour les premier et dernier groupes ; le système lit alors intégralement une ressource sélectionnée aléatoirement dans ces groupes.

Exemple de code

Cliquez pour afficher l'exemple InputConfig

{
    "mediaGroupArray": [
        {
            "duration": 4,
            "splitMode": "NoSplit",
            "groupName": "opening",
            "mediaArray": [
                "****e44009ee71f0b62bf6f7d44b****"
            ]
        },
        {
            "groupName": "group1",
            "mediaArray": [
                "****e44009eef1f0b62bf6f7d44b****"
            ],
            "speechTextArray": [
                "Wondering where to go for the holiday?",
                "Still hesitant about your holiday plans?"
            ]
        },
        {
            "groupName": "group2",
            "mediaArray": [
                "****e44009eeferfb62bf6f7d44b****",
                "****e440094fghf0b62bf6f7d44b****",
                "****e44009ee74fgh62bf6f7d44b****"
            ],
            "speechTextArray": [
                "Lugu Lake in Yunnan invites you for a date with nature. The azure lake is like a mirror, reflecting the unique customs of the Mosuo Kingdom of Women, as picturesque as a painting.",
                "Why not consider a natural feast at Lugu Lake in Yunnan? The azure, mirror-like lake reflects the unique folk customs of the Mosuo Kingdom of Women, picturesque and fascinating."
            ]
        },
        {
            "groupName": "group3",
            "mediaArray": [
                "****e44009ee7ft5662bf6f7d44b****"
            ],
            "speechTextArray": [
                "Come to Lugu Lake and share this quiet and charming landscape!",
                "Share the endless poetry brought by this quiet and charming landscape!"
            ]
        },
        {
            "duration": 4,
            "splitMode": "NoSplit",
            "groupName": "ending",
            "mediaArray": [
                "****e44009ee5fgfg62bf6f7d44b****"
            ]
        }
    ]
}

Cliquez pour afficher l'exemple EditingConfig

{
    "MediaConfig": {
        "MediaMetaDataArray": [
            {
                "Media": "****e44009eedttg62bf6f7d44b****",
                "GroupName": "opening",
                "TimeRangeList": [
                    {
                        "In": 1.5,
                        "Out": 5.5
                    }
                ]
            },
            {
                "Media": "****e44009ee7dfrf62bf6f7d44b****",
                "GroupName": "ending",
                "TimeRangeList": [
                    {
                        "In": 1.5,
                        "Out": 5.5
                    }
                ]
            }
        ]
    }
}

Cliquez pour afficher l'exemple OutputConfig

{
    "count": 10,
    "height": 1920,
    "mediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name]_{index}.mp4",
    "width": 1080,
    "widthHeightRatio": 0.5625
}

Exemple 2 : Créer une vidéo de montage facial

Bonnes pratiques pour la création de vidéos de montage facial.

Exemple avec le SDK

Prérequis

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

Exemple de code

Cet exemple utilise le mode Global Scripts.

Développer pour afficher l'exemple de code

package com.example;

import java.util.*;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import com.aliyun.ice20201109.Client;
import com.aliyun.ice20201109.models.*;
import com.aliyun.teaopenapi.models.Config;

/**
 *  You need to add the following Maven dependencies:
 *   <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 ScriptBatchEditingService {

    static final String regionId = "[your-region-id]"; // The feature is supported in cn-shanghai, cn-beijing, and cn-hangzhou.
    static final String bucket = "[your-bucket]";
    private Client iceClient;

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

    public void initClient() throws Exception {
        // An Alibaba Cloud account AccessKey has full access to all APIs. We recommend that you use a RAM user for API calls and routine O&M.
        // This example shows how to store the AccessKey ID and AccessKey secret in environment variables. For more information about how to configure them, see https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-access-credentials
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();

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

        // To hard-code the AccessKey ID and AccessKey secret, use the following code. However, we strongly recommend that you do not hard-code them in your project code. Otherwise, the AccessKey pair may be leaked, which compromises the security of all your resources.
        // config.accessKeyId = <The AccessKey ID created in Step 2>;
        // config.accessKeySecret = <The 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
        JSONObject mediaGroup1 = new JSONObject();
        mediaGroup1.put("GroupName", "start");
        mediaGroup1.put("MediaArray", Arrays.asList(
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-start-1.mp4"
        ));

        JSONObject mediaGroup2 = new JSONObject();
        mediaGroup2.put("GroupName", "middle");
        mediaGroup2.put("MediaArray", Arrays.asList(
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-1.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-2.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-3.mp4"
        ));

        JSONObject mediaGroup3 = new JSONObject();
        mediaGroup3.put("GroupName", "end");
        mediaGroup3.put("MediaArray", Arrays.asList(
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-end-1.mp4"
        ));

        JSONArray mediaGroupArray = new JSONArray();
        mediaGroupArray.add(mediaGroup1);
        mediaGroupArray.add(mediaGroup2);
        mediaGroupArray.add(mediaGroup3);

        // Narration scripts
        List<String> speechTextArray = Arrays.asList(
            "Wondering where to go for the holiday? Lugu Lake in Yunnan invites you for a date with nature. The azure lake is like a mirror, reflecting the unique customs of the Mosuo Kingdom of Women, as picturesque as a painting.",
            "Still hesitant about your holiday plans? Why not consider a natural feast at Lugu Lake in Yunnan? The azure, mirror-like lake reflects the unique folk customs of the Mosuo Kingdom of Women, picturesque and fascinating."
        );

        // Video titles
        List<String> titleArray = Arrays.asList(
            "Lugu Lake: Mosuo customs in a beautiful landscape",
            "Exploring the mysterious Lugu Lake",
            "Immersive experience of Lugu Lake"
        );

        JSONObject inputConfig = new JSONObject();
        inputConfig.put("MediaGroupArray", mediaGroupArray);
        inputConfig.put("SpeechTextArray", speechTextArray);
        inputConfig.put("TitleArray", titleArray);

        // 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/script/output_{index}_w.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 script 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

{
  "MediaGroupArray": [{
    "GroupName": "start",
    "MediaArray": [
      "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-start-1.mp4"
    ]
  },
    {
      "GroupName": "middle",
      "MediaArray": [
        "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-1.mp4",
        "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-2.mp4",
        "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-3.mp4"
      ]
    },
    {
      "GroupName": "end",
      "MediaArray": [
        "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-end-1.mp4"
      ]
    }
  ],
  "SpeechTextArray": [
    "Wondering where to go for the holiday? Lugu Lake in Yunnan invites you for a date with nature. The azure lake is like a mirror, reflecting the unique customs of the Mosuo Kingdom of Women, as picturesque as a painting.",
    "Still hesitant about your holiday plans? Why not consider a natural feast at Lugu Lake in Yunnan? The azure, mirror-like lake reflects the unique folk customs of the Mosuo Kingdom of Women, picturesque and fascinating."
  ],
  "TitleArray": [
    "Lugu Lake: Mosuo customs in a beautiful landscape",
    "Exploring the mysterious Lugu Lake",
    "Immersive experience of Lugu Lake"
  ]
}

OutputConfig

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

Configurations avancées

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

FAQ

Pour les questions fréquentes concernant la fonctionnalité Script-to-Video, consultez la rubrique FAQ.

Références