All Products
Search
Document Center

Object Storage Service:Penggabungan audio

Last Updated:May 07, 2026

Anda dapat menggabungkan beberapa file audio menjadi satu file audio tunggal dan mengonversinya ke format yang diinginkan. Topik ini menjelaskan parameter serta memberikan contoh penggabungan audio.

Kasus penggunaan

  • Pembuatan dan produksi musik: Musisi dan produsen sering menggabungkan rekaman instrumen dan vokal terpisah untuk membuat lagu lengkap.

  • Pembuatan buku audio dan konten suara: Dalam produksi buku audio, rekaman narasi sering digabungkan per bab agar cerita berjalan lancar.

  • Pasca-produksi film dan televisi: Dalam tahap pasca-produksi, editor audio menggabungkan dialog, narasi, efek suara latar, dan musik latar agar sesuai dengan visual.

  • Pembuatan konten media sosial: Pengguna platform video pendek sering menggabungkan efek suara, sulih suara, dan musik latar agar kontennya lebih ekspresif.

Catatan penggunaan

  • Penggabungan audio hanya mendukung pemrosesan asinkron (menggunakan metode x-oss-async-process).

  • Sebelum melakukan penggabungan audio, Anda harus mengikat proyek IMM. Untuk petunjuk cara mengikat proyek melalui Konsol atau menggunakan API, lihat quick start dan Bind an OSS bucket.

  • Akses anonim akan ditolak.

  • Anda harus memiliki izin yang diperlukan untuk menggunakan fitur ini. Untuk informasi selengkapnya, lihat permissions.

  • Menggunakan laju pengambilan sampel atau jumlah channel audio default dapat menyebabkan kegagalan penggabungan karena masalah kompatibilitas dengan format kontainer audio target.

  • Anda dapat menggabungkan hingga 11 file audio sekaligus.

Parameter

Action: audio/concat

Tabel berikut menjelaskan parameter tersebut.

Parameter penggabungan

Urutan parameter pre dan sur dalam string permintaan menentukan urutan penggabungan untuk audio/concat:

  • /pre: File audio yang akan ditambahkan di awal.

  • /sur: File audio yang akan ditambahkan di akhir.

Parameter

Type

Required

Description

ss

int

No

Waktu mulai klip audio yang akan digabungkan, dalam milidetik. Nilai yang valid:

  • 0 (default): Penggabungan dimulai dari awal klip.

  • Nilai lebih besar dari 0: Penggabungan dimulai pada milidetik ke-ss.

t

int

No

Durasi klip audio yang ditambahkan di awal atau akhir untuk digabungkan, dalam milidetik. Nilai yang valid:

  • 0 (default): Penggabungan berlanjut hingga akhir klip.

  • Nilai lebih besar dari 0: Penggabungan berlangsung selama t milidetik.

o

string

Yes

Objek OSS dalam bucket saat ini. Nama objek harus dikodekan dalam Base64 yang aman untuk URL.

Parameter transkoding

Parameter

Type

Required

Description

ss

int

No

Waktu mulai untuk transkoding file audio utama, dalam milidetik. Nilai yang valid:

  • 0 (default): Transkoding dimulai dari awal audio.

  • Nilai lebih besar dari 0: Transkoding dimulai pada milidetik ke-ss.

t

int

No

Durasi untuk transkoding file audio utama, dalam milidetik. Nilai yang valid:

  • 0 (default): Transkoding berlanjut hingga akhir audio.

  • Nilai lebih besar dari 0: Transkoding berlangsung selama t milidetik.

f

string

Yes

Format kontainer audio:

  • mp3

  • aac

  • flac

  • oga

  • ac3

  • opus

  • amr

ar

int

No

Laju pengambilan sampel audio. Secara default, nilai ini sesuai dengan laju file audio sumber yang ditentukan oleh align. Nilai yang valid:

  • 8000

  • 11025

  • 12000

  • 16000

  • 22050

  • 24000

  • 32000

  • 44100

  • 48000

  • 64000

  • 88200

  • 96000

Catatan

Laju pengambilan sampel yang didukung bervariasi tergantung format. mp3 mendukung hingga 48 kHz; opus mendukung 8 kHz, 12 kHz, 16 kHz, 24 kHz, dan 48 kHz; ac3 mendukung 32 kHz, 44,1 kHz, dan 48 kHz; amr hanya mendukung 8 kHz dan 16 kHz.

ac

int

No

Jumlah channel audio. Secara default, nilai ini sesuai dengan jumlah channel file audio sumber yang ditentukan oleh parameter align. Nilai yang valid: 1 hingga 8.

Catatan

Jumlah channel yang didukung bervariasi tergantung format. mp3 mendukung mono dan stereo; ac3 mendukung hingga 6 channel (5.1); amr hanya mendukung mono.

aq

int

No

Kualitas kompresi audio. Nilai yang valid: 0 hingga 100.

Catatan

Parameter ini saling eksklusif dengan ab. Jika keduanya tidak diatur, penyandi akan menggunakan bitrate default-nya.

ab

int

No

Bitrate audio, dalam bit/s (bps). Nilai yang valid: 1000 hingga 10000000.

abopt

string

No

Opsi bitrate audio. Nilai yang valid:

  • 0 (default): Selalu gunakan bitrate audio target.

  • 1: Jika bitrate file sumber lebih rendah daripada nilai ab, maka bitrate terendah di antara file sumber yang digunakan.

  • 2: Jika bitrate file sumber lebih rendah daripada nilai ab, operasi gagal.

Catatan

Parameter ini harus digunakan bersama parameter ab.

align

int

No

Indeks file audio utama dalam daftar penggabungan. Parameter transkoding default diambil dari file ini. Nilai default adalah 0, yang menunjukkan file audio pertama dalam daftar penggabungan.

adepth

int

No

Kedalaman bit pengambilan sampel audio. Nilai yang valid: 16 dan 24.

Catatan

Parameter ini hanya berlaku ketika f diatur ke flac.

Catatan

Penggabungan audio juga menggunakan parameter sys/saveas dan notify. Untuk informasi selengkapnya, lihat save as dan Message notification.

REST API

Gabungkan audio ke AAC

  • File audio: pre1.mp3, pre2.wav, example.oga, sur1.aac, sur2.wma

  • Durasi dan urutan penggabungan:

    Nama audio

    Order

    Durasi

    pre1.mp3

    1

    Seluruh audio

    pre2.wav

    2

    2 detik pertama

    example.oga

    3

    Seluruh audio

    sur1.aac

    4

    4s hingga 10s

    sur2.wma

    5

    10s hingga akhir

  • Notifikasi penyelesaian transkoding: Kirim pesan Message Service (MNS).

  • Spesifikasi audio output

    • Format audio: aac

    • Profil audio: laju pengambilan sampel 44,1 kHz, mono

    • Bitrate audio: 96 kbps

    • Jalur penyimpanan objek

      • File AAC: oss://outbucket/outobj.aac

Contoh permintaan

// Lakukan penggabungan audio pada objek example.oga.
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

OSS SDKs

Anda dapat melakukan penggabungan audio dengan menggunakan pemrosesan asinkron melalui OSS SDK untuk Java, Python, atau Go.

Prasyarat

  1. Pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.

  2. Tentukan nama bucket, misalnya examplebucket.

  3. Tentukan nama file audio output, misalnya dest.aac.

  4. Tentukan nama file audio sumber yang akan digabungkan, misalnya src1.mp3 dan src2.mp3.

Java

Diperlukan OSS SDK for Java versi 3.17.4 atau lebih baru.

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 {
        // Setel endpoint ke endpoint wilayah tempat bucket berada.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan ID wilayah Alibaba Cloud, misalnya cn-hangzhou.
        String region = "cn-hangzhou";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket.
        String bucketName = "examplebucket";
        // Tentukan nama file audio output.
        String targetAudio = "dest.aac";
        // Tentukan nama file audio yang akan digabungkan.
        String audio1 = "src1.mp3";
        String audio2 = "src2.mp3";

        // Buat instance OSSClient.
        // Setelah selesai, matikan OSSClient untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Bangun string style untuk pemrosesan audio dan 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);

            // Bangun 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 OSSClient.
            ossClient.shutdown();
        }
    }
}

Python

Diperlukan OSS SDK for Python versi 2.18.4 atau lebih baru.

# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider


def main():
    # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

    # Setel endpoint ke endpoint wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

    # Tentukan ID wilayah Alibaba Cloud, misalnya cn-hangzhou.
    region = 'cn-hangzhou'

    # Tentukan nama bucket, misalnya examplebucket.
    bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)

    # Tentukan nama file audio output.
    target_audio = 'dest.aac'

    # Tentukan nama file audio yang akan digabungkan.
    audio1 = 'src1.mp3'
    audio2 = 'src2.mp3'

    # Bangun string style untuk pemrosesan audio dan 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"

    # Bangun instruksi pemrosesan asinkron.
    bucket_encoded = base64.urlsafe_b64encode(bucket.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

Diperlukan OSS SDK for Go versi 3.0.2 atau lebih baru.

package main

import (
	"encoding/base64"
	"fmt"
	"log"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, dan OSS_SESSION_TOKEN telah diatur.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Buat instance OSSClient.
	// Setel endpoint ke endpoint wilayah tempat bucket Anda berada. Misalnya, untuk China (Hangzhou), setel ke https://oss-cn-hangzhou.aliyuncs.com.
	// Setel region ke ID wilayah Alibaba Cloud, misalnya 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, misalnya examplebucket.
	bucketName := "examplebucket"

	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Tentukan nama file audio yang akan digabungkan.
	audio1 := "src1.mp3"
	audio2 := "src2.mp3"
	// Tentukan nama file audio output.
	targetAudio := "dest.aac"

	// Bangun string style untuk pemrosesan audio dan 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)

	// Bangun 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("Failed to async process object: %s", err)
	}

	fmt.Printf("EventId: %s\n", result.EventId)
	fmt.Printf("RequestId: %s\n", result.RequestId)
	fmt.Printf("TaskId: %s\n", result.TaskId)
}