All Products
Search
Document Center

Intelligent Media Services:Script-to-Video

Last Updated:Aug 06, 2026

Pelajari parameter produksi, konfigurasi lanjutan, dan contoh SDK untuk Script-to-Video.

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

Catatan
  • 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:

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, dan OutputConfig di 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.

Contoh: Mode Global Scripts

Contoh: Mode Segmented Scripts

Ya

  • Global Scripts

  • Segmented Scripts

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

  • Global Scripts

  • Segmented Scripts

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

  • Global Scripts

  • Segmented Scripts

SpeechTextArray

List<String>

  • Array skrip narasi. Satu skrip dipilih secara acak untuk setiap produksi.

  • Maksimal 50 skrip, masing-masing hingga 1.000 karakter.

  • Mendukung pengendalian sintesis suara menggunakan SSML.

  • Bahasa default adalah Tionghoa (zh). Untuk mengatur bahasa lain, lihat SpeechLanguage.

    Penting

    Saat ini, hanya <break>, <s>, <sub>, <w>, <phoneme>, dan <say-as> yang didukung.

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

Tidak

  • Global Scripts

StickerArray

List<Sticker>

  • Array stiker. Satu stiker dipilih secara acak untuk setiap produksi. Maksimal 50 stiker.

  • Aturan pemilihan: Jika Anda menyediakan 10 stiker dan meminta 20 video, sistem akan memilih indeks awal acak (misalnya 3) dan memilih stiker secara siklik: 3, 4, 5, ..., 10, 1, 2, 3, ...

  • Untuk format yang didukung, lihat Format gambar.

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

Tidak

  • Global Scripts

  • Segmented Scripts

BackgroundMusicArray

List<String>

  • Array trek musik latar. Satu trek dipilih secara acak untuk setiap produksi. Maksimal 50 trek. Mendukung ID aset media atau URL OSS.

  • Aturan pemilihan: Sama seperti StickerArray.

  • Untuk format yang didukung, lihat Format audio.

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

Tidak

  • Global Scripts

  • Segmented Scripts

BackgroundImageArray

List<String>

  • Array gambar latar belakang. Satu gambar dipilih secara acak untuk setiap produksi. Maksimal 50 gambar. Mendukung ID aset media atau URL OSS.

  • Aturan pemilihan: Sama seperti StickerArray.

  • Untuk format yang didukung, lihat Format gambar.

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

Tidak

  • Global Scripts

  • Segmented Scripts

MediaGroup

Catatan

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

  • Global Scripts

  • Segmented Scripts

MediaArray

List<String>

  • Daftar aset, mendukung ID aset media atau URL. Maksimal 200 aset. Jika Anda menambahkan beberapa aset ke MediaArray, sistem akan memilih satu secara acak untuk setiap pekerjaan produksi. Agar semua aset ikut serta dalam video yang dihasilkan, buat beberapa kelompok dalam MediaGroupArray dan tambahkan satu aset ke setiap kelompok.

  • Untuk format yang didukung, lihat Format video.

****b4549d46c88681030f6e****

Ya

  • Global Scripts

  • Segmented Scripts

SpeechTextArray

List<String>

  • Array skrip narasi. Satu skrip dipilih secara acak untuk setiap produksi.

  • Maksimal 50 skrip, masing-masing hingga 1.000 karakter.

  • Mendukung pengendalian sintesis suara menggunakan SSML.

    Penting

    Saat ini, hanya <break>, <s>, <sub>, <w>, <phoneme>, dan <say-as> yang didukung.

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

Tidak

  • Segmented Scripts

Duration

Float

Durasi untuk kelompok saat ini, dalam detik. Gunakan hanya ketika SpeechTextArray kosong.

10

Tidak. Default: 5.

  • Global Scripts

SplitMode

String

NoSplit

Tidak. Nilai default: AverageSplit.

  • Global Scripts

  • Segmented Scripts

Volume

Float

  • Volume video input untuk kelompok ini. Jika diatur, akan menggantikan EditingConfig.MediaConfig.Volume untuk kelompok ini.

  • Rentang: [0, 10.0]. Mendukung dua tempat desimal.

0.5

Tidak

  • Global Scripts

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.

  • Global Scripts

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.

Catatan

Semua parameter mendukung mode Global Scripts dan Segmented Scripts, kecuali:

Parameter

Type

Deskripsi

Contoh

Wajib

MediaConfig

JSON

Konfigurasi aset video input.

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

Tidak

TitleConfig

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

SpeechConfig

JSON

Konfigurasi untuk narasi.

Lihat Contoh parameter EditingConfig

Tidak

BackgroundMusicConfig

JSON

Konfigurasi untuk musik latar.

{"Volume":0.2}

Tidak

BackgroundImageConfig

JSON

Konfigurasi gambar latar belakang. Diabaikan jika gambar latar belakang diatur di InputConfig.

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

Tidak

ProcessConfig

JSON

Konfigurasi untuk proses pencampuran dan penyuntingan.

Lihat Contoh parameter EditingConfig

Tidak

FECanvas

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>

  • Jika tidak kosong, efek untuk klip pertama video akan dipilih dari daftar ini.

  • Jika kosong, efek acak dipilih dari default berikut: slightshow, starfieldshinee, starfieldshinee2, starsparkle, colorfulripples, starfield.

  • Untuk contoh efek, lihat Contoh efek khusus.

["slightshow","starfieldshinee"]

Tidak

VfxNotFirstClipEffectList

List<String>

  • Jika tidak kosong, efek untuk semua klip selain yang pertama akan dipilih dari daftar ini.

  • Jika kosong, efek acak dipilih dari default berikut: zoomslight, zoom, zoominout, slightshake.

  • Untuk contoh efek, lihat Contoh efek khusus.

["zoomslight","zoom"]

Tidak

AllowTransition

Boolean

Apakah akan menambahkan efek transisi.

true

Tidak. Default: false.

TransitionDuration

Float

Durasi transisi dalam detik. Jika TransitionDuration > ClipDuration - 1, transisi untuk klip tersebut tidak akan diterapkan.

0.5

Tidak. Nilai bawaan: 0,5.

TransitionList

List<String>

Daftar transisi kustom. Jika AllowTransition adalah true, transisi acak dari daftar ini akan digunakan. Untuk transisi yang tersedia, lihat Efek transisi. Jika daftar ini kosong, transisi acak dipilih dari: linearblur, colordistance, crosshatch, dreamyzoom, doomscreentransition_up.

["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 AllowFilter adalah true, filter acak dari daftar ini diterapkan. Untuk filter yang tersedia, lihat Filter. Jika daftar ini kosong, tidak ada filter yang diterapkan.

["m1", "m2"]

Tidak

AlignmentMode

String

Mode penyelarasan untuk video dan narasi. Hanya berlaku dalam mode Global Scripts.

Nilai valid:

  • AutoSpeed: Durasi track video diskalakan agar sesuai dengan track audio.

  • Cut: Track video dipotong agar sesuai dengan track audio.

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 {index}.

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 {index}.

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

Contoh: example_{index}.mp4

Wajib jika GeneratePreviewOnly adalah false dan output ke VOD.

GeneratePreviewOnly

Boolean

  • Jika true, pekerjaan hanya menghasilkan garis waktu pratinjau tanpa benar-benar memproduksi video. URL output tidak diperlukan.

  • Setelah pekerjaan selesai, Anda dapat mengkueri hasilnya menggunakan GetBatchMediaPoducingJob untuk mendapatkan ID proyek penyuntingan (projectId), lalu panggil GetEditingProject untuk mengambil garis waktu pratinjau.

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.

  • Tidak didukung dalam mode Segmented Scripts.

  • Dalam mode Global Scripts, parameter ini didukung ketika SpeechTextArray kosong.

  • Anda dapat mengatur FixedDuration atau MaxDuration.

  • Aturan durasi video.

20

Tidak. Default: 15.

Width

Integer

Lebar video output, dalam piksel.

1080

Ya

Height

Integer

Tinggi video output, dalam piksel.

1920

Ya

Video

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

Klik untuk melihat contoh InputConfig

{
    "mediaGroupArray": [
        {
            "duration": 4,
            "splitMode": "NoSplit",
            "groupName": "opening",
            "mediaArray": [
                "****e44009ee71f0b62bf6f7d44b****"
            ]
        },
        {
            "groupName": "group1",
            "mediaArray": [
                "****e44009eef1f0b62bf6f7d44b****"
            ],
            "speechTextArray": [
                "Bingung mau liburan ke mana?",
                "Masih ragu dengan rencana liburan Anda?"
            ]
        },
        {
            "groupName": "group2",
            "mediaArray": [
                "****e44009eeferfb62bf6f7d44b****",
                "****e440094fghf0b62bf6f7d44b****",
                "****e44009ee74fgh62bf6f7d44b****"
            ],
            "speechTextArray": [
                "Danau Lugu di Yunnan mengundang Anda untuk berkencan dengan alam. Danau birunya seperti cermin, memantulkan adat istiadat unik Kerajaan Perempuan Mosuo, indah seperti lukisan.",
                "Mengapa tidak mempertimbangkan pesta alam di Danau Lugu di Yunnan? Danau biru seperti cermin memantulkan adat istiadat rakyat unik Kerajaan Perempuan Mosuo, indah dan mempesona."
            ]
        },
        {
            "groupName": "group3",
            "mediaArray": [
                "****e44009ee7ft5662bf6f7d44b****"
            ],
            "speechTextArray": [
                "Datanglah ke Danau Lugu dan nikmati pemandangan yang tenang dan memesona ini!",
                "Nikmati puisi tak berujung yang dibawa oleh pemandangan tenang dan memesona ini!"
            ]
        },
        {
            "duration": 4,
            "splitMode": "NoSplit",
            "groupName": "ending",
            "mediaArray": [
                "****e44009ee5fgfg62bf6f7d44b****"
            ]
        }
    ]
}

Klik untuk melihat contoh 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
                    }
                ]
            }
        ]
    }
}

Klik untuk melihat contoh 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
}

Contoh 2: Buat video montase wajah

Praktik terbaik untuk membuat 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.

Bentangkan untuk melihat contoh kode

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;


/**
 *  Anda perlu menambahkan dependensi Maven berikut:
 *   <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]"; // Fitur ini didukung di cn-shanghai, cn-beijing, dan 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 {
        // Kredensial AccessKey Akun Alibaba Cloud memiliki akses penuh ke semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M rutin.
        // Contoh ini menunjukkan cara menyimpan ID AccessKey dan rahasia AccessKey dalam variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasinya, lihat 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);

        // Untuk menyematkan ID AccessKey dan rahasia AccessKey secara langsung, gunakan kode berikut. Namun, kami sangat menyarankan agar Anda tidak menyematkannya dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor, yang membahayakan keamanan semua sumber daya Anda.
        // config.accessKeyId = <ID AccessKey yang dibuat di Langkah 2>;
        // config.accessKeySecret = <Rahasia AccessKey yang dibuat di Langkah 2>;
        config.endpoint = "ice." + regionId + ".aliyuncs.com";
        config.regionId = regionId;
        iceClient = new Client(config);
    }

    public void runExample() throws Exception {

        // Materi video
        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);

        // Skrip narasi
        List<String> speechTextArray = Arrays.asList(
            "Bingung mau liburan ke mana? Danau Lugu di Yunnan mengundang Anda untuk berkencan dengan alam. Danau birunya seperti cermin, memantulkan adat istiadat unik Kerajaan Perempuan Mosuo, indah seperti lukisan.",
            "Masih ragu dengan rencana liburan Anda? Mengapa tidak mempertimbangkan pesta alam di Danau Lugu di Yunnan? Danau biru seperti cermin memantulkan adat istiadat rakyat unik Kerajaan Perempuan Mosuo, indah dan mempesona."
        );

        // Judul video
        List<String> titleArray = Arrays.asList(
            "Danau Lugu: Adat Mosuo dalam pemandangan indah",
            "Menjelajahi misteri Danau Lugu",
            "Pengalaman imersif di Danau Lugu"
        );

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

        // Jumlah video yang akan diproduksi
        int produceCount = 4;

        // Resolusi output (portrait)
        //int outputWidth = 1080;
        //int outputHeight = 1920;

        // Resolusi output (landscape)
        int outputWidth = 1920;
        int outputHeight = 1080;

        // URL OSS output, harus menyertakan placeholder {index}
        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);

        // Kirim pekerjaan produksi video batch
        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("Mulai pekerjaan batch skrip, batchJobId: " + jobId);

        // Periksa status pekerjaan hingga selesai
        System.out.println("Menunggu pekerjaan selesai...");
        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("Pekerjaan batch gagal. JobInfo: " + JSONObject.toJSONString(getResponse.getBody().getEditingBatchJob()));
                throw new Exception("Produksi gagal. BatchJobId: " + jobId);
            }

            if ("Finished".equals(status)) {
                System.out.println("Pekerjaan batch selesai. JobInfo: " + JSONObject.toJSONString(getResponse.getBody().getEditingBatchJob()));
                break;
            }
        }
    }
}

Parameter input 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": [
    "Bingung mau liburan ke mana? Danau Lugu di Yunnan mengundang Anda untuk berkencan dengan alam. Danau birunya seperti cermin, memantulkan adat istiadat unik Kerajaan Perempuan Mosuo, indah seperti lukisan.",
    "Masih ragu dengan rencana liburan Anda? Mengapa tidak mempertimbangkan pesta alam di Danau Lugu di Yunnan? Danau biru seperti cermin memantulkan adat istiadat rakyat unik Kerajaan Perempuan Mosuo, indah dan mempesona."
  ],
  "TitleArray": [
    "Danau Lugu: Adat Mosuo dalam pemandangan indah",
    "Menjelajahi misteri Danau Lugu",
    "Pengalaman imersif di Danau Lugu"
  ]
}

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

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.

Referensi