All Products
Search
Document Center

Intelligent Media Services:Skenario sorotan film

Last Updated:Nov 11, 2025

Topik ini menjelaskan parameter komposisi, konfigurasi lanjutan, dan contoh pemanggilan kit pengembangan perangkat lunak (SDK) untuk skenario sorotan film.

Penting
  • Pembuatan video berbasis skrip otomatis dan pembuatan video pencocokan konten cerdas menggunakan API yang sama untuk mengirimkan tugas. Untuk informasi lebih lanjut tentang cara membedakan keduanya melalui parameter, lihat Perbedaan parameter.

  • Catatan: Untuk API ini, wilayah yang ditentukan dalam URL Object Storage Service (OSS) dari semua aset media harus sesuai dengan wilayah titik akhir OpenAPI.

  • Wilayah yang didukung: Tiongkok (Shanghai), Tiongkok (Beijing), Tiongkok (Hangzhou), Tiongkok (Shenzhen), AS (Barat), dan Singapura.

  • Dalam contoh berikut, ganti placeholder seperti [your-bucket], [your-region-id], [your-file-name], [your-file-path], dan ID aset media (misalnya, "****9d46c8b4548681030f6e****") dengan nilai aktual Anda.

Catatan

Catatan penggunaan

Parameter InputConfig

Gunakan InputConfig untuk menentukan parameter aset dasar seperti klip video, narasi, musik latar, dan stiker.

Parameter

Tipe

Deskripsi

Contoh

Wajib

Mode yang didukung

MediaArray

List<String>

  • Mode pencocokan konten cerdas. Anda dapat memasukkan daftar ID aset media atau URL OSS. Durasi total video tidak boleh melebihi dua jam.

  • Untuk informasi lebih lanjut tentang format video yang didukung, lihat Format video.

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

Ya

Didukung penuh

TitleArray

List<String>

Array judul. Judul acak dipilih untuk setiap pembuatan video.

Anda dapat menentukan hingga 50 judul. Setiap judul dapat berisi hingga 50 karakter.

["Judul 1","Judul 2"]

Tidak

Didukung penuh

SubHeadingArray

List<SubHeading>

Pengaturan subjudul.

[{"Level":1,"TitleArray":["Subjudul Level-1 1","Subjudul Level-1 2"]},{"Level":3,"TitleArray":["Subjudul Level-3"]}]

Tidak

Semua mode

SpeechTextArray

List<String>

  • Array skrip narasi. Skrip acak dipilih untuk setiap pembuatan video.

  • Anda dapat menentukan hingga 50 skrip. Setiap skrip dapat berisi hingga 1.000 karakter.

  • Anda dapat menggunakan Bahasa Markup Sintesis Ucapan (SSML) untuk mengontrol sintesis suara. Untuk informasi lebih lanjut, lihat SSML.

    Penting

    Saat ini, hanya <break>, <s>, dan <phoneme> yang didukung. Untuk timbre CosyVoice, hanya <break>, <s>, dan <sub> yang didukung.

["Konten narasi 1","Konten narasi 2"]

Tidak

  • Mode narasi global

SceneInfo

SceneInfo

Informasi skenario. Digunakan untuk parameter terkait skenario.

Untuk informasi lebih lanjut, lihat Contoh parameter: Mode narasi global dan Contoh parameter: Mode storyboard.

Ya

  • Mode narasi global

  • Mode storyboard

StickerArray

List<Sticker>

  • Array stiker. Stiker acak dipilih untuk setiap pembuatan video. Anda dapat menentukan hingga 50 stiker. Anda dapat menggunakan ID aset media atau URL OSS.

  • Aturan pengacakan: Misalkan Anda menyediakan 10 stiker dan menetapkan jumlah video yang akan dihasilkan menjadi 20. Pertama, bilangan acak dari 1 hingga 10 dihasilkan, misalnya 3. Kemudian, stiker dipilih secara berurutan: 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, dan seterusnya.

  • Untuk informasi lebih lanjut tentang format citra yang didukung, lihat Format citra.

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

Tidak

Semua mode

BackgroundMusicArray

List<String>

  • Array trek musik latar. Trek acak dipilih untuk setiap pembuatan video. Anda dapat menentukan hingga 50 trek. Anda dapat menggunakan ID aset media atau URL OSS.

  • Aturan pengacakan: Misalkan Anda menyediakan 10 trek musik latar dan menetapkan jumlah video yang akan dihasilkan menjadi 20. Pertama, bilangan acak dari 1 hingga 10 dihasilkan, misalnya 3. Kemudian, trek dipilih secara berurutan: 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, dan seterusnya.

  • Untuk informasi lebih lanjut tentang format audio yang didukung, lihat Format audio.

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

Tidak

Didukung penuh

BackgroundImageArray

List<String>

  • Array citra latar belakang. Citra acak dipilih untuk setiap pembuatan video. Anda dapat menentukan hingga 50 citra. Anda dapat menggunakan ID aset media atau URL OSS.

  • Aturan pengacakan: Misalkan Anda menyediakan 10 citra latar belakang dan menetapkan jumlah video yang akan dihasilkan menjadi 20. Pertama, bilangan acak dari 1 hingga 10 dihasilkan, misalnya 3. Kemudian, citra dipilih secara berurutan: 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, dan seterusnya.

  • Untuk informasi lebih lanjut tentang format citra yang didukung, lihat Format citra.

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

Tidak

Semua mode

Parameter SceneInfo

Parameter

Tipe

Deskripsi

Wajib

Mode yang didukung

Scene

String

Jenis skenario pencocokan. Untuk skenario sorotan film, atur parameter ini ke bidang statis "MovieHighlights".

Ya

  • Mode narasi global

  • Mode storyboard

ShotInfo

ShotInfo

Konfigurasikan storyboard.

Ya

  • Mode storyboard

FaceInfo

FaceInfo

Konfigurasikan informasi wajah.

Tidak

Didukung penuh

Parameter ShotInfo

Catatan

Parameter ini hanya berlaku untuk mode storyboard. Anda tidak perlu mengatur parameter ini untuk mode narasi global.

Parameter

Tipe

Deskripsi

Wajib

ShotScripts

List<ShotScript>

Array skrip shot.

Ya

Parameter ShotScript

Catatan
  • Parameter ini hanya berlaku untuk mode storyboard. Anda tidak perlu mengatur parameter ini untuk mode narasi global.

  • Dalam mode storyboard skenario sorotan film, tersedia dua mode shot: mode deskripsi teks dan mode penguraian manual. Anda harus memilih salah satu mode ini saat mengatur parameter.

Parameter

Tipe

Deskripsi

Contoh

Wajib

Mode Pengambilan Gambar

ScriptText

String

Teks skrip untuk satu shot. Ini menjelaskan konten shot tersebut. Rangkum konten shot dalam satu atau dua kalimat.

Di dalam gerbong kereta bawah tanah, Lin Xia duduk di sudut, diam-diam merekam dengan ponselnya. Seorang nenek tua memegang tangan cucunya, melantunkan lagu dengan lembut.

Tidak

Mode deskripsi teks

SpeechText

String

  • Skrip narasi untuk satu shot. Skrip dapat berisi hingga 100 karakter.

  • Anda dapat menggunakan SSML untuk mengontrol sintesis suara. Untuk informasi lebih lanjut, lihat SSML.

    Penting

    Saat ini, hanya <break>, <s>, dan <phoneme> yang didukung.

Gerbong malam hari sunyi, tetapi beberapa orang menerangi seluruh gerbong dengan nyanyian mereka.

Tidak

Semua mode

Duration

Float

  • Durasi shot dalam detik. Nilai harus 1 atau lebih besar.

  • Parameter ini hanya berlaku ketika tidak ada narasi. Jika narasi ada, durasi shot dihitung secara otomatis berdasarkan durasi narasi.

5

Tidak

Descriptions

List<String>

Deskripsi terperinci untuk satu shot. Rangkum konten shot dalam satu atau dua kalimat.

["Lin Xia duduk di sudut gerbong kereta bawah tanah, diam-diam merekam dengan ponselnya", "Seorang nenek tua memegang tangan cucunya, melantunkan lagu dengan lembut"]

Tidak

Mode penguraian manual

Characters

List<String>

Nama karakter (wajah) dalam satu shot. Catatan: Nama karakter harus sama dengan ImageInfo.Name dalam FaceInfo.ImageInfoList.

["Lin Xia", "Nenek tua", "Cucu"]

Tidak

Settings

List<String>

Deskripsi adegan untuk satu shot.

["Gerbong kereta bawah tanah malam hari"]

Tidak

Volume

Float

  • Volume video input. Jika Anda mengatur Volume di sini, volume video dalam shot saat ini akan disesuaikan dengan nilai ini. Parameter EditingConfig.MediaConfig.Volume tidak lagi berlaku untuk grup ini.

  • Rentang nilai: [0, 10,0]. Mendukung hingga dua tempat desimal.

0,5

Tidak

Didukung penuh

Parameter FaceInfo

Parameter

Tipe

Deskripsi

Wajib

ImageInfoList

List<ImageInfo>

Daftar foto karakter (wajah). Daftar ini dapat berisi hingga 200 foto.

Tidak

Parameter ImageInfo

Parameter

Tipe

Deskripsi

Contoh

Wajib

Name

String

Nama karakter (wajah).

Daniel

Ya

ImageURL

String

Alamat penyimpanan foto karakter (wajah). Harus berupa URL yang dapat diakses melalui Internet. Pastikan citra wajah hanya berisi satu individu dan wajahnya jelas, tanpa hambatan signifikan atau bagian yang hilang.

http://[your-cdn-domain]/[your-file-path]/face1.png

Ya. Anda harus menentukan salah satu dari dua parameter ini.

ImageId

String

ID aset media citra.

****9d46c886b45481030f6e****

Contoh parameter: Mode narasi global

{
  "MediaArray": [
    "****9d46c886b45481030f6e****",
    "****c886810b4549d4630f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test1.mp4",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test2.png"
  ],
    "SceneInfo": {
    "Scene": "MovieHighlights", // MovieHighlights untuk pencocokan sorotan film
    "FaceInfo": {
      "ImageInfoList": [
        {
          "Name": "Karakter A",
          "ImageURL": "https://bkimg.cdn.bcebos.com/pic/3853ad1bdd9f70558718bf38?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080"
        },
        {
          "Name": "Karakter B",
          "ImageURL": "https://bkimg.cdn.bcebos.com/pic/622762d0f703918ffbedc1125b3d269759eec42e?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080"
        },
        {
          "Name": "Karakter C",
          "ImageId": "****b681034549d46c880f6e****"
        }
      ]
    }
  },
  "TitleArray": [
    "Hema Fresh di Huilongguan kini buka!",
    "Hema Fresh kini buka!"
  ],
  "SubHeadingArray": [
    {
      "Level": 1,
      "TitleArray": ["Subjudul 1", "Subjudul 2"]
    },
    {
      "Level": 3,
      "TitleArray": ["Subjudul Level-3"]
    }
  ],
  "SpeechTextArray": [
    "Hema Fresh baru saja dibuka di pusat perbelanjaan terdekat. Hari ini adalah pembukaan resmi, jadi saya bergegas datang untuk bergabung dalam keseruan ini. Hema ini tidak terlalu besar, tetapi pusat perbelanjaannya penuh sesak. Camilan dan minuman cukup murah, dan antreannya sangat panjang. Datang dan coba lihat sendiri!",
    "Hema Fresh baru saja dibuka di pusat perbelanjaan terdekat. Hari ini adalah pembukaan resmi, jadi saya bergegas datang untuk bergabung dalam keseruan ini."
  ],
  "Sticker": {
    "MediaId": "****b681034549d46c880f6e****",
    "X": 10,
    "Y": 100,
    "Width": 300,
    "Height": 300
  },
  "StickerArray": [
    {
      "MediaId": "****9d46c8b4548681030f6e****",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300,
      "Opacity": 0.6
    },
    {
      "MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test3.png",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300
    }
  ],
  "BackgroundMusicArray": [
    "****b4549d46c88681030f6e****",
    "****549d46c88b4681030f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test4.mp3"
  ],
  "BackgroundImageArray": [
    "****6c886b4549d481030f6e****",
    "****9d46c8548b4681030f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test1.png"
  ]
}

Contoh parameter: Mode storyboard

{
  "MediaArray": [
    "****9d46c886b45481030f6e****",
    "****c886810b4549d4630f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test1.mp4",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test2.png"
  ],
   "SceneInfo": {
    "Scene": "MovieHighlights", // MovieHighlights untuk pencocokan sorotan film
    "ShotInfo": {
      "ShotScripts": [
        // Awal contoh mode deskripsi teks. Untuk setiap shot, pilih mode penguraian manual atau mode deskripsi teks.
        {
          "ScriptText": "Di dalam gerbong kereta bawah tanah, Lin Xia duduk di sudut, diam-diam merekam dengan ponselnya. Seorang nenek tua memegang tangan cucunya, melantunkan lagu dengan lembut.",
          "SpeechText": "Gerbong malam hari sunyi, tetapi beberapa orang menerangi seluruh gerbong dengan nyanyian mereka."
        },
        {
           "ScriptText": "Rambut putih nenek tua itu berkilau di bawah lampu gerbong. Ia mengelus kepala cucunya dan berbisik, 'Apakah kamu ingat lagu ini?'",
           "SpeechText": "Dunianya mungkin kabur, tetapi di depannya, ia tetap ibu yang paling lembut."
        },
        {
           "ScriptText": "Lin Xia berhenti merekam dan memandang papan iklan yang berkedip-kedip di luar jendela, ekspresinya melembut.",
           "SpeechText": "Saya pikir saya sedang merekam kisah orang lain, tetapi saya diam-diam sembuh."
        },
        {
           "ScriptText": "Di rumah, Lin Xia mengeluarkan kameranya dan menulis entri buku harian pertamanya: 'Hari ini, saya melihat seperti apa kebahagiaan itu.'",
           "SpeechText": "Terkadang, kebahagiaan bukan tentang hal-hal besar, tetapi momen-momen kecil yang kita abaikan."
        },
        {
           "ScriptText": "Beberapa hari kemudian, serangkaian foto yang menghangatkan hati di media sosial Lin Xia menggema di kalangan netizen.",
           "SpeechText": "Ia mulai menceritakan kisah dengan lensanya, dan setiap kisah menyimpan sepotong cinta."
        },
        {
           "ScriptText": "Malam hari, Lin Xia memasuki stasiun kereta bawah tanah lagi, kali ini dengan senyum dan tujuan baru.",
           "SpeechText": "Kota ini besar, tetapi selalu ada seseorang yang menunggu Anda, dan seseorang yang layak ditemukan."
        }
        // Akhir contoh mode deskripsi teks
        
        // Awal contoh mode penguraian manual. Untuk setiap shot, pilih mode penguraian manual atau mode deskripsi teks.
        {
            "Descriptions": ["Lin Xia duduk di sudut gerbong kereta bawah tanah, diam-diam merekam dengan ponselnya", "Seorang nenek tua memegang tangan cucunya, melantunkan lagu dengan lembut"],
            "Characters": ["Lin Xia", "Nenek tua", "Cucu"],
            "Settings": ["Gerbong kereta bawah tanah malam hari"],
            "SpeechText": "Gerbong malam hari sunyi, tetapi beberapa orang menerangi seluruh gerbong dengan nyanyian mereka."
        },
        {
            "Descriptions": ["Rambut putih nenek tua itu berkilau di bawah lampu gerbong", "Ia mengelus kepala cucunya dan berbicara dengan lembut"],
            "Characters": ["Nenek tua", "Cucu"],
            "Settings": ["Gerbong kereta bawah tanah"],
            "SpeechText": "Dunianya mungkin kabur, tetapi di depannya, ia tetap ibu yang paling lembut."
        },
        {
            "Descriptions": ["Lin Xia berhenti merekam", "Memandang papan iklan yang berkedip-kedip di luar jendela, ekspresinya melembut"],
            "Characters": ["Lin Xia"],
            "Settings": ["Gerbong kereta bawah tanah yang bergerak"],
            "SpeechText": "Saya pikir saya sedang merekam kisah orang lain, tetapi saya diam-diam sembuh."
        },
        {
            "Descriptions": ["Lin Xia mengeluarkan kameranya di rumah", "Menulis entri buku harian pertamanya: 'Hari ini, saya melihat seperti apa kebahagiaan itu'"],
            "Characters": ["Lin Xia"],
            "Settings": ["Apartemen modern / Kamar"],
            "SpeechText": "Terkadang, kebahagiaan bukan tentang hal-hal besar, tetapi momen-momen kecil yang kita abaikan."
        },
        {
            "Descriptions": ["Foto-foto menghangatkan hati diposting di halaman media sosial Lin Xia", "Netizen menyukai dan berkomentar satu per satu"],
            "Characters": ["Lin Xia"],
            "Settings": ["Layar ponsel / Antarmuka media sosial"],
            "SpeechText": "Ia mulai menceritakan kisah dengan lensanya, dan setiap kisah menyimpan sepotong cinta."
        },
        {
            "Descriptions": ["Malam hari, Lin Xia memasuki stasiun kereta bawah tanah", "Ia memiliki senyum dan tujuan baru"],
            "Characters": ["Lin Xia"],
            "Settings": ["Stasiun kereta bawah tanah kota"],
            "SpeechText": "Kota ini besar, tetapi selalu ada seseorang yang menunggu Anda, dan seseorang yang layak ditemukan."
        }
        // Akhir contoh mode penguraian manual

        // Anda dapat memilih untuk tidak mengonfigurasi narasi. Konfigurasikan hanya skrip shot dan durasi untuk memutar suara video asli.
       {
            "ScripText": "Di dalam gerbong kereta bawah tanah, Lin Xia duduk di sudut, diam-diam merekam dengan ponselnya. Seorang nenek tua memegang tangan cucunya, melantunkan lagu dengan lembut.",
            "Duration": 8.0, // Dapat diatur ketika tidak ada skrip narasi 
            "Volume": 1.0 // Atur volume aset video asli
       }
      ]
    },
    "FaceInfo": {
      "ImageInfoList": [
        {
          "Name": "Karakter A",
          "ImageURL": "https://bkimg.cdn.bcebos.com/pic/3853ad1bdd9f70558718bf38?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080"
        },
        {
          "Name": "Karakter B",
          "ImageURL": "https://bkimg.cdn.bcebos.com/pic/622762d0f703918ffbedc1125b3d269759eec42e?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080"
        },
        {
          "Name": "Karakter C",
          "ImageId": "****b681034549d46c880f6e****"
        }
      ]
    }
  },
  "TitleArray": [
    "Hema Fresh di Huilongguan kini buka!",
    "Hema Fresh kini buka!"
  ],
  "StickerArray": [
    {
      "MediaId": "****9d46c8b4548681030f6e****",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300
    },
    {
      "MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test3.png",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300,
      "Opacity": 0.6
    }
  ],
  "BackgroundMusicArray": [
    "****b4549d46c88681030f6e****",
    "****549d46c88b4681030f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test4.mp3"
  ],
  "BackgroundImageArray": [
    "****6c886b4549d481030f6e****",
    "****9d46c8548b4681030f6e****",
    "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test1.png"
  ]
}

Parameter EditingConfig

Catatan
  • Gunakan EditingConfig untuk menentukan volume, posisi, dan parameter komposisi lainnya untuk aset video keluaran. Jika tidak memiliki persyaratan khusus, Anda dapat menggunakan konfigurasi default dan membiarkan bidang ini kosong.

  • Deskripsi parameter EditingConfig sama untuk mode narasi global dan mode storyboard dalam skenario sorotan film.

Parameter

Tipe

Deskripsi

Contoh

Wajib

MediaConfig

JSON

Konfigurasi untuk aset video input.

Untuk informasi lebih lanjut, lihat Contoh parameter.

Tidak

TitleConfig

JSON

Konfigurasi untuk judul. Anda dapat mengonfigurasi parameter takarir. Untuk informasi lebih lanjut tentang bidang-bidang tersebut, lihat Teks banner.

Untuk informasi lebih lanjut, lihat Contoh parameter.

Tidak

SubHeadingConfig

JSON

Konfigurasi untuk subjudul multi-level. Anda dapat mengatur parameter takarir.

Deskripsi bidang JSON:

Untuk informasi lebih lanjut, lihat Contoh parameter.

Tidak

SpeechConfig

JSON

Konfigurasi untuk skrip narasi.

Untuk informasi lebih lanjut, lihat Contoh parameter.

Tidak

BackgroundMusicConfig

JSON

Konfigurasi untuk musik latar.

{"Volume":0.2}

Tidak

BackgroundImageConfig

JSON

Konfigurasi untuk citra latar belakang.

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

Tidak

ProcessConfig

Konfigurasi pemrosesan remix.

Untuk informasi lebih lanjut, lihat Contoh parameter.

Tidak

FECanvas

JSON

Konfigurasi kanvas untuk pratinjau halaman antarmuka depan.

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

Tidak

ProduceConfig

JSON

Konfigurasi standar pengeditan dan komposisi video. Untuk informasi lebih lanjut tentang bidang-bidang tersebut, lihat EditingProduceConfig.

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

Tidak

Parameter ProcessConfig

Parameter

Tipe

Deskripsi

Contoh

Wajib

AllowVfxEffect

Boolean

Menentukan apakah akan menambahkan efek khusus.

true

Tidak. Nilai default: false.

VfxEffectProbability

Float

Probabilitas menerapkan efek khusus pada setiap klip video. Rentang nilai: 0,0 hingga 1,0. Mendukung hingga dua tempat desimal.

0,6

Tidak. Nilai default: 0,5.

VfxFirstClipEffectList

List<String>

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

  • Jika VfxFirstClipEffectList kosong, efek untuk klip pertama dipilih secara acak dari berikut ini: "slightshow", "starfieldshinee", "starfieldshinee2", "starsparkle", "colorfulripples", dan "starfield".

  • Untuk contoh efek, lihat Contoh efek khusus.

["slightshow","starfieldshinee"]

Tidak

VfxNotFirstClipEffectList

List<String>

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

  • Jika VfxNotFirstClipEffectList kosong, efek untuk klip selain yang pertama dipilih dari berikut ini: "zoomslight", "zoom", "zoominout", dan "slightshake".

  • Untuk contoh efek, lihat Contoh efek khusus.

["zoomslight","zoom"]

Tidak

AllowTransition

Boolean

Menentukan apakah akan menambahkan transisi.

true

Tidak. Nilai default: false.

TransitionDuration

Float

Durasi transisi dalam detik. Jika durasi transisi lebih besar daripada durasi klip dikurangi 1, transisi untuk klip tersebut tidak berlaku.

0,5

Tidak. Nilai default: 0,5 detik.

TransitionList

List<String>

Daftar transisi kustom. Jika AllowTransition diatur ke true, transisi acak dari daftar dipilih untuk komposisi. Untuk transisi yang tersedia, lihat Pustaka transisi. Jika parameter ini kosong, efek acak dipilih dari berikut ini: "linearblur", "colordistance", "crosshatch", "dreamyzoom", dan "doomscreentransition_up".

["directional", "linearblur"]

Tidak

UseUniformTransition

Boolean

Menentukan apakah akan menggunakan transisi yang sama sepanjang satu video.

true

Tidak. Nilai default: true.

AllowFilter

Boolean

Menentukan apakah akan menambahkan filter kustom.

false

Tidak. Nilai default: false.

FilterList

List<String>

Daftar filter kustom. Jika AllowFilter diatur ke true, filter acak dari daftar dipilih untuk komposisi. Untuk filter yang tersedia, lihat Contoh efek filter. Jika parameter ini kosong, tidak ada filter yang ditambahkan.

["m1", "m2"]

Tidak

AllowDuplicateMatch

Boolean

Menentukan apakah klip yang cocok dapat digunakan kembali.

false

Tidak. Nilai default: false.

EnableClipDetection:

Boolean

Menentukan apakah akan melakukan deteksi shot pada materi sumber. Ini hanya dapat dikonfigurasi untuk skenario sorotan film. Mendukung pembagian shot otomatis dan mengidentifikasi jenis shot. Kredit pembuka/penutup, iklan, dan layar hitam tidak termasuk dalam video akhir.

true

Tidak. Nilai default: true.

EnableTemporalOpt

Boolean

Menentukan apakah akan melakukan optimasi temporal pada hasil pencocokan. Ini hanya dapat dikonfigurasi untuk skenario sorotan film. Kami menyarankan mengatur ini ke true ketika informasi shot input atau skrip narasi sebagian besar konsisten dengan urutan konten video sumber.

true

Tidak. Nilai default: false.

EnableSubtitleMatch

Boolean

Mengoptimalkan kecocokan antara skrip narasi dan frame video berdasarkan hasil Pengenalan Karakter Optik (OCR) dan Pengenalan Ujaran Otomatis (ASR).

  • Saat ini, parameter ini hanya didukung dalam mode narasi global. Kami menyarankan mengaktifkannya ketika skrip mirip dengan takarir aslinya.

  • Parameter ini hanya berlaku ketika EnableTemporalOpt diatur ke true.

true

Tidak. Nilai default: false.

Contoh parameter EditingConfig

Semua parameter dalam EditingConfig bersifat opsional. Kode berikut menunjukkan konfigurasi default.

{
  "MediaConfig": {
    "Volume": 0 // Bisukan video sumber secara default
  },
  "TitleConfig": {
    "Alignment": "TopCenter",
    "AdaptMode": "AutoWrap",
    "Font": "Alibaba PuHuiTi 2.0 95 ExtraBold",
    "SizeRequestType": "Nominal",
    "Y": 0.1, // Koordinat Y judul untuk video vertikal
    "Y": 0.05, // Koordinat Y judul untuk video horizontal
    "Y": 0.08 // Koordinat Y judul untuk video persegi
  },
  "SpeechConfig": {
    "Volume": 1,  // Gunakan volume asli untuk audio narasi secara default
    "SpeechRate": 0,
    "Voice": null,
    "Style": null,
    "CustomizedVoice": null, // voiceId kloning suara. Jika bidang ini ditentukan, Voice dan Style menjadi tidak valid.
    "AsrConfig": {
      "Alignment": "TopCenter",
      "AdaptMode": "AutoWrap",
      "Font": "Alibaba PuHuiTi 2.0 65 Medium",
      "SizeRequestType": "Nominal",
      "Spacing": -1,
      "Y": 0.8, // Koordinat Y takarir untuk video vertikal
      "Y": 0.9, // Koordinat Y takarir untuk video horizontal
      "Y": 0.85 // Koordinat Y takarir untuk video persegi
    }
  },
  "SubHeadingConfig": {
    "1": {
      "Y": 0.3,
      "FontSize": 40
    },
    "3": {
      "Y": 0.5,
      "FontSize": 30
    }
  },
  "BackgroundMusicConfig": {
    "Volume": 0.2,   // Gunakan volume 20% untuk musik latar secara default
    "Style": null
  },
  "ProcessConfig": {
    "AllowVfxEffect": false,	  // Menentukan apakah akan menambahkan efek khusus
    "AllowTransition": false,	  // Menentukan apakah akan menambahkan transisi
    "AllowDuplicateMatch": false, // Dalam mode pencocokan konten cerdas, menentukan apakah klip yang cocok dapat digunakan kembali
    "EnableClipDetection": true, // Menentukan apakah akan melakukan deteksi shot
    "EnableTemporalOpt": true // Menentukan apakah akan melakukan optimasi temporal
  }
}

Parameter TemplateConfig

TemplateConfig adalah parameter umum yang digunakan untuk mengatur templat dalam pembuatan video satu klik. Untuk deskripsi parameter terperinci dan contoh, lihat Parameter TemplateConfig.

Parameter OutputConfig

Catatan

Gunakan OutputConfig untuk menentukan parameter seperti alamat keluaran, aturan penamaan, lebar, tinggi, dan jumlah video yang akan dihasilkan.

Parameter

Tipe

Deskripsi

Contoh

Wajib

MediaURL

String

Alamat video keluaran. Harus berisi placeholder {index}.

Aturan: http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name]_{index}.mp4

Contoh: http://example.oss-[your-region-id].aliyuncs.com/example/example_{index}.mp4

Wajib jika GeneratePreviewOnly bernilai false dan video keluaran dikirim ke OSS.

StorageLocation

String

Alamat penyimpanan untuk file aset media yang akan dikirim ke VOD.

Aturan: [your-vod-bucket].oss-[your-region-id].aliyuncs.com

Contoh: outin-****6c886b4549d481030f6e****.oss-[your-region-id].aliyuncs.com

Wajib jika GeneratePreviewOnly bernilai false dan video keluaran dikirim ke VOD.

FileName

String

Nama file keluaran. Harus berisi placeholder {index}.

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

Contoh: example_{index}.mp4

Wajib jika GeneratePreviewOnly bernilai false dan video keluaran dikirim ke VOD.

GeneratePreviewOnly

Boolean

  • Jika GeneratePreviewOnly diatur ke true, tugas saat ini hanya menghasilkan timeline untuk pratinjau dan tidak melakukan komposisi aktual. Anda tidak perlu menentukan alamat video keluaran.

  • Setelah tugas pembuatan video satu klik selesai, panggil GetBatchMediaProducingJob untuk mengkueri hasil tugas. Daftar sub-tugas yang dikembalikan akan berisi ID proyek pengeditan. Kemudian, panggil GetEditingProject untuk mendapatkan timeline pratinjau.

false

Tidak. Nilai default: false.

Count

Integer

Jumlah video keluaran.

  • Mode narasi global: Jumlah maksimum tidak boleh melebihi panjang InputConfig.SpeechTextArray.

  • Mode storyboard: Saat ini, hanya Count=1 yang didukung. Dukungan untuk beberapa video keluaran mungkin ditambahkan nanti.

1

Tidak. Nilai default: 1.

Width

Integer

Lebar video keluaran dalam piksel.

1080

Ya

Height

Integer

Tinggi video keluaran dalam piksel.

1920

Ya

Video

JSONObject

Konfigurasi untuk aliran video keluaran, seperti Crf dan Codec.

{"Crf": 27}

Tidak

Contoh parameter

{
 	"MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/[your-file-path]/[your-file-name]_{index}.mp4",
 	"Count": 1,
 	"Width": 1080,
 	"Height": 1920,
 	"Video": {"Crf": 27},
        "GeneratePreviewOnly":false
}

Contoh pemanggilan SDK

Prasyarat

Anda telah menginstal SDK sisi server Intelligent Media Service (IMS). Untuk informasi lebih lanjut, lihat Persiapan.

Contoh kode

Contoh berikut menunjukkan cara menggunakan mode narasi global.

Bentangkan untuk melihat contoh kode

package com.example;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.ice20201109.Client;
import com.aliyun.ice20201109.models.*;
import com.aliyun.teaopenapi.models.Config;

import java.util.*;

/**
 *  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 SmartMixBatchEditingService {

    static final String regionId = "[your-region-id]"; // Pencocokan konten cerdas 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 {
        SmartMixBatchEditingService smartMixBatchEditingService = new SmartMixBatchEditingService();
        smartMixBatchEditingService.initClient();
        smartMixBatchEditingService.runExample();
    }

    public void initClient() throws Exception {
        // AccessKey Akun Alibaba Cloud memiliki akses penuh ke semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk pemanggilan API dan O&M rutin.
        // Contoh ini menunjukkan cara menyimpan ID AccessKey dan Rahasia AccessKey dalam variabel lingkungan. Untuk metode konfigurasi, 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 menyimpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda. Hal ini dapat menyebabkan kebocoran AccessKey dan membahayakan keamanan semua sumber daya dalam akun Anda.
        // config.accessKeyId = <ID AccessKey yang Anda buat di Langkah 2>;
        // config.accessKeySecret = <Rahasia AccessKey yang Anda buat di Langkah 2>;
        config.endpoint = "ice." + regionId + ".aliyuncs.com";
        config.regionId = regionId;
        iceClient = new Client(config);
    }

    public void runExample() throws Exception {

        // Aset video
        List<String> mediaArray = Arrays.asList(
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-1.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-2.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-3.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-4.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-5.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-6.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-7.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-8.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-9.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-10.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-11.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-12.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-13.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-14.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-15.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-16.mp4"
        );

        // Skrip narasi
        String speechText = "Di kedalaman biru yang luas dan tak berbatas, sebuah gambar yang hidup perlahan terbentang. Di air biru yang jernih, terumbu karang seperti hutan bawah laut, penuh warna dan megah. Mereka merupakan fondasi penting bagi keanekaragaman hayati laut, memberikan perlindungan bagi tak terhitung banyaknya ikan kecil, kerang, dan alga. Singa laut yang malas dan menggemaskan berjemur di bawah sinar matahari hangat di atas batu, menikmati matahari secara harmonis dengan alam. Lumba-lumba berenang bersama di air biru, saling mengejar dan bermain, menunjukkan kelincahan dan kebijaksanaan yang diberikan oleh alam. Namun, lingkungan laut yang indah ini menghadapi tantangan yang belum pernah terjadi sebelumnya. Berbagai jenis polusi sampah seperti bekas luka pada kulit lautan, tanpa ampun mengikis ekosistem yang dulunya murni. Banyak spesies menghadapi kekurangan makanan, peningkatan penyakit, bahkan penurunan populasi. Kita harus bertindak untuk melindungi rumah biru yang indah dan rapuh ini, agar lautan masa depan dapat kembali memulihkan kemurnian dan vitalitasnya.";

        // Judul video
        String title = "Melindungi Rumah Biru Kita";
        // Informasi skenario
        JSONObject sceneInfo = new JSONObject();
        sceneInfo.put("Scene","MovieHighlights");
        // Informasi wajah
        JSONObject faceInfo = new JSONObject();
        sceneInfo.put("FaceInfo",faceInfo);
        JSONArray imageInfoList =new JSONArray();
        JSONObject imageInfo1=new JSONObject();
        imageInfo1.put("Name","Karakter A");
        imageInfo1.put("ImageURL", "https://bkimg.cdn.bcebos.com/pic/3853ad1bdd9f70558718bf38?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080");
        imageInfoList.add(imageInfo1);
        faceInfo.put("ImageInfoList",imageInfoList);

        JSONObject inputConfig = new JSONObject();
        inputConfig.put("MediaArray", mediaArray);
        inputConfig.put("SpeechText", speechText);
        inputConfig.put("Title", title);
        inputConfig.put("SceneInfo", sceneInfo);

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

        // Lebar dan tinggi video keluaran. Video vertikal dihasilkan.
        int outputWidth = 1080;
        int outputHeight = 1920;

        //// Lebar dan tinggi video keluaran. Video horizontal dihasilkan.
        //int outputWidth = 1920;
        //int outputHeight = 1080;

        // Alamat OSS video keluaran. Harus berisi placeholder {index}.
        String mediaUrl = "http://" + bucket + ".oss-" + regionId + ".aliyuncs.com/smart_mix/output_{index}.mp4";

        JSONObject outputConfig = new JSONObject();
        outputConfig.put("MediaURL", mediaUrl);
        outputConfig.put("Count", produceCount);
        outputConfig.put("Width", outputWidth);
        outputConfig.put("Height", outputHeight);

        // Kirim tugas pembuatan video satu klik
        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 smart mix, batchJobId: " + jobId);

        // Periksa status tugas 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("Gagal menghasilkan. BatchJobId: " + jobId);
            }

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

Detail parameter permintaan API

Bentangkan untuk melihat InputConfig

{
  "MediaArray": [
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-1.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-2.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-3.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-4.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-5.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-6.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-7.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-8.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-9.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-10.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-11.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-12.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-13.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-14.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-15.mp4",
    "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-16.mp4"
  ],
  "SpeechText": "Di kedalaman biru yang luas dan tak berbatas, sebuah gambar yang hidup perlahan terbentang. Di air biru yang jernih, terumbu karang seperti hutan bawah laut, penuh warna dan megah. Mereka merupakan fondasi penting bagi keanekaragaman hayati laut, memberikan perlindungan bagi tak terhitung banyaknya ikan kecil, kerang, dan alga. Singa laut yang malas dan menggemaskan berjemur di bawah sinar matahari hangat di atas batu, menikmati matahari secara harmonis dengan alam. Lumba-lumba berenang bersama di air biru, saling mengejar dan bermain, menunjukkan kelincahan dan kebijaksanaan yang diberikan oleh alam. Namun, lingkungan laut yang indah ini menghadapi tantangan yang belum pernah terjadi sebelumnya. Berbagai jenis polusi sampah seperti bekas luka pada kulit lautan, tanpa ampun mengikis ekosistem yang dulunya murni. Banyak spesies menghadapi kekurangan makanan, peningkatan penyakit, bahkan penurunan populasi. Kita harus bertindak untuk melindungi rumah biru yang indah dan rapuh ini, agar lautan masa depan dapat kembali memulihkan kemurnian dan vitalitasnya.",
  "Title":"Melindungi Rumah Biru Kita",
  "SceneInfo": {
    "Scene": "MovieHighlights", // MovieHighlights untuk pencocokan sorotan film
    "FaceInfo": {
      "ImageInfoList": [
        {
          "Name": "Karakter A",
          "ImageURL": "https://****.cdn.bcebos.com/pic/3853ad1bdd9f70558718bf38?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080"
        }
      ]
    }
  }
}

Bentangkan untuk melihat OutputConfig

{
  "Count": 1,
  "Height": 1080,
  "Width": 1920,
  "MediaURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/script/output_{index}_w.mp4"
}

Konfigurasi Lanjutan

Untuk informasi lebih lanjut tentang konfigurasi lanjutan, lihat Logika remix dan konfigurasi lanjutan untuk pembuatan video batch satu klik.

FAQ

Untuk jawaban atas pertanyaan umum tentang pembuatan video berbasis skrip otomatis, lihat FAQ sorotan film:

Referensi