Penggabungan video memungkinkan Anda menggabungkan beberapa video dengan format, bitrate, dan resolusi berbeda menjadi satu video panjang dengan format, bitrate, dan resolusi tertentu. Biasanya digunakan untuk menambahkan bagian pembukaan atau penutup ke video, atau untuk menggabungkan klip dari siaran langsung yang direkam. Pemotongan video memungkinkan Anda menangkap klip dari video asli dan menyimpannya sebagai video baru. Biasanya digunakan untuk menangkap sorotan dari video. Topik ini menjelaskan cara menggabungkan dan mengedit video menggunakan ApsaraVideo Media Processing (MPS) SDK untuk Java.
Skenario
Video intro dan outro tetap: Digunakan untuk menambahkan bagian awal atau akhir ke video, atau untuk menggabungkan klip dari siaran langsung yang direkam.
Penggabungan klip: Memotong klip tertentu dari video dan menyimpannya sebagai file video baru. Metode ini biasanya digunakan untuk menangkap sorotan dari video.
Pembukaan dan penutup: Efek penggabungan khusus yang memungkinkan Anda menyematkan bagian pembukaan dan penutup di awal dan akhir video input. Bagian pembukaan ditampilkan dalam mode Gambar-dalam-Gambar (PiP).
Menggabungkan beberapa klip video secara berurutan
Sebagai contoh, sebuah video input diambil mulai dari 00:00:03.000 dan berlangsung selama 00:00:13.000 detik. Video yang diambil kemudian digabungkan dengan bagian dari 00:00:01.000 hingga 00:00:05.030 dari pembukaan. Durasi total video yang dihasilkan adalah 17,30 detik.
/**
* Menggabungkan beberapa klip video secara berurutan.
* @return
* @throws Exception
*/
public static void mergrUrlListJob() throws Exception {
// Konstruksi parameter output.
JSONArray outputs = new JSONArray();
// Konfigurasikan input pekerjaan. Pastikan bahwa file media yang digunakan sebagai input pekerjaan berada di wilayah yang sama dengan klien.
JSONObject input = new JSONObject();
input.put("Bucket", "<nama bucket Anda>");
input.put("Location", "oss-cn-shanghai");
// Konfigurasikan output pekerjaan.
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode gagal");
}
output.put("TemplateId", "<transcode templateId>");
// Konstruksi data untuk pemotongan video.
JSONObject clip = new JSONObject();
// Potong video dari 1.000s hingga 5.030s.
clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"Duration\":\"5.30\"}");
// Potong video dari 1.000s hingga 5.030s yang tersisa dari akhir video.
//clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"End\":\"5.30\"}");
// Menentukan apakah akan mengedit klip pertama dari video. Nilai valid: true dan false. Nilai true menentukan bahwa klip video digabungkan untuk pekerjaan transkode setelah diedit. Nilai false menentukan bahwa klip video digabungkan untuk pekerjaan transkode sebelum diedit.
clip.put("ConfigToClipFirstPart", true);
// Konstruksi data untuk penggabungan video.
JSONArray mergeList = new JSONArray();
JSONObject merge = new JSONObject();
merge.put("MergeURL", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/test2mp4", "utf-8"));
merge.put("Start", "00:00:03.000");
merge.put("Duration", "00:00:13.000");
mergeList.add(merge);
output.put("Clip", clip);
output.put("MergeList", mergeList);
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// Input pekerjaan.
.setInput(input.toJSONString())
// Konfigurasi output pekerjaan.
.setOutputs(outputs.toJSONString())
// Bucket OSS tempat file output disimpan.
.setOutputBucket("exampleBucket")
// Wilayah tempat bucket OSS berada.
.setOutputLocation("oss-cn-shanghai")
// ID pipeline.
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// Tulis kode Anda sendiri untuk menampilkan respons dari operasi API jika diperlukan.
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}Menggabungkan klip video dengan menggunakan jalur OSS dari file konfigurasi
Sebagai contoh, sebuah video input diambil mulai dari 00:00:03.000 dan berlangsung selama 00:00:10.000 detik. Video yang diambil digabungkan dengan bagian dari 00:00:01.000 hingga 00:00:05.030 hingga akhir pembukaan.
Contoh isi mergeConfigfile:
{"MergeList":[{"MergeURL":"https://bucket-name.oss-cn-beijing.aliyuncs.com/mps-test/demo/test2.mp4","Start":"00:00:03.000","Duration":"00:00:10.000"}]}
/**
* Menggabungkan klip video dengan menggunakan jalur OSS dari file konfigurasi.
* @return
* @throws Exception
*/
public static void mergrConfigFileJob() throws Exception {
// Konstruksi parameter output.
JSONArray outputs = new JSONArray();
// Konfigurasikan input pekerjaan. Pastikan bahwa file media yang digunakan sebagai input pekerjaan berada di wilayah yang sama dengan klien.
JSONObject input = new JSONObject();
input.put("Bucket", "<nama bucket Anda>");
input.put("Location", "oss-cn-shanghai");
// Konfigurasikan output pekerjaan.
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode gagal");
}
output.put("TemplateId", "<transcode templateId>");
// Konstruksi data untuk pemotongan video.
JSONObject clip = new JSONObject();
// Potong video dari 1.000s hingga 5.030s.
clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"Duration\":\"5.30\"}");
// Potong video dari 1.000s hingga 5.030s yang tersisa dari akhir video.
//clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"End\":\"5.30\"}");
// Menentukan apakah akan mengedit klip pertama dari video. Nilai valid: true dan false. Nilai true menentukan bahwa klip video digabungkan untuk pekerjaan transkode setelah diedit. Nilai false menentukan bahwa klip video digabungkan untuk pekerjaan transkode sebelum diedit.
clip.put("ConfigToClipFirstPart", true);
output.put("Clip", clip);
// Jalur OSS dari file konfigurasi harus berupa URL HTTP.
output.put("MergeConfigUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/mps-test/demo/mergeConfigfile");
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// Input pekerjaan.
.setInput(input.toJSONString())
// Konfigurasi output pekerjaan.
.setOutputs(outputs.toJSONString())
// Bucket OSS tempat file output disimpan.
.setOutputBucket("exampleBucket")
// Wilayah tempat bucket OSS berada.
.setOutputLocation("oss-cn-shanghai")
// ID pipeline.
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// Tulis kode Anda sendiri untuk menampilkan respons dari operasi API jika diperlukan.
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}Sisipkan bagian pembukaan di awal video input atau tambahkan bagian penutup di akhir video input
Sebagai contoh, bagian pembukaan dengan resolusi 680 × 480 ditambahkan pada detik ketiga video input. Selain itu, bagian penutup dengan resolusi 680 × 480 ditambahkan di akhir video input. Bagian kosong setelah bagian penutup diisi dengan latar belakang warna putih.
Objek yang ditentukan oleh URL bagian pembukaan dan penutup harus dikodekan UTF-8, dan URL harus berupa alamat HTTP. Untuk informasi lebih lanjut, lihat Pengkodean URL.
/**
* Sisipkan bagian pembukaan di awal video input atau tambahkan bagian penutup di akhir video input.
* @return
* @throws Exception
*/
public static void openAndTailJob() throws Exception {
// Konstruksi parameter output.
JSONArray outputs = new JSONArray();
// Konfigurasikan input pekerjaan. Pastikan bahwa file media yang digunakan sebagai input pekerjaan berada di wilayah yang sama dengan klien.
JSONObject input = new JSONObject();
input.put("Bucket", "<nama bucket Anda>");
input.put("Location", "oss-cn-shanghai");
// Konfigurasikan output pekerjaan.
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode gagal");
}
output.put("TemplateId", "<transcode templateId>");
JSONArray openingList = new JSONArray();
JSONObject opening = new JSONObject();
opening.put("OpenUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/open.mp4", "utf-8"));
opening.put("Start", "3");
opening.put("Width", "680");
opening.put("Height", "480");
openingList.add(opening);
JSONArray tailSlateList = new JSONArray();
JSONObject tailSlate = new JSONObject();
// Objek yang ditentukan oleh URL bagian pembukaan dan penutup harus dikodekan UTF-8.
tailSlate.put("TailUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/tail.mp4", "utf-8"));
tailSlate.put("BlendDuration", "2");
tailSlate.put("Width", "680");
tailSlate.put("Height", "480");
tailSlate.put("IsMergeAudio", true);
tailSlate.put("BgColor", "White");
tailSlateList.add(tailSlate);
output.put("OpeningList", openingList);
output.put("TailSlateList", tailSlateList);
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// Input pekerjaan.
.setInput(input.toJSONString())
// Konfigurasi output pekerjaan.
.setOutputs(outputs.toJSONString())
// Bucket OSS tempat file output disimpan.
.setOutputBucket("exampleBucket")
// Wilayah tempat bucket OSS berada.
.setOutputLocation("oss-cn-shanghai")
// ID pipeline.
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// Tulis kode Anda sendiri untuk menampilkan respons dari operasi API jika diperlukan.
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}Kode sampel lengkap
package com.alibaba.bltest.api_v2;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.tea.TeaException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class MergeClipJobs {
/**
* :
* <p>Gunakan pasangan AccessKey Anda untuk menginisialisasi klien.</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.mts20140618.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// Wajib. Pastikan bahwa variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID telah dikonfigurasi.
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// Wajib. Pastikan bahwa variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi.
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = "mts.cn-shanghai.aliyuncs.com";
return new com.aliyun.mts20140618.Client(config);
}
/**
* Menggabungkan beberapa klip video secara berurutan.
* @return
* @throws Exception
*/
public static void mergrUrlListJob() throws Exception {
// Konstruksi parameter output.
JSONArray outputs = new JSONArray();
// Konfigurasikan input pekerjaan. Pastikan bahwa file media yang digunakan sebagai input pekerjaan berada di wilayah yang sama dengan klien.
JSONObject input = new JSONObject();
input.put("Bucket", "<nama bucket Anda>");
input.put("Location", "oss-cn-shanghai");
// Konfigurasikan output pekerjaan.
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode gagal");
}
output.put("TemplateId", "<transcode templateId>");
// Konstruksi data untuk pemotongan video.
JSONObject clip = new JSONObject();
// Potong video dari 1.000s hingga 5.030s.
clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"Duration\":\"5.30\"}");
// Potong video dari 1.000s hingga 5.030s yang tersisa dari akhir video.
//clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"End\":\"5.30\"}");
// Menentukan apakah akan mengedit klip pertama dari video. Nilai valid: true dan false. Nilai true menentukan bahwa klip video digabungkan untuk pekerjaan transkode setelah diedit. Nilai false menentukan bahwa klip video digabungkan untuk pekerjaan transkode sebelum diedit.
clip.put("ConfigToClipFirstPart", true);
// Konstruksi data untuk penggabungan video.
JSONArray mergeList = new JSONArray();
JSONObject merge = new JSONObject();
merge.put("MergeURL", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/test2mp4", "utf-8"));
merge.put("Start", "00:00:03.000");
merge.put("Duration", "00:00:13.000");
mergeList.add(merge);
output.put("Clip", clip);
output.put("MergeList", mergeList);
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// Input pekerjaan.
.setInput(input.toJSONString())
// Konfigurasi output pekerjaan.
.setOutputs(outputs.toJSONString())
// Bucket OSS tempat file output disimpan.
.setOutputBucket("exampleBucket")
// Wilayah tempat bucket OSS berada.
.setOutputLocation("oss-cn-shanghai")
// ID pipeline.
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// Tulis kode Anda sendiri untuk menampilkan respons dari operasi API jika diperlukan.
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
/**
* Menggabungkan klip video dengan menggunakan jalur OSS dari file konfigurasi.
* @return
* @throws Exception
*/
public static void mergrConfigFileJob() throws Exception {
// Konstruksi parameter output.
JSONArray outputs = new JSONArray();
// Konfigurasikan input pekerjaan. Pastikan bahwa file media yang digunakan sebagai input pekerjaan berada di wilayah yang sama dengan klien.
JSONObject input = new JSONObject();
input.put("Bucket", "<nama bucket Anda>");
input.put("Location", "oss-cn-shanghai");
// Konfigurasikan output pekerjaan.
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode gagal");
}
output.put("TemplateId", "<transcode templateId>");
// Konstruksi data untuk pemotongan video.
JSONObject clip = new JSONObject();
// Potong video dari 1.000s hingga 5.030s.
clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"Duration\":\"5.30\"}");
// Potong video dari 1.000s hingga 5.030s yang tersisa dari akhir video.
//clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"End\":\"5.30\"}");
// Menentukan apakah akan mengedit klip pertama dari video. Nilai valid: true dan false. Nilai true menentukan bahwa klip video digabungkan untuk pekerjaan transkode setelah diedit. Nilai false menentukan bahwa klip video digabungkan untuk pekerjaan transkode sebelum diedit.
clip.put("ConfigToClipFirstPart", true);
output.put("Clip", clip);
// Jalur OSS dari file konfigurasi harus berupa URL HTTP.
output.put("MergeConfigUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/mps-test/demo/mergeConfigfile");
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// Input pekerjaan.
.setInput(input.toJSONString())
// Konfigurasi output pekerjaan.
.setOutputs(outputs.toJSONString())
// Bucket OSS tempat file output disimpan.
.setOutputBucket("exampleBucket")
// Wilayah tempat bucket OSS berada.
.setOutputLocation("oss-cn-shanghai")
// ID pipeline.
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// Tulis kode Anda sendiri untuk menampilkan respons dari operasi API jika diperlukan.
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
/**
* Sisipkan bagian pembukaan di awal video input atau tambahkan bagian penutup di akhir video input.
* @return
* @throws Exception
*/
public static void openAndTailJob() throws Exception {
// Konstruksi parameter output.
JSONArray outputs = new JSONArray();
// Konfigurasikan input pekerjaan. Pastikan bahwa file media yang digunakan sebagai input pekerjaan berada di wilayah yang sama dengan klien.
JSONObject input = new JSONObject();
input.put("Bucket", "<nama bucket Anda>");
input.put("Location", "oss-cn-shanghai");
// Konfigurasikan output pekerjaan.
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode gagal");
}
output.put("TemplateId", "<transcode templateId>");
JSONArray openingList = new JSONArray();
JSONObject opening = new JSONObject();
opening.put("OpenUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/open.mp4", "utf-8"));
opening.put("Start", "3");
opening.put("Width", "680");
opening.put("Height", "480");
openingList.add(opening);
JSONArray tailSlateList = new JSONArray();
JSONObject tailSlate = new JSONObject();
// Objek yang ditentukan oleh URL bagian pembukaan dan penutup harus dikodekan UTF-8.
tailSlate.put("TailUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/tail.mp4", "utf-8"));
tailSlate.put("BlendDuration", "2");
tailSlate.put("Width", "680");
tailSlate.put("Height", "480");
tailSlate.put("IsMergeAudio", true);
tailSlate.put("BgColor", "White");
tailSlateList.add(tailSlate);
output.put("OpeningList", openingList);
output.put("TailSlateList", tailSlateList);
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// Input pekerjaan.
.setInput(input.toJSONString())
// Konfigurasi output pekerjaan.
.setOutputs(outputs.toJSONString())
// Bucket OSS tempat file output disimpan.
.setOutputBucket("exampleBucket")
// Wilayah tempat bucket OSS berada.
.setOutputLocation("oss-cn-shanghai")
// ID pipeline.
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// Tulis kode Anda sendiri untuk menampilkan respons dari operasi API jika diperlukan.
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian disediakan hanya untuk referensi.
// Pesan kesalahan.
System.out.println(error.getMessage());
// URL untuk pemecahan masalah.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}