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_IDdanOSS_ACCESS_KEY_SECRET. Go juga memerlukanOSS_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
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
f | string | Ya | Format kontainer output. Nilai yang didukung: mp3, aac, flac, oga, ac3, opus, amr |
ss | int | Tidak | Waktu mulai dalam milidetik. 0 (default) dimulai dari awal. Bilangan bulat positif apa pun dimulai dari offset tersebut. |
t | int | Tidak | Durasi dalam milidetik setelah waktu mulai. 0 (default) berjalan hingga akhir audio. |
ar | int | Tidak | Laju 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 |
ac | int | Tidak | Jumlah saluran audio pada output. Default mengikuti jumlah saluran sumber. Nilai valid: 1–8. Lihat Batasan format untuk batasan per format. |
aq | int | Tidak | Kualitas kompresi audio. Nilai valid: 0–100. Saling eksklusif dengan ab. |
ab | int | Tidak | Bitrate audio dalam bit/s. Nilai valid: 1000–10000000. Saling eksklusif dengan aq. |
abopt | string | Tidak | Perilaku bitrate ketika bitrate sumber lebih rendah daripada target. 0 (default): selalu gunakan bitrate target. 1: gunakan bitrate sumber. 2: kembalikan kegagalan. |
adepth | int | Tidak | Kedalaman bit sampling output audio. Nilai valid: 16, 24. Hanya berlaku saat f=flac. |
Gunakansys/saveasuntuk menentukan path output dannotifyuntuk 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.
| Format | Laju sampel yang didukung | Saluran audio yang didukung |
|---|---|---|
| MP3 | Hingga 48 kHz | 1–2 |
| AAC | Semua nilai yang didukung | Tidak ada batasan spesifik format |
| FLAC | Semua nilai yang didukung | Tidak ada batasan spesifik format |
| OGA | Semua nilai yang didukung | Tidak ada batasan spesifik format |
| AC-3 | 32 kHz, 44,1 kHz, 48 kHz | Hingga 6 (5.1) |
| Opus | 8 kHz, 12 kHz, 16 kHz, 24 kHz, 48 kHz | Tidak ada batasan spesifik format |
| AMR | 8 kHz, 16 kHz | 1 |
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_QXVkaW9Db252ZXJ0Konversi 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_QXVkaW9Db252ZXJ0Gunakan 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
sys/saveas — simpan output transkoding ke path OSS yang ditentukan
Gunakan fitur notifikasi — terima callback saat transkoding selesai
Transkoding video — transkode file video dan sesuaikan parameter termasuk kedalaman bit