Gunakan transkoding video untuk mengubah kodek video, mengurangi resolusi dan bitrate, mengonversi format kontainer, serta menyesuaikan parameter video agar sesuai dengan berbagai kebutuhan.
Deskripsi fitur
Transkoding video mengonversi aliran video yang telah dikompresi dan dikodekan menjadi aliran video lainnya. Proses ini mengubah parameter seperti format video, format kontainer, resolusi, laju frame, dan bitrate agar video dapat diputar di berbagai perangkat dan platform, sekaligus mengurangi ukuran file untuk mengoptimalkan efisiensi transmisi.

Kasus penggunaan
Kompatibilitas multi-perangkat: Untuk memastikan pemutaran lancar di berbagai perangkat seperti ponsel, tablet, komputer, dan TV pintar, Anda dapat menggunakan transkoding video untuk mengonversi video ke dalam format yang sesuai dengan masing-masing perangkat.
Pemutaran media streaming: Layanan media streaming perlu mentranskode video ke dalam beberapa format dan bitrate sehingga dapat menyesuaikan kualitas pemutaran secara dinamis berdasarkan kondisi jaringan pengguna guna meningkatkan pengalaman menonton.
Kompresi video: Anda dapat mentranskode video untuk mengurangi ukuran file tanpa mengorbankan kualitas secara signifikan, sehingga mempermudah penyimpanan dan transmisi—terutama ketika lebar pita jaringan terbatas.
Mulai
Prasyarat
Anda telah membuat bucket dan mengunggah file yang akan diproses ke bucket tersebut.
Anda telah membuat dan mengikat proyek IMM. Anda dapat mengikat proyek melalui Konsol OSS atau dengan memanggil API. Proyek IMM harus berada di wilayah yang sama dengan bucket.
Anda memiliki izin yang diperlukan untuk operasi tersebut. Akun Alibaba Cloud secara default memiliki semua izin. Pengguna RAM dan role memerlukan otorisasi melalui kebijakan RAM atau kebijakan bucket.
Izin
Gunakan SDK
Transkoding video menggunakan fitur pemrosesan asinkron dari SDK OSS untuk Java, Python, dan Go.
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.util.Base64;
public class Demo {
public static void main(String[] args) throws ClientException {
// Tetapkan endpoint. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan ID wilayah, misalnya cn-hangzhou.
String region = "cn-hangzhou";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket, misalnya examplebucket.
String bucketName = "examplebucket";
// Tentukan nama file video output.
String targetKey = "dest.avi";
// Tentukan nama file video sumber.
String sourceKey = "src.mp4";
// 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 {
// Bangun string gaya pemrosesan video yang mencakup parameter transkoding video.
String style = String.format("video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1");
// Bangun 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", style, bucketEncoded, targetEncoded);
// Buat objek AsyncProcessObjectRequest.
AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, process);
// Mulai 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 untuk melepaskan sumber daya.
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():
# Tetapkan endpoint. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan nama bucket.
bucket_name = 'examplebucket'
# Tentukan ID wilayah, misalnya cn-hangzhou.
region = 'cn-hangzhou'
# Buat objek Bucket.
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
# Tentukan nama file video sumber.
source_key = 'src.mp4'
# Tentukan nama file video output.
target_key = 'dest.avi'
# Bangun string gaya pemrosesan video yang mencakup parameter transkoding video.
style = 'video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1'
# Bangun instruksi pemrosesan asinkron.
process = "{0}|sys/saveas,b_{1},o_{2}".format(style,
oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(bucket_name))).replace('=', ''),
oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(target_key))).replace('=', ''))
# Panggil API pemrosesan media asinkron.
try:
# Mulai 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
Diperlukan OSS SDK for Go versi 3.0.2 atau lebih baru.
package main
import (
"encoding/base64"
"fmt"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Buat instance OSSClient.
// Tetapkan endpoint. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan endpoint yang sebenarnya.
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)
// Tentukan nama file video output.
targetObject := "dest.avi"
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Tentukan nama file video sumber.
sourceObject := "src.mp4"
// Bangun string gaya pemrosesan video yang mencakup parameter transkoding video.
style := "video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1"
// Bangun instruksi pemrosesan asinkron.
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v", style, strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetObject)), "="))
fmt.Printf("%#v\n", process)
// Mulai tugas pemrosesan asinkron.
rs, err := bucket.AsyncProcessObject(sourceObject, process)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("EventId:%s\n", rs.EventId)
fmt.Printf("RequestId:%s\n", rs.RequestId)
fmt.Printf("TaskId:%s\n", rs.TaskId)
}
Parameter
Operasi: video/convert
Tabel ini menjelaskan parameter untuk operasi ini.
Parameter | Tipe | Wajib | Deskripsi |
ss | int | Tidak | Waktu mulai untuk transkoding, dalam milidetik. Nilai yang valid:
|
t | int | Tidak | Durasi transkoding, dalam milidetik. Nilai yang valid:
|
f | string | Ya | Jenis kontainer media. Nilai yang valid:
|
vn | int | Tidak | Menentukan apakah aliran video dinonaktifkan. Nilai yang valid:
|
vcodec | string | Tidak | Kodek video. Nilai yang valid:
|
fps | float | Tidak | Laju frame video. Nilainya harus berada dalam rentang 0 hingga 240. |
fpsopt | int | Tidak | Menentukan cara menerapkan laju frame video. Nilai yang valid:
|
pixfmt | string | Tidak | Format piksel. Default mengikuti format piksel video sumber. Nilai yang valid:
|
s | string | Tidak | Resolusi target.
|
sopt | int | Tidak | Menentukan cara menerapkan resolusi target. Nilai yang valid:
|
scaletype | string | Tidak | Mode pengubahan ukuran. Nilai yang valid:
|
arotate | int | Tidak | Mengaktifkan atau menonaktifkan orientasi resolusi adaptif. Nilai yang valid:
|
g | int | Tidak | Interval keyframe. Nilainya harus berada dalam rentang 1 hingga 100.000. |
vb | int | Tidak | Bitrate video target, dalam bit per detik (bps). Nilainya harus berada dalam rentang 10.000 hingga 100.000.000. |
vbopt | int | Tidak | Menentukan cara menerapkan bitrate video target. Nilai yang valid:
|
crf | float | Tidak | Faktor laju konstan (CRF). Nilainya harus berada dalam rentang 0 hingga 51. |
maxrate | int | Tidak | Bitrate maksimum, dalam bit per detik (bps). Nilainya harus berada dalam rentang 10.000 hingga 100.000.000. |
bufsize | int | Tidak | Ukuran buffer, dalam bit. Nilainya harus berada dalam rentang 10.000 hingga 200.000.000. |
an | int | Tidak | Menentukan apakah aliran audio dinonaktifkan. Nilai yang valid:
|
acodec | string | Tidak | Kodek audio. Nilai yang valid:
|
ar | int | Tidak | Laju pengambilan sampel audio. Nilai yang valid:
|
ac | int | Tidak | Jumlah saluran audio. Default mengikuti jumlah saluran pada audio sumber. Nilainya harus berada dalam rentang 1 hingga 8. |
aq | int | Tidak | Kualitas kompresi audio. Saling eksklusif dengan parameter ab. Rentang nilai: 0 hingga 100. |
ab | int | Tidak | Bitrate audio. Parameter ini saling eksklusif dengan parameter aq, dan satuannya adalah bit per detik (bps). Rentang nilai: 1000 hingga 10000000. |
abopt | int | Tidak | Menentukan cara menerapkan bitrate audio target. Nilai yang valid:
|
sn | int | Tidak | Menentukan apakah subtitle dinonaktifkan. Nilai yang valid:
|
adepth | int | Tidak | Kedalaman bit pengambilan sampel audio. Nilai yang valid adalah Catatan Parameter ini hanya berlaku saat |
segment | string | Tidak | Pengaturan untuk segmentasi media. Secara default, video tidak disegmentasi. |
f | string | Tidak | Format segmentasi media. Nilai yang valid:
Node induk: |
t | int | Tidak | Durasi segmen, dalam milidetik. Nilainya harus berada dalam rentang 0 hingga 3.600.000. Node induk: |
Transkoding video juga mendukung parameter sys/saveas (Save As) dan notify (notifikasi pesan).
Referensi API
Untuk kustomisasi lanjutan, kirim permintaan REST API secara langsung. Anda harus menghitung signature untuk header Authorization. Signature V4 (Direkomendasikan).
Konversi AVI ke MP4
Konfigurasi tugas
Objek sumber
Format video: AVI
Nama video: example.avi
Metode pemrosesan: transkoding video
Objek tujuan
Informasi video
Format video: MP4
Nama video: outobjprefix.mp4
Format aliran video: H.265
Resolusi video: 1920x1080
Laju frame video: 30 fps
Bitrate video: 2 Mbps
Informasi audio
Format aliran audio: AAC
Bitrate audio: 100 Kbps
Aliran subtitle: dinonaktifkan
Jalur output: oss://outbucket/outobjprefix.mp4
Contoh permintaan
POST /example.avi?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: SignatureValue
// Transkode objek example.avi. Output berupa file MP4 dengan aliran video H.265 (1920x1080, 30 fps, 2 Mbps) dan aliran audio AAC (100 Kbps). Subtitle dinonaktifkan. Output disimpan ke oss://outbucket/outobjprefix.mp4.
x-oss-async-process=video/convert,f_mp4,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQKonversi AVI ke TS
Konfigurasi tugas
Objek sumber
Format video: AVI
Nama video: example.avi
Metode pemrosesan
Durasi transkoding: Melakukan transkoding segmen 60.000 milidetik dari file input, dimulai dari milidetik ke-10.000.
Metode segmentasi: Membuat segmen HLS berdurasi 30 detik.
Notifikasi penyelesaian transkoding: Mengirim pesan MNS.
Objek tujuan
Informasi video
Format video: TS
Format aliran video: H.264
Bitrate video: 1 Mbps
Informasi audio
Format aliran audio: MP3
Bitrate audio: 100 Kbps
Jalur output
Objek TS: oss://outbucket/outobjprefix-%d.ts
Objek M3U8: oss://outbucket/outobjprefix.m3u8
Contoh permintaan
POST /example.avi?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: SignatureValue
// Transkode objek example.avi.
x-oss-async-process=video/convert,ss_10000,t_60000,f_ts,vcodec_h264,vb_1000000,acodec_mp3,ab_100000/segment,f_hls,t_30000|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ/notify,topic_QXVkaW9Db252ZXJ0Konversi AVI ke MP3
Konfigurasi tugas
Objek sumber
Nama video: example.avi
Format video: AVI
Metode pemrosesan: Ekstraksi dan transkoding aliran audio.
Objek tujuan
Kontainer audio: MP3
Format pengkodean audio: MP3
Bitrate audio: 100 Kbps
Aliran video: dinonaktifkan
Aliran subtitle: dinonaktifkan
Jalur output: oss://outbucket/outobjprefix.mp3. Jika video sumber memiliki beberapa aliran audio, hanya aliran pertama yang diproses secara default.
Contoh permintaan
POST /example.avi?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: SignatureValue
// Ekstraksi dan transkode aliran audio dari objek example.avi.
x-oss-async-process=video/convert,f_mp3,acodec_mp3,ab_100000,vn_1,sn_1|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQPenagihan
Transkoding video menghasilkan item yang dapat ditagih untuk OSS dan IMM:
OSS: Harga Produk OSS.
API
Item yang dapat ditagih
Deskripsi
GetObject
Permintaan GET
Biaya permintaan didasarkan pada jumlah permintaan yang berhasil.
lalu lintas outbound internet
Saat Anda memanggil operasi GetObject menggunakan titik akhir publik (misalnya, oss-cn-hangzhou.aliyuncs.com) atau titik akhir akselerasi transfer (misalnya, oss-accelerate.aliyuncs.com), Anda dikenai biaya lalu lintas outbound internet berdasarkan jumlah data yang ditransfer.
Pengambilan data Akses Jarang
Jika data yang diambil berada dalam kelas penyimpanan Akses Jarang, Anda dikenai biaya pengambilan data Akses Jarang berdasarkan jumlah data yang diambil.
Pengambilan data Archive-Direct Read
Jika Anda membaca objek Archive dari bucket yang telah diaktifkan fitur Archive-Direct Read, Anda dikenai biaya pengambilan data Archive-Direct Read berdasarkan jumlah data yang diambil.
Akselerasi Transfer
Jika Akselerasi Transfer diaktifkan dan Anda mengakses bucket menggunakan titik akhir akselerasi transfer, Anda dikenai biaya Akselerasi Transfer berdasarkan jumlah data yang ditransfer.
PutObject
Permintaan PUT
Biaya permintaan didasarkan pada jumlah permintaan yang berhasil.
biaya penyimpanan
Biaya penyimpanan didasarkan pada kelas penyimpanan, ukuran, dan durasi penyimpanan objek.
HeadObject
Permintaan HEAD
Biaya permintaan didasarkan pada jumlah permintaan yang berhasil.
IMM: Item yang dapat ditagih IMM.
API
Item yang dapat ditagih
Deskripsi
CreateMediaConvertTask
VideoCompress264LD
Biaya untuk transkoding H.264-LD. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
VideoCompress264SD
Biaya untuk transkoding H.264-SD. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
VideoCompress264HD
Biaya untuk transkoding H.264-HD. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
VideoCompress2642K
Biaya untuk transkoding H.264-2K. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
VideoCompress2644K
Biaya untuk transkoding H.264-4K. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
VideoCompress265LD
Biaya untuk transkoding H.265-LD. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
VideoCompress265SD
Biaya untuk transkoding H.265-SD. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
VideoCompress265HD
Biaya untuk transkoding H.265-HD. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
VideoCompress2652K
Biaya untuk transkoding H.265-2K. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
VideoCompress2654K
Biaya untuk transkoding H.265-4K. Biaya pemrosesan media dihitung berdasarkan durasi video dalam detik.
AudioCompress
Biaya untuk transkoding audio.
Batasan
Transkoding video dibatasi pada pemrosesan asinkron (
x-oss-async-process).Akses anonim tidak didukung.
Format video berikut didukung: MP4, MPEG-TS, MKV, MOV, AVI, FLV, M3U8, WebM, WMV, RM, dan VOB.
FAQ
Galat "ResourceNotFound" saat transkoding video
Galat ResourceNotFound, The specified resource Attachment is not found. menunjukkan bahwa tidak ada bucket yang diikat ke proyek IMM Anda. Ikat bucket ke proyek IMM untuk mengatasinya. Panduan penggunaan pemrosesan data OSS.
Menyimpan output ke jalur sumber
Tidak. Jalur input tidak boleh menjadi awalan dari jalur output. Hal ini mencegah perilaku tak terduga seperti loop pemicu atau menimpa objek sumber.
Mengatur kedalaman bit audio
Ya. Gunakan parameter pixfmt dalam permintaan OSS x-oss-process.
Mendapatkan hasil tugas dengan ID tugas
Gunakan operasi GetTask di IMM untuk mengambil hasil tugas.
Mencari dan menghapus objek berdasarkan akhiran
Tidak. OSS tidak mendukung pencarian objek berdasarkan akhiran karena menggunakan penyimpanan tak terurut.
Backend tidak menerima pesan
Verifikasi bahwa topik dan langganan sudah ada. Jika tidak ada atau telah dihapus, konfigurasi ulang langganan dan mulai ulang transkoding.
Menggunakan templat untuk transkoding otomatis
Ya. Konfigurasikan pemicu untuk secara otomatis memproses video baru dan yang sudah ada di bucket. Tugas, pemrosesan batch, dan pemicu mendukung templat bawaan sistem maupun templat kustom. Pemrosesan batch. Pemicu.
Biaya untuk video hasil transkoding
Ya. Video hasil transkoding menempati storage space, sehingga dikenai biaya.
Menyimpan output ke jalur sumber
Jangan mengatur jalur output sama dengan jalur sumber, karena hal ini akan menimpa objek sumber.