All Products
Search
Document Center

Object Storage Service:Transkoding audio

Last Updated:Mar 21, 2026

Konversi file audio yang disimpan di OSS ke format berbeda menggunakan permintaan pemrosesan asinkron. Topik ini menjelaskan parameter serta menyediakan contoh kode untuk Java, Python, dan Go.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Menautkan bucket OSS ke proyek Intelligent Media Management (IMM). Untuk instruksi penyiapan, lihat Quick start dan AttachOSSBucket.

  • Memiliki izin yang diperlukan untuk transkoding audio.

  • Mengonfigurasi kredensial akses sebagai variabel lingkungan. Java dan Python menggunakan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET. Go juga memerlukan OSS_SESSION_TOKEN.

Kasus penggunaan

  • Kompatibilitas format: Mengonversi file audio ke format yang didukung oleh perangkat atau pemutar target.

  • Optimisasi penyimpanan: Melakukan transkoding audio lossless (seperti FLAC atau WAV) ke format lossy terkompresi seperti MP3 untuk mengurangi jejak penyimpanan di perangkat seluler.

  • Streaming media: Menghasilkan beberapa versi dengan bitrate berbeda dari file sumber untuk mendukung streaming adaptif dalam berbagai kondisi jaringan.

  • Post-processing video: Mengonversi track audio ke format terkompresi selama alur kerja pengeditan video guna meningkatkan efisiensi transfer.

Cara kerja

Kirim permintaan transkoding asinkron menggunakan header x-oss-async-process. Aksinya adalah audio/convert. Setelah tugas selesai, OSS menyimpan output audio ke path yang Anda tentukan dengan sys/saveas.

Transkoding audio hanya tersedia secara asinkron — header x-oss-process yang digunakan untuk pemrosesan gambar sinkron tidak didukung.

Parameter

Aksi: audio/convert

ParameterTipeWajibDeskripsi
fstringYaFormat kontainer output. Nilai yang didukung: mp3, aac, flac, oga, ac3, opus, amr
ssintTidakWaktu mulai dalam milidetik. 0 (default) dimulai dari awal. Bilangan bulat positif apa pun dimulai dari offset tersebut.
tintTidakDurasi dalam milidetik setelah waktu mulai. 0 (default) berjalan hingga akhir audio.
arintTidakLaju sampel output audio dalam Hz. Default mengikuti laju sampel sumber. Lihat Batasan format untuk batasan per format. Nilai yang didukung: 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000
acintTidakJumlah saluran audio pada output. Default mengikuti jumlah saluran sumber. Nilai valid: 1–8. Lihat Batasan format untuk batasan per format.
aqintTidakKualitas kompresi audio. Nilai valid: 0–100. Saling eksklusif dengan ab.
abintTidakBitrate audio dalam bit/s. Nilai valid: 1000–10000000. Saling eksklusif dengan aq.
aboptstringTidakPerilaku bitrate ketika bitrate sumber lebih rendah daripada target. 0 (default): selalu gunakan bitrate target. 1: gunakan bitrate sumber. 2: kembalikan kegagalan.
adepthintTidakKedalaman bit sampling output audio. Nilai valid: 16, 24. Hanya berlaku saat f=flac.
Gunakan sys/saveas untuk menentukan path output dan notify untuk menerima notifikasi penyelesaian. Lihat sys/saveas dan Gunakan fitur notifikasi.

Batasan format

Format output yang berbeda memberlakukan batasan tambahan pada ar (laju sampel) dan ac (saluran audio). Jika Anda menggunakan laju sampel atau jumlah saluran default, transkoding dapat gagal ketika nilai sumber tidak kompatibel dengan format target. Tetapkan ar dan ac secara eksplisit saat menargetkan format dengan persyaratan ketat.

FormatLaju sampel yang didukungSaluran audio yang didukung
MP3Hingga 48 kHz1–2
AACSemua nilai yang didukungTidak ada batasan spesifik format
FLACSemua nilai yang didukungTidak ada batasan spesifik format
OGASemua nilai yang didukungTidak ada batasan spesifik format
AC-332 kHz, 44,1 kHz, 48 kHzHingga 6 (5.1)
Opus8 kHz, 12 kHz, 16 kHz, 24 kHz, 48 kHzTidak ada batasan spesifik format
AMR8 kHz, 16 kHz1

Batasan

  • Transkoding audio tidak mendukung penyesuaian kedalaman bit, kecuali untuk output FLAC (gunakan adepth). Untuk kontrol kedalaman bit pada track video, lihat Transkoding video.

  • Permintaan anonim ditolak. Autentikasi diperlukan.

  • Hanya SDK Java, Python, dan Go yang mendukung transkoding audio asinkron.

Gunakan RESTful API

Semua contoh menggunakan header x-oss-async-process untuk mengirimkan tugas transkoding asinkron.

Konversi MP3 ke AAC

Transkode klip 60 detik dari example.mp3 yang dimulai pada posisi 1.000 ms, output sebagai AAC pada 96 kbit/s, dengan notifikasi penyelesaian melalui Simple Message Queue (SMQ).

POST /example.mp3?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/convert,ss_10000,t_60000,f_aac,ab_96000|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQo/notify,topic_QXVkaW9Db252ZXJ0

Konversi WAV ke Opus

Transkode seluruh file example.wav ke Opus pada 48 kHz, dua saluran, 96 kbit/s, disimpan ke oss://outbucket/outobject.opus, dengan notifikasi penyelesaian melalui Message Notification Service (MNS).

POST /example.wav?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/convert,f_opus,ab_96000,ar_48000,ac_2|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqLnthdXRvZXh0fQo/notify,topic_QXVkaW9Db252ZXJ0

Gunakan OSS SDK

Java

Memerlukan OSS SDK untuk Java V3.17.4 atau lebih baru.

Contoh berikut mentranskode src.mp3 ke format AAC, dimulai pada 10 detik, durasi 60 detik, pada 96 kbit/s, dan menyimpan hasilnya ke dest.aac di bucket yang sama.

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.util.Base64;

public class Demo {
    public static void main(String[] args) throws ClientException {
        // Endpoint wilayah tempat bucket berada
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // ID wilayah bucket
        String region = "cn-hangzhou";
        // Muat kredensial dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        String bucketName = "examplebucket";
        String targetKey = "dest.aac";
        String sourceKey = "src.mp3";

        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Parameter transkoding: mulai pada 10 dtk, durasi 60 dtk, output AAC pada 96 kbit/s
            String style = String.format("audio/convert,ss_10000,t_60000,f_aac,ab_96000");
            // Encode nama bucket dan kunci objek output ke Base64 untuk sys/saveas
            String bucketEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(bucketName.getBytes());
            String targetEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(targetKey.getBytes());
            String process = String.format("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded);

            AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, process);
            AsyncProcessObjectResult response = ossClient.asyncProcessObject(request);
            System.out.println("EventId: " + response.getEventId());
            System.out.println("RequestId: " + response.getRequestId());
            System.out.println("TaskId: " + response.getTaskId());
        } finally {
            ossClient.shutdown();
        }
    }
}

Python

Memerlukan OSS SDK untuk Python V2.18.4 atau lebih baru.

Contoh berikut mentranskode src.mp3 ke format AAC, dimulai pada 10 detik, durasi 60 detik, pada 96 kbit/s, dan menyimpan hasilnya ke dest.aac di bucket yang sama.

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

def main():
    # Muat kredensial dari variabel lingkungan
    auth = oss2.Auth(EnvironmentVariableCredentialsProvider())
    endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    bucket = oss2.Bucket(auth, endpoint, 'examplebucket')

    source_key = 'src.mp3'
    target_key = 'dest.aac'

    # Parameter transkoding: mulai pada 10 dtk, durasi 60 dtk, output AAC pada 96 kbit/s
    style = 'audio/convert,ss_10000,t_60000,f_aac,ab_96000'

    # Encode nama bucket dan kunci objek output ke Base64 untuk sys/saveas
    bucket_name_encoded = base64.urlsafe_b64encode('examplebucket'.encode()).decode().rstrip('=')
    target_key_encoded = base64.urlsafe_b64encode(target_key.encode()).decode().rstrip('=')
    process = f"{style}|sys/saveas,b_{bucket_name_encoded},o_{target_key_encoded}/notify,topic_QXVkaW9Db252ZXJ0"

    try:
        result = bucket.async_process_object(source_key, 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

Memerlukan OSS SDK untuk Go V3.0.2 atau lebih baru.

Contoh berikut mentranskode src.mp3 ke format AAC, dimulai pada 10 detik, durasi 60 detik, pada 96 kbit/s, dan menyimpan hasilnya ke dest.aac di bucket yang sama.

package main

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

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Muat kredensial dari variabel lingkungan OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, dan OSS_SESSION_TOKEN
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat klien OSS untuk wilayah bucket
	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)
	}

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

	sourceKey := "src.mp3"
	targetKey := "dest.aac"

	// Parameter transkoding: mulai pada 10 dtk, durasi 60 dtk, output AAC pada 96 kbit/s
	style := "audio/convert,ss_10000,t_60000,f_aac,ab_96000"

	// Encode nama bucket dan kunci objek output ke Base64 untuk sys/saveas
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", style, bucketNameEncoded, targetKeyEncoded)

	result, err := bucket.AsyncProcessObject(sourceKey, 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)
}

Langkah berikutnya