Découvrez les paramètres de production, les configurations avancées et des exemples de 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 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.
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 :
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 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 MediaGroupArray sont vides, le mode Global Scripts est utilisé.
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,EditingConfigetOutputConfigci-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. |
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 1","Sous-titre niveau 1 2"]},{"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 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. |
|
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 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> |
|
["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 pour la vidéo et 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 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é |
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é |
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 |
|
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.
|
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 |
|
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
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.
Paramètres d'entrée de l'API
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.
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 est calculée la durée d'affichage d'une image 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 lots.
GetBatchMediaProducingJob : récupère les détails d'une tâche de production vidéo par lots.