Pelajari parameter produksi, konfigurasi lanjutan, dan contoh SDK untuk Script-to-Video.
-
Baik Script-to-Video maupun Image-Text Matching menggunakan API SubmitBatchMediaProducingJob untuk mengirimkan tugas. Untuk membedakan keduanya berdasarkan parameter, lihat Perbedaan parameter.
-
Dalam API ini, wilayah yang ditentukan dalam URL OSS dari semua aset media harus sama dengan titik akhir layanan OpenAPI.
-
Wilayah yang didukung: Tiongkok (Shanghai), Tiongkok (Beijing), Tiongkok (Hangzhou), Tiongkok (Shenzhen), AS (Silicon Valley), dan Singapura.
-
Dalam praktiknya, ganti semua placeholder dalam contoh, seperti [your-bucket], [your-region-id], [your-file-name], [your-file-path], dan ID aset media ("****9d46c8b4548681030f6e****"), dengan nilai aktual Anda.
-
Untuk memahami dokumen ini dengan lebih baik, bacalah terlebih dahulu panduan Produksi video batch guna memahami konsep dan alur kerja Script-to-Video.
-
Script-to-Video mendukung dua mode produksi: Global Scripts dan Segmented Scripts.
-
Global Scripts: Menggabungkan beberapa skrip narasi lengkap secara acak dengan aset video untuk menghasilkan sejumlah besar video dengan gaya serupa.
-
Segmented Scripts: Memecah skrip narasi menjadi beberapa segmen dan mencocokkan setiap segmen dengan kelompok aset tertentu.
-
Mode ditentukan oleh logika parameter berikut:
-
Jika SpeechTextArray tidak kosong, maka dianggap sebagai mode Global Scripts.
-
Jika SpeechTextArray kosong, dan setidaknya satu MediaGroup.Duration atau MediaGroup.SpeechTextArray dalam MediaGroupArray tidak kosong, maka dianggap sebagai mode Segmented Scripts.
-
Jika SpeechTextArray kosong, dan semua nilai MediaGroup.Duration dan MediaGroup.SpeechTextArray dalam MediaGroupArray kosong, maka dianggap sebagai mode Global Scripts.
-
-
Catatan penggunaan
-
Untuk mengirimkan pekerjaan produksi video batch yang secara cerdas mencampurkan berbagai aset video, audio, dan gambar, lihat SubmitBatchMediaProducingJob. Parameter API utama dijelaskan secara rinci dalam bagian
InputConfig,EditingConfig, danOutputConfigdi bawah ini. -
Untuk mendapatkan informasi detail tentang pekerjaan pembuatan video batch, lihat GetBatchMediaProducingJob.
InputConfig
InputConfig menentukan aset dasar: klip video, narasi, musik latar, dan stiker.
|
Parameter |
Tipe |
Deskripsi |
Contoh |
Wajib |
Mode yang didukung |
|
MediaGroupArray |
List<MediaGroup> |
Tentukan aset sumber. Mendukung pengelompokan aset. Nama kelompok: Maksimal 50 karakter. Emoji tidak didukung. Daftar materi: ID aset media atau URL OSS materi. Mendukung maksimal 40 kelompok, masing-masing berisi hingga 200 materi. Jika Anda menambahkan beberapa materi ke kelompok yang sama, sistem akan memilih satu secara acak untuk setiap pekerjaan produksi. Untuk menggunakan beberapa materi, buatlah kelompok terpisah dan tambahkan satu materi ke setiap kelompok. |
Ya |
|
|
|
TitleArray |
List<String> |
Array judul. Satu judul dipilih secara acak untuk setiap produksi. Maksimal 50 judul, masing-masing hingga 50 karakter. |
["Title 1","Title 2"] |
Tidak |
|
|
SubHeadingArray |
List<SubHeading> |
Pengaturan subjudul multi-level. |
[{"Level":1,"TitleArray":["Level 1 subtitle 1","Level 1 subtitle 2"]},{"Level":3,"TitleArray":["Level 3 subtitle"]}] |
Tidak |
|
|
SpeechTextArray |
List<String> |
|
["Voiceover content 1","Voiceover content 2"] |
Tidak |
|
|
StickerArray |
List<Sticker> |
|
[{"MediaId":"****9d46c8b4548681030f6e****","X":10,"Y":100,"Width":300,"Height":300,"Opacity":0.6}] |
Tidak |
|
|
BackgroundMusicArray |
List<String> |
|
["****b4549d46c88681030f6e****","****549d46c88b4681030f6e****"] |
Tidak |
|
|
BackgroundImageArray |
List<String> |
|
["****b4549d46c88681030f6e****","****549d46c88b4681030f6e****"] |
Tidak |
|
MediaGroup
Perbedaan parameter MediaGroup antara Global Scripts dan Segmented Scripts ditunjukkan pada kolom Mode yang didukung.
|
Parameter |
Tipe |
Deskripsi |
Contoh |
Wajib |
Mode yang didukung |
|
GroupName |
String |
Nama kelompok. Maksimal 50 karakter, tanpa emoji. |
Group1 |
Ya |
|
|
MediaArray |
List<String> |
|
****b4549d46c88681030f6e**** |
Ya |
|
|
SpeechTextArray |
List<String> |
|
["Voiceover content 1","Voiceover content 2"] |
Tidak |
|
|
Duration |
Float |
Durasi untuk kelompok saat ini, dalam detik. Gunakan hanya ketika |
10 |
Tidak. Default: 5. |
|
|
SplitMode |
String |
|
NoSplit |
Tidak. Nilai default: AverageSplit. |
|
|
Volume |
Float |
|
0.5 |
Tidak |
|
|
DurationAutoAdapt |
Boolean |
Apakah akan mengaktifkan adaptasi durasi otomatis untuk kelompok ini. Jika diaktifkan dan tidak ada narasi, durasi kelompok akan disesuaikan agar klip video diputar dengan kecepatan aslinya. |
true |
Tidak. Default: false. |
|
Contoh: 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 membuka lokasi baru di Huilongguan",
"Toko Freshippo baru dibuka"
],
"SubHeadingArray": [
{
"Level": 1,
"TitleArray": ["Subtitle 1", "Subtitle 2"]
},
{
"Level": 3,
"TitleArray": ["Subtitle level 3"]
}
],
"SpeechTextArray": [
"Toko Freshippo baru saja dibuka di mal terdekat. Ini adalah pembukaan resmi hari ini, jadi saya langsung datang untuk melihatnya. Tokonya tidak terlalu besar, tetapi penuh sesak. Camilan dan minumannya cukup murah, dan antrian kasirnya sangat panjang. Datang dan lihat sendiri!",
"Toko Freshippo baru saja dibuka di mal terdekat. Ini adalah pembukaan resmi hari ini, jadi saya langsung datang untuk melihatnya.",
"<speak>Hari ini, pahlawan kita, legenda tenis meja <phoneme alphabet=\"ipa\" ph=\"mɑː lʊŋ\">Ma Long</phoneme>, sedang berjuang untuk mencapai puncak kejayaan.</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"
]
}
Contoh: 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": ["Toko Freshippo baru saja dibuka di mal terdekat.", "Ini adalah pembukaan resmi hari ini.", "<speak>Hari ini, pahlawan kita, legenda tenis meja <phoneme alphabet=\"ipa\" ph=\"mɑː lʊŋ\">Ma Long</phoneme>, sedang berjuang untuk mencapai puncak kejayaan.</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": ["Tokonya tidak terlalu besar, tetapi penuh sesak. Camilan dan minumannya cukup murah, dan antrian kasirnya sangat panjang.", "Suasana sangat ramai, dengan kerumunan orang dan berbagai macam barang."]
},
{
"GroupName": "group3",
"MediaArray": ["https://[your-bucket].oss-[your-region-id].aliyuncs.com/0-test-batch-editing-materials/young_sunset_walk.mp4"],
"SpeechTextArray": ["Datang dan lihat sendiri!", "Cepat datang dan lihat!"]
},
{
"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 membuka lokasi baru di Huilongguan",
"Toko Freshippo baru dibuka"
],
"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": ["Subtitle level 1 1", "Subtitle level 1 2"]
},
{
"Level": 3,
"TitleArray": ["Subtitle level 3"]
}
],
"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
EditingConfig menentukan volume, posisi, dan pengaturan produksi lainnya.
Semua parameter mendukung mode Global Scripts dan Segmented Scripts, kecuali:
-
ProcessConfig.AlignmentMode hanya berlaku dalam mode Global Scripts.
-
SpeechConfig.SpecialWordsConfig hanya berlaku dalam mode Segmented Scripts.
|
Parameter |
Type |
Deskripsi |
Contoh |
Wajib |
|
JSON |
Konfigurasi aset video input. |
{"Volume":"1","MediaMetaDataArray":[{"Media":"****6c886b4549d481030f6e****","GroupName":"GroupA","TimeRangeList":[{"In":"0","Out":"1"},{"In":"2","Out":"3"}]}]} |
Tidak |
|
|
JSON |
Konfigurasi untuk judul. |
{"Alignment":"TopCenter","AdaptMode":"AutoWrap","Font":"Alibaba PuHuiTi 2.0 95 ExtraBold","SizeRequestType":"Nominal","Y":0.1} |
Tidak |
|
|
SubHeadingConfig |
JSON |
Konfigurasi untuk subjudul multi-level. Bidang JSON:
|
{"1":{"Y":0.3,"FontSize":40},"3":{"Y":0.5,"FontSize":30}} |
Tidak |
|
JSON |
Konfigurasi untuk narasi. |
Tidak |
||
|
JSON |
Konfigurasi untuk musik latar. |
{"Volume":0.2} |
Tidak |
|
|
JSON |
Konfigurasi gambar latar belakang. Diabaikan jika gambar latar belakang diatur di InputConfig. |
{"SubType":"Blur","Radius":0.5} |
Tidak |
|
|
JSON |
Konfigurasi untuk proses pencampuran dan penyuntingan. |
Tidak |
||
|
JSON |
Konfigurasi kanvas untuk pratinjau front-end. |
{"Width": 1080,"Height": 1920} |
Tidak |
|
|
ProduceConfig |
JSON |
Konfigurasi standar untuk penyuntingan dan produksi. Untuk bidangnya, lihat EditingProduceConfig. |
{"AutoRegisterInputVodMedia":true,"OutputWebmTransparentChannel":true,"CoverConfig":{"StartTime":3.3},"AudioChannelCopy":"left","PipelineId":"****d54a97cff4108b555b01166d4****","MaxBitrate":5000,"KeepOriginMaxBitrate":false,"KeepOriginVideoMaxFps":false} |
Tidak |
ProcessConfig
|
Parameter |
Tipe |
Deskripsi |
Contoh |
Wajib |
|
SingleShotDuration |
Float |
Durasi setiap shot yang dibagi otomatis saat membagi aset video panjang, dalam detik. |
5 |
Jumlah default: 3. |
|
AllowVfxEffect |
Boolean |
Apakah akan menambahkan efek khusus. |
true |
Tidak. Default: false. |
|
VfxEffectProbability |
Float |
Probabilitas menerapkan efek pada setiap klip. Rentang: 0.0–1.0. Mendukung 2 tempat desimal. |
0.6 |
Nomor. Default: 0,5. |
|
VfxFirstClipEffectList |
List<String> |
|
["slightshow","starfieldshinee"] |
Tidak |
|
VfxNotFirstClipEffectList |
List<String> |
|
["zoomslight","zoom"] |
Tidak |
|
AllowTransition |
Boolean |
Apakah akan menambahkan efek transisi. |
true |
Tidak. Default: false. |
|
TransitionDuration |
Float |
Durasi transisi dalam detik. Jika |
0.5 |
Tidak. Nilai bawaan: 0,5. |
|
TransitionList |
List<String> |
Daftar transisi kustom. Jika |
["directional", "linearblur"] |
Tidak |
|
UseUniformTransition |
Boolean |
Apakah akan menggunakan transisi yang sama sepanjang satu video. |
true |
Tidak. Default: true. |
|
AllowFilter |
Boolean |
Apakah akan menambahkan filter kustom. |
false |
Tidak. Default: false. |
|
FilterList |
List<String> |
Daftar filter kustom. Jika |
["m1", "m2"] |
Tidak |
|
AlignmentMode |
String |
Mode penyelarasan untuk video dan narasi. Hanya berlaku dalam mode Global Scripts. Nilai valid:
|
AutoSpeed |
Tidak. Default: AutoSpeed. |
|
ImageDuration |
Float |
Durasi aset gambar statis, dalam detik. |
2 |
Tidak. Default: 2. |
Parameter example
{
"MediaConfig": {
"Volume": 0 // Aset video input dimatikan secara default
},
"TitleConfig": {
"Alignment": "TopCenter",
"AdaptMode": "AutoWrap",
"Font": "Alibaba PuHuiTi 2.0 95 ExtraBold",
"SizeRequestType": "Nominal",
"Y": 0.1, // Koordinat Y untuk video portrait
"Y": 0.05, // Koordinat Y untuk video landscape
"Y": 0.08 // Koordinat Y untuk video persegi
},
"SubHeadingConfig": {
"1": {
"Y": 0.3,
"FontSize": 40
},
"3": {
"Y": 0.5,
"FontSize": 30
}
},
"SpeechConfig": {
"Volume": 1, // Narasi menggunakan volume asli secara default
"SpeechRate": 0,
"Voice": null,
"Style": null,
"CustomizedVoice": null, // ID suara. Jika diatur, Voice dan Style diabaikan.
"AsrConfig": {
"Alignment": "TopCenter",
"AdaptMode": "AutoWrap",
"Font": "Alibaba PuHuiTi 2.0 65 Medium",
"SizeRequestType": "Nominal",
"Spacing": -1,
"Y": 0.8, // Koordinat Y subtitle untuk video portrait
"Y": 0.9, // Koordinat Y subtitle untuk video landscape
"Y": 0.85 // Koordinat Y subtitle untuk video persegi
},
"SpecialWordsConfig": [{
"Type": "Highlight",
"Style": {
"FontName": "KaiTi",
"FontSize": 80,
"FontColor": "20AEE9",
"OutlineColour": "2D20E9",
"Outline": 3,
"FontFace": {
"Bold": true,
"Underline": true
}
},
"WordsList": [
"ApsaraVideo",
"Intelligent Media Services",
"Pembuatan video batch"
]
},
{
"Type": "Highlight",
"Style": {
"FontFace": {
"Italic": true
}
},
"WordsList": [
"product",
"take a look"
]
},
{
"Type": "Forbidden",
"WordsList": [
"pilipala",
"bilibala"
],
"SoundReplaceMode": "None"
}
]},
"BackgroundMusicConfig": {
"Volume": 0.2, // Musik latar pada volume 20% secara default
"Style": null
},
"ProcessConfig": {
"SingleShotDuration": 3, // Durasi shot setelah pemisahan
"AllowVfxEffect": false, // Menentukan apakah akan menambahkan efek khusus
"AllowTransition": false, // Menentukan apakah akan menambahkan efek transisi
"AlignmentMode": "AutoSpeed" // Bidang ini hanya didukung dalam mode Global Scripts
}
}
TemplateConfig
TemplateConfig berisi parameter umum untuk produksi video batch. Untuk parameter dan contoh detail, lihat TemplateConfig.
Parameter OutputConfig
OutputConfig menentukan tujuan output, konvensi penamaan, resolusi, dan jumlah video.
Parameter berlaku untuk kedua mode.
|
Parameter |
Tipe |
Deskripsi |
Contoh |
Wajib |
|
MediaURL |
String |
URL video output. Harus menyertakan placeholder |
Aturan: http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name]_{index}.mp4 Contoh: http://example.oss-cn-shanghai.aliyuncs.com/example/example_{index}.mp4 |
Wajib jika GeneratePreviewOnly adalah false dan output ke OSS. |
|
StorageLocation |
String |
Lokasi penyimpanan untuk aset media yang dioutput ke ApsaraVideo VOD. |
Aturan: [your-vod-bucket].oss-[your-region-id].aliyuncs.com Contoh: outin-****6c886b4549d481030f6e****.oss-cn-shanghai.aliyuncs.com |
Wajib jika GeneratePreviewOnly adalah false dan output ke VOD. |
|
FileName |
String |
Nama file output. Harus menyertakan placeholder |
Aturan: [your-file-name]__{index}.mp4 Contoh: example_{index}.mp4 |
Wajib jika GeneratePreviewOnly adalah false dan output ke VOD. |
|
GeneratePreviewOnly |
Boolean |
|
false |
Tidak. Default: false. |
|
Count |
Integer |
Jumlah video yang akan dioutput. Maksimum: 100. |
10 |
Tidak. Default: 1. |
|
MaxDuration |
Float |
Durasi maksimum per video output, dalam detik.
|
20 |
Tidak. Default: 15. |
|
FixedDuration |
Float |
Durasi tetap per video output. Jika diatur, durasi video disesuaikan dengan nilai ini.
|
20 |
Tidak. Default: 15. |
|
Width |
Integer |
Lebar video output, dalam piksel. |
1080 |
Ya |
|
Height |
Integer |
Tinggi video output, dalam piksel. |
1920 |
Ya |
|
JSON |
Konfigurasi aliran video output (CRF, kodek, dll.). |
{"Crf": 27} |
Tidak |
Contoh parameter
{
"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
}
Aplikasi
Contoh 1: Konfigurasikan intro dan outro dengan mode Segmented Scripts
Kasus penggunaan
Tambahkan intro dan outro yang konsisten dengan mengatur MediaGroup.SplitMode ke NoSplit untuk kelompok pertama dan terakhir; sistem akan memutar aset yang dipilih secara acak dari kelompok tersebut secara utuh.
Kode contoh
Contoh 2: Buat video montase wajah
Contoh SDK
Prasyarat
Anda telah menginstal SDK server IMS. Untuk informasi lebih lanjut, lihat Memulai.
Kode contoh
Contoh ini menggunakan mode Global Scripts.
Parameter input API
Konfigurasi lanjutan
Untuk pengaturan lanjutan, lihat Logika dan konfigurasi lanjutan untuk pembuatan video satu-klik batch.
FAQ
Untuk pertanyaan umum tentang Script-to-Video, lihat FAQ.
-
Bagaimana cara mengatasi perubahan adegan yang kasar atau terlalu sering?
-
Bagaimana cara mengontrol kecepatan perubahan adegan dan durasi shot?
-
Bagaimana durasi tampilan gambar dihitung dalam video akhir?
-
Bagaimana cara memastikan klip video diputar secara utuh dalam video akhir?
-
Bagaimana cara mengganti-ganti antara klip video dengan audio asli dan klip dengan narasi suara?
Referensi
-
SubmitBatchMediaProducingJob: mengirimkan pekerjaan produksi video batch.
-
GetBatchMediaProducingJob: mengambil detail pekerjaan produksi video batch.