Transkoding audio memungkinkan Anda mengonversi file audio dari satu format ke format lain. Topik ini menjelaskan parameter untuk transkoding audio dan mencakup contoh penggunaannya.
Skenario
Konversi file audio: File audio yang diunduh mungkin dalam format yang tidak kompatibel dengan perangkat. Untuk memungkinkan pemutaran, file tersebut perlu dikonversi ke format yang kompatibel.
Optimasi penyimpanan: Format audio lossless dapat memakan banyak ruang penyimpanan. Dengan menggunakan transkoding audio, pengguna dapat mengonversi file mereka ke format lossy seperti MP3, yang menawarkan rasio kompresi lebih tinggi dan menghemat ruang penyimpanan berharga pada perangkat seluler.
Streaming media online: Platform online harus mengonversi file audio asli menjadi versi dengan berbagai bitrate untuk memberikan pengalaman mendengarkan yang lancar, bahkan dalam kondisi jaringan yang menantang.
Produksi video dan post-processing: Selama pengeditan video, file audio asli mungkin perlu dikonversi ke format terkompresi demi efisiensi transfer optimal.
Catatan Penggunaan
Transkoding audio hanya mendukung pemrosesan asinkron (x-oss-async-process).
Pastikan bahwa Bucket Object Storage Service (OSS) yang berisi file audio yang akan ditranskode terikat ke Proyek Intelligent Media Management (IMM). Untuk informasi tentang cara mengikat OSS bucket ke proyek IMM, lihat Memulai Cepat dan 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 sampling default atau jumlah saluran suara, transkoding audio mungkin gagal karena ketidaksesuaian dengan format kontainer audio yang ditentukan.
Transkoding audio tidak memungkinkan penyesuaian kedalaman bit audio. Transkoding video memungkinkan penyesuaian kedalaman bit melalui parameter
pixfmtberdasarkanx-oss-process. Untuk detailnya, lihat Transkoding Video.
Parameter
Tindakan: audio/convert
Tabel berikut menjelaskan parameter untuk transkoding audio.
Parameter | Tipe | Diperlukan | Deskripsi |
ss | int | Tidak | Waktu dalam audio dari mana transkoding dimulai. Unit: milidetik. Nilai valid:
|
t | int | Tidak | Durasi konten audio yang akan ditranskode setelah waktu mulai yang ditentukan. Unit: milidetik. Nilai valid:
|
f | string | Ya | Format kontainer audio keluaran.
|
ar | int | Tidak | Laju sampling audio keluaran. Secara default, audio keluaran memiliki laju sampling yang sama dengan audio sumber. Nilai valid:
Catatan Laju sampling 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, dan 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. Nilai valid: 1 hingga 8. Catatan Jumlah saluran suara bervariasi dengan format audio: satu atau dua untuk MP3, hingga enam untuk AC3 5.1, dan satu untuk AMR. |
aq | int | Tidak | Kualitas kompresi audio. Parameter ini dan parameter ab saling eksklusif. Nilai valid: 0 hingga 100. |
ab | int | Tidak | Bitrate audio. Unit: bit/detik. Parameter ini dan parameter aq saling eksklusif. Nilai valid: 1000 hingga 10000000. |
abopt | string | Tidak | Opsi bitrate audio. Nilai valid:
|
adepth | int | Tidak | Kedalaman bit sampling dari 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 mentranskode objek audio. Untuk informasi lebih lanjut, lihat sys/saveas dan Gunakan fitur notifikasi.
Gunakan RESTful API
Konversi MP3 menjadi AAC
Informasi Transkoding
Format audio: Konversi file MP3 menjadi file AAC
Nama file: example.mp3
Durasi audio yang akan ditranskode: 60.000 milidetik mulai dari milidetik ke-1.000 audio
Konfigurasi audio: laju sampling dan jumlah saluran suara yang sama dengan audio sumber, dengan bitrate disetel ke 96 Kbit/detik
Notifikasi penyelesaian transkoding: Gunakan Simple Message Queue (SMQ)
Contoh Permintaan
// Transkode file audio example.mp3.
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 menjadi Opus
Informasi Transkoding
Format audio: Konversi file WAV menjadi file Opus
Durasi audio yang akan ditranskode: seluruh video
Konfigurasi audio: laju sampling 48 kHz, dual channel, dengan bitrate disetel ke 96 Kbit/detik
Jalur penyimpanan file: oss://outbucket/outobject.opus
Notifikasi penyelesaian transkoding: Gunakan MNS
Contoh Permintaan
// Transkode file audio example.wav.
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
Anda dapat menggunakan OSS SDK untuk Java, Python, atau Go untuk mentranskode file audio secara asinkron.
Java
OSS SDK for 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.util.Base64;
public class Demo {
public static void main(String[] args) throws 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 sampel, 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 targetKey = "dest.aac";
// Tentukan nama audio sumber.
String sourceKey = "src.mp3";
// Buat instance OSSClient.
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 transkoding audio.
String style = String.format("audio/convert,ss_10000,t_60000,f_aac,ab_96000");
// Buat instruksi pemrosesan asinkron.
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);
// Buat objek AsyncProcessObjectRequest.
AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, 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
OSS SDK for 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 dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan telah dikonfigurasi.
auth = oss2.Auth(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 nama bucket. Contoh: examplebucket.
bucket = oss2.Bucket(auth, endpoint, 'examplebucket')
# Tentukan nama audio sumber.
source_key = 'src.mp3'
# Tentukan nama audio keluaran.
target_key = 'dest.aac'
# Buat variabel gaya bertipe string untuk menyimpan parameter transkoding audio.
animation_style = 'audio/convert,ss_10000,t_60000,f_aac,ab_96000'
# Buat instruksi pemrosesan, di mana nama bucket dan nama objek keluaran dienkripsi Base64.
bucket_name_encoded = base64.urlsafe_b64encode('examplebucket'.encode()).decode().rstrip('=')
target_key_encoded = base64.urlsafe_b64encode(target_key.encode()).decode().rstrip('=')
process = f"{animation_style}|sys/saveas,b_{bucket_name_encoded},o_{target_key_encoded}/notify,topic_QXVkaW9Db252ZXJ0"
try:
# Jalankan tugas pemrosesan asinkron.
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
OSS SDK for 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 sampel, 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 endpoint aktual Anda.
// 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 nama audio sumber.
sourceKey := "src.mp3"
// Tentukan nama audio keluaran.
targetKey := "dest.aac"
// Buat variabel gaya bertipe string untuk menyimpan parameter transkoding audio.
animationStyle := "audio/convert,ss_10000,t_60000,f_aac,ab_96000"
// Buat instruksi pemrosesan, di mana nama bucket dan nama objek keluaran dienkripsi Base64.
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", animationStyle, bucketNameEncoded, targetKeyEncoded)
// Jalankan tugas pemrosesan asinkron.
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)
}