Fitur penggabungan audio memungkinkan Anda menggabungkan beberapa objek audio menjadi satu objek audio dalam format yang ditentukan. Topik ini menjelaskan parameter penggabungan audio dan memberikan contoh penggunaannya.
Skenario
Penciptaan dan produksi musik: Pencipta musik dan produser sering kali perlu menggabungkan rekaman instrumen dan vokal individu untuk menciptakan lagu yang lengkap.
Pembuatan buku audio dan konten suara: Proses pembuatan buku audio biasanya melibatkan penggabungan bab-bab audio secara berurutan untuk memastikan penyajian cerita yang mulus.
Pasca-produksi film dan televisi: Selama pasca-produksi film, serial TV, atau animasi, elemen-elemen seperti dialog, sulih suara, suara lingkungan, dan suara instrumental digabungkan dengan cermat untuk menciptakan pengalaman audio yang imersif yang melengkapi konten di layar.
Pembuatan konten media sosial: Pembuat konten media sosial mengintegrasikan berbagai efek suara, sulih suara, dan suara latar untuk meningkatkan kualitas ekspresif konten mereka.
Catatan Penggunaan
Penggabungan audio hanya mendukung pemrosesan asinkron (x-oss-async-process).
Pastikan Anda telah mengaitkan Bucket Object Storage Service (OSS) yang sesuai dengan proyek Intelligent Media Management (IMM). Untuk informasi lebih lanjut tentang cara mengaitkan bucket OSS dengan proyek IMM di konsol OSS, lihat Memulai Cepat. Untuk informasi lebih lanjut tentang cara mengaitkan bucket OSS dengan proyek IMM menggunakan API IMM, lihat AttachOSSBucket.
Akses anonim akan ditolak.
Anda harus memiliki izin yang diperlukan untuk menggunakan fitur ini. Untuk informasi lebih lanjut, lihat izin.
Jika Anda menggunakan laju pengambilan sampel default atau jumlah saluran suara, penggabungan audio mungkin gagal karena ketidakcocokan dengan format wadah audio yang ditentukan.
Anda dapat menggabungkan hingga 11 objek audio menjadi satu objek audio sekaligus.
Parameter
Action: audio/concat
Tabel berikut menjelaskan parameter yang dapat dikonfigurasi untuk operasi penggabungan audio.
Parameter untuk penggabungan
Urutan parameter pre dan sur dalam string permintaan menentukan urutan penggabungan objek audio.
/pre: menyisipkan objek audio sebelum objek audio lain yang ditentukan./sur: menyisipkan objek audio setelah objek audio lain yang ditentukan.
Parameter | Tipe | Diperlukan | Deskripsi |
ss | int | Tidak | Titik waktu pada objek audio saat penggabungan dimulai. Satuan: milidetik. Nilai valid:
|
t | int | Tidak | Durasi audio yang akan digabungkan. Satuan: milidetik. Nilai valid:
|
o | string | Ya | Nama objek audio di bucket OSS. Nama tersebut harus dienkripsi dalam Base64 yang aman untuk URL. |
Parameter untuk transkoding
Parameter | Tipe | Diperlukan | Deskripsi |
ss | int | Tidak | Titik waktu pada objek audio yang digabungkan saat transkoding dimulai. Satuan: milidetik. Nilai valid:
|
t | int | Tidak | Durasi audio yang akan ditranskode. Nilai valid:
|
f | string | Ya | Format wadah audio keluaran.
|
ar | int | Tidak | Laju pengambilan sampel audio keluaran. Secara default, audio keluaran memiliki laju pengambilan sampel yang sama dengan audio sumber yang ditentukan oleh parameter align.
Catatan Laju pengambilan sampel yang didukung bervariasi di antara format yang berbeda: 48 kHz dan lebih rendah untuk MP3, 8 kHz, 12 kHz, 16 kHz, 24 kHz, dan 48 kHz untuk Opus, 32 kHz, 44,1 kHz, dan 48 kHz untuk AC3, serta 8 kHz dan 16 kHz untuk AMR. |
ac | int | Tidak | Jumlah saluran suara dalam audio keluaran. Secara default, audio keluaran memiliki jumlah saluran suara yang sama dengan audio sumber yang ditentukan oleh parameter align. Nilai valid: 1 hingga 8. Catatan Jumlah saluran suara bervariasi di antara format audio: satu atau dua untuk MP3, hingga enam untuk AC3 5.1, dan satu untuk AMR. |
aq | int | Tidak | Kualitas kompresi audio. Nilai valid: 0 hingga 100. Catatan Parameter ini dan parameter ab saling eksklusif. Jika Anda membiarkan kedua parameter kosong, bitrate default codec akan digunakan. |
ab | int | Tidak | Target bitrate audio. Satuan: bit/detik. Nilai valid: 1000 hingga 10000000. |
abopt | string | Tidak | Opsi bitrate audio. Nilai valid:
Catatan Parameter ini harus digunakan bersama dengan parameter ab. |
align | int | Tidak | Nomor urut objek audio dari mana parameter transkoding default diperoleh. Nilai default parameter ini adalah 0, yang menentukan objek audio pertama dalam daftar objek audio yang akan digabungkan. |
adepth | int | Tidak | Kedalaman bit pengambilan sampel audio keluaran. Nilai valid: 16 dan 24. Catatan Parameter ini hanya berlaku jika Anda mengatur parameter f ke flac. |
Anda mungkin juga perlu menggunakan parameter sys/saveas dan notify saat menggabungkan objek audio. Untuk informasi lebih lanjut, lihat sys/saveas dan Notifikasi Pesan.
Gunakan RESTful API
Menggabungkan lima objek audio dalam format berbeda menjadi objek audio dalam format AAC
Informasi Tugas
Objek Sumber
Nama Audio: pre1.mp3, pre2.wav, example.oga, sur1.aac, dan sur2.wma
Metode Pemrosesan
Durasi dan Urutan:
Nama Audio
Order
Durasi
pre1.mp3
1
Seluruh durasi audio
pre2.wav
2
2 detik pertama
example.oga
3
Seluruh durasi audio
sur1.aac
4
Dari detik ke-4 hingga detik ke-10
sur2.wma
5
Dari detik ke-10 hingga akhir
Notifikasi Penyelesaian Transkoding: Gunakan Simple Message Queue (SMQ).
Objek Tujuan
Informasi Audio
Format Audio: AAC
Spesifikasi Audio: laju pengambilan sampel 44,1 kHz dan saluran mono
Bitrate Audio: 96 Kbit/detik
Path Penyimpanan Objek
Objek AAC: oss://outbucket/outobj.aac
Contoh Permintaan
// Menggabungkan objek audio.
POST /example.oga?x-oss-async-process HTTP/1.1
Host: video-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
x-oss-async-process=audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_cHJlMS5tcDMK/pre,o_cHJlMi53YXYK,t_2000/sur,o_c3VyMS5hYWMK,ss_4000,t_10000/sur,o_c3VyMi53bWEK,ss_10000|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqLnthdXRvZXh0fQo/notify,topic_QXVkaW9Db252ZXJ0Gunakan SDK OSS
Anda hanya dapat menggunakan SDK OSS untuk Java, Python, atau Go untuk menggabungkan objek audio secara asinkron.
Java
SDK OSS untuk Java V3.17.4 atau lebih baru diperlukan.
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.AsyncProcessObjectRequest;
import com.aliyun.oss.model.AsyncProcessObjectResult;
import com.aliyuncs.exceptions.ClientException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Demo {
public static void main(String[] args) throws ClientException, ClientException {
// Tentukan endpoint wilayah tempat bucket berada.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: cn-hangzhou.
String region = "cn-hangzhou";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket.
String bucketName = "examplebucket";
// Tentukan nama audio keluaran.
String targetAudio = "dest.aac";
// Tentukan objek audio yang akan digabungkan.
String audio1 = "src1.mp3";
String audio2 = "src2.mp3";
// Buat instance OSSClient.
// Panggil metode shutdown untuk melepaskan sumber daya saat OSSClient tidak lagi digunakan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Buat variabel gaya bertipe string untuk menyimpan parameter penggabungan audio.
String audio1Encoded = Base64.getUrlEncoder().encodeToString(audio1.getBytes(StandardCharsets.UTF_8)).replace("=", "");
String audio2Encoded = Base64.getUrlEncoder().encodeToString(audio2.getBytes(StandardCharsets.UTF_8)).replace("=", "");
String style = String.format("audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_%s/pre,o_%s,t_0", audio1Encoded, audio2Encoded);
// Buat instruksi pemrosesan asinkron.
String bucketEncoded = Base64.getUrlEncoder().encodeToString(bucketName.getBytes(StandardCharsets.UTF_8)).replace("=", "");
String targetEncoded = Base64.getUrlEncoder().encodeToString(targetAudio.getBytes(StandardCharsets.UTF_8)).replace("=", "");
String process = String.format("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded);
// Buat objek AsyncProcessObjectRequest.
AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, audio1, process);
// Jalankan tugas pemrosesan asinkron.
AsyncProcessObjectResult response = ossClient.asyncProcessObject(request);
System.out.println("EventId: " + response.getEventId());
System.out.println("RequestId: " + response.getRequestId());
System.out.println("TaskId: " + response.getTaskId());
} finally {
// Matikan instance OSSClient.
ossClient.shutdown();
}
}
}
Python
SDK OSS untuk Python V2.18.4 atau lebih baru diperlukan.
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses sementara dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: cn-hangzhou.
region = 'cn-hangzhou'
# Tentukan nama bucket. Contoh: examplebucket.
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Tentukan nama audio keluaran.
target_audio = 'dest.aac'
# Tentukan objek audio yang akan digabungkan.
audio1 = 'src1.mp3'
audio2 = 'src2.mp3'
# Buat variabel gaya bertipe string untuk menyimpan parameter penggabungan audio.
audio1_encoded = base64.urlsafe_b64encode(audio1.encode()).decode().rstrip('=')
audio2_encoded = base64.urlsafe_b64encode(audio2.encode()).decode().rstrip('=')
style = f"audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_{audio1_encoded}/pre,o_{audio2_encoded},t_0"
# Buat instruksi pemrosesan asinkron.
bucket_encoded = base64.urlsafe_b64encode(bucket_name.encode()).decode().rstrip('=')
target_encoded = base64.urlsafe_b64encode(target_audio.encode()).decode().rstrip('=')
process = f"{style}|sys/saveas,b_{bucket_encoded},o_{target_encoded}/notify,topic_QXVkaW9Db252ZXJ0"
print(process)
# Jalankan tugas pemrosesan asinkron.
try:
result = bucket.async_process_object(audio1, process)
print(f"EventId: {result.event_id}")
print(f"RequestId: {result.request_id}")
print(f"TaskId: {result.task_id}")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
main()
Go
SDK OSS untuk Go V3.0.2 atau lebih baru diperlukan.
package main
import (
"encoding/base64"
"fmt"
"log"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Dapatkan kredensial akses sementara dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, dan OSS_SESSION_TOKEN telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Buat instance OSSClient.
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
// Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: cn-hangzhou.
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Tentukan nama bucket. Contoh: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Tentukan objek audio yang akan digabungkan.
audio1 := "src1.mp3"
audio2 := "src2.mp3"
// Tentukan nama audio keluaran.
targetAudio := "dest.aac"
// Buat variabel gaya bertipe string untuk menyimpan parameter penggabungan audio.
audio1Encoded := base64.URLEncoding.EncodeToString([]byte(audio1))
audio2Encoded := base64.URLEncoding.EncodeToString([]byte(audio2))
style := fmt.Sprintf("audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_%s/pre,o_%s,t_0", audio1Encoded, audio2Encoded)
// Buat instruksi pemrosesan asinkron.
bucketEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
targetEncoded := base64.URLEncoding.EncodeToString([]byte(targetAudio))
process := fmt.Sprintf("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded)
// Jalankan tugas pemrosesan asinkron.
result, err := bucket.AsyncProcessObject(audio1, process)
if err != nil {
log.Fatalf("Gagal memproses objek secara asinkron: %s", err)
}
fmt.Printf("EventId: %s\n", result.EventId)
fmt.Printf("RequestId: %s\n", result.RequestId)
fmt.Printf("TaskId: %s\n", result.TaskId)
}