全部产品
Search
文档中心

Object Storage Service:Apa itu penggabungan audio?

更新时间:Jul 06, 2025

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:

  • 0: Penggabungan dimulai dari posisi awal audio yang digabungkan. Ini adalah nilai default.

  • Bilangan bulat lebih besar dari 0: Penggabungan dimulai dari jumlah milidetik tertentu dalam audio.

t

int

Tidak

Durasi audio yang akan digabungkan. Satuan: milidetik. Nilai valid:

  • 0: Penggabungan berlanjut hingga akhir objek audio. Ini adalah nilai default.

  • Bilangan bulat lebih besar dari 0: Penggabungan mencakup durasi tertentu dari audio dalam milidetik.

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:

  • 0: Transkoding dimulai dari posisi awal audio yang digabungkan. Ini adalah nilai default.

  • Bilangan bulat lebih besar dari 0: Transkoding dimulai dari jumlah milidetik tertentu dalam audio.

t

int

Tidak

Durasi audio yang akan ditranskode. Nilai valid:

  • 0: Transkoding berlanjut hingga akhir objek audio yang digabungkan. Ini adalah nilai default.

  • Bilangan bulat lebih besar dari 0: Transkoding mencakup durasi tertentu dari audio yang digabungkan dalam milidetik.

f

string

Ya

Format wadah audio keluaran.

  • mp3

  • aac

  • flac

  • oga

  • ac3

  • opus

  • amr

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.

  • 8000

  • 11025

  • 12000

  • 16000

  • 22050

  • 24000

  • 32000

  • 44100

  • 48000

  • 64000

  • 88200

  • 96000

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:

  • 0: selalu menggunakan target bitrate audio. Ini adalah nilai default.

  • 1: menggunakan bitrate terendah di antara objek audio yang akan digabungkan jika salah satu objek audio memiliki bitrate lebih rendah daripada bitrate audio yang ditentukan oleh parameter ab.

  • 2: mengembalikan kegagalan jika salah satu objek audio yang akan digabungkan memiliki bitrate lebih rendah daripada bitrate audio yang ditentukan oleh parameter ab.

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.

Catatan

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_QXVkaW9Db252ZXJ0

Gunakan 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)
}