Découvrez les paramètres de production, les configurations avancées et des exemples SDK pour Script-to-Video.
Script-to-Video et Image-Text Matching utilisent tous deux l'API SubmitBatchMediaProducingJob pour soumettre une tâche. Pour les différencier 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.
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 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 :
Si SpeechTextArray n'est pas vide, le mode Global Scripts est utilisé.
Si SpeechTextArray est vide et qu'au moins un élément MediaGroup.Duration ou MediaGroup.SpeechTextArray dans le tableau MediaGroupArray n'est pas vide, le mode Segmented Scripts est utilisé.
Si SpeechTextArray est vide et que toutes les valeurs MediaGroup.Duration et MediaGroup.SpeechTextArray dans le tableau MediaGroupArray sont vides, le mode Global Scripts est utilisé.
Remarques d'utilisation
Pour soumettre une tâche de production vidéo par lots qui mélange intelligemment plusieurs ressources vidéo, audio et image, consultez l'API SubmitBatchMediaProducingJob. Les principaux paramètres de l'API sont détaillés dans les sections
InputConfig,EditingConfigetOutputConfigci-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 ressources de base : clips vidéo, voix off, musique de fond et autocollants.
Paramètre | Type | Description | Exemple | Obligatoire | Modes pris en charge |
MediaGroupArray | List<MediaGroup> | Spécifiez les ressources source. Prend en charge le regroupement des ressources. 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 un contenu à chaque groupe. | Oui |
| |
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 |
|
SubHeadingArray | List<SubHeading> | Paramètres de sous-titres multiniveaux. | [{"Level":1,"TitleArray":["Sous-titre niveau 1","Sous-titre niveau 1"]},{"Level":3,"TitleArray":["Sous-titre niveau 3"]}] | Non |
|
SpeechTextArray | List<String> |
| ["Contenu voix off 1","Contenu voix off 2"] | Non |
|
StickerArray | List<Sticker> |
| [{"MediaId":"**9d46c8b4548681030f6e**","X":10,"Y":100,"Width":300,"Height":300,"Opacity":0.6}] | Non |
|
BackgroundMusicArray | List<String> |
| ["**b4549d46c88681030f6e","549d46c88b4681030f6e**"] | Non |
|
BackgroundImageArray | List<String> |
| ["**b4549d46c88681030f6e","549d46c88b4681030f6e**"] | Non |
|
MediaGroup
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 |
|
MediaArray | List<String> |
| **b4549d46c88681030f6e** | Oui |
|
SpeechTextArray | List<String> |
| ["Contenu voix off 1","Contenu voix off 2"] | Non |
|
Duration | Float | Durée du groupe actuel, en secondes. À utiliser uniquement lorsque | 10 | Non. Par défaut : 5. |
|
SplitMode | String |
| NoSplit | Non. Par défaut : AverageSplit. |
|
Volume | Float |
| 0,5 | Non |
|
DurationAutoAdapt | Boolean | Indique s'il faut activer l'adaptation automatique de la durée pour ce groupe. Si cette option est activée 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. |
|
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.
Tous les paramètres sont pris en charge dans les modes Global Scripts et Segmented Scripts, à l'exception des éléments suivants :
ProcessConfig.AlignmentMode n'est effectif qu'en mode Global Scripts.
SpeechConfig.SpecialWordsConfig n'est effectif qu'en mode Segmented Scripts.
Parameter | Type | Description | Example | Required |
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 | |
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 |
JSON | Configuration de la voix off. | No | ||
JSON | Configuration de la musique de fond. | {"Volume":0.2} | No | |
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 | |
JSON | Configuration du processus de mixage et de montage. | No | ||
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 des ressources vidéo longues, 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> |
| ["slightshow","starfieldshinee"] | No |
VfxNotFirstClipEffectList | List<String> |
| ["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 | 0.5 | Non. Par défaut : 0,5. |
TransitionList | List<String> | Liste de transitions personnalisées. Si | ["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 | ["m1", "m2"] | No |
AlignmentMode | String | Mode d'alignement de la vidéo et de la voix off. Effectif uniquement en mode Global Scripts. Valeurs valides :
| 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 vidéo par lot. Pour obtenir des détails sur les paramètres et des exemples, voir TemplateConfig.
Paramètres OutputConfig
Le paramètre OutputConfig définit la destination de sortie, les conventions de nommage, la résolution et le nombre de vidéos.
Ces paramètres s'appliquent aux deux modes.
Paramètre | Type | Description | Exemple | Obligatoire |
MediaURL | String | URL de la vidéo de sortie. Doit inclure l'espace réservé | 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 | Obligatoire si GeneratePreviewOnly est false et que la sortie est dirigée vers OSS. |
StorageLocation | String | Emplacement de stockage des ressources multimédias envoyées vers ApsaraVideo VOD. | Règle : [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 | Nom du fichier de sortie. Doit inclure l'espace réservé | Règle : [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 |
| false | Non. Valeur par défaut : false. |
Count | Integer | Nombre de vidéos à générer. Maximum : 100. | 10 | Non. Valeur par défaut : 1. |
MaxDuration | Float | Durée maximale par vidéo de sortie, en secondes.
| 20 | Non. Valeur 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 est ajustée à cette valeur.
| 20 | Non. Valeur par défaut : 15. |
Width | Integer | Largeur de la vidéo de sortie, en pixels. | 1080 | Oui |
Height | Integer | Hauteur de la vidéo de sortie, en pixels. | 1920 | Oui |
JSON | Configuration du flux vidéo de sortie (CRF, codec, etc.). | {"Crf": 27} | Non |
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 introduction et une conclusion avec le mode Scripts segmentés
Cas d'utilisation
Ajoutez une introduction et une conclusion cohérentes en définissant MediaGroup.SplitMode sur NoSplit pour le premier et le dernier groupe ; le système diffuse alors intégralement un élément sélectionné aléatoirement dans ces groupes.
Exemple de code
Exemple 2 : Créer une vidéo de montage facial
Bonnes pratiques pour la création de vidéos de montage facial.
Exemple 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.
Paramètres d'entrée de l'API
Configurations avancées
Pour les paramètres avancés, consultez Logique et configurations avancées pour la création de vidéos en lot en un clic.
FAQ
Pour les questions fréquemment posées sur Script vers vidéo, consultez FAQ.
Comment résoudre les changements de scène brusques ou trop fréquents ?
Comment contrôler le rythme des changements de scène et la durée des plans ?
Comment la durée d'affichage d'une image est-elle calculée dans la vidéo finale ?
Comment garantir qu'un clip vidéo soit lu dans son intégralité dans la vidéo finale ?
Comment alterner entre des clips vidéo avec audio original et des clips avec narration vocale ?
Références
SubmitBatchMediaProducingJob : soumet une tâche de production vidéo par lot.
GetBatchMediaProducingJob : récupère les détails d'une tâche de production vidéo par lot.