Transkoding video memungkinkan Anda mengubah format pengkodean, menyesuaikan resolusi dan bitrate, memodifikasi format kontainer, serta mengubah parameter video untuk memenuhi berbagai kebutuhan bisnis.
Ikhtisar fitur
Transkoding video adalah proses mengonversi aliran video terkompresi ke format lain dengan menyesuaikan elemen seperti format video, format kontainer, resolusi, laju frame, dan bitrate. Proses ini memastikan kompatibilitas pemutaran di berbagai perangkat dan platform sambil mengurangi ukuran file untuk meningkatkan efisiensi transmisi.

Skenario
Kompatibilitas Lintas Perangkat: Untuk memastikan pemutaran video yang lancar di berbagai perangkat seperti ponsel, tablet, komputer, dan smart TV, teknologi transkoding dapat mengonversi video ke format yang kompatibel dengan setiap perangkat tertentu.
Pemutaran Media Streaming: Layanan streaming harus mentranskode video ke dalam beberapa format dan bitrate untuk secara dinamis menyesuaikan dengan kondisi jaringan pengguna, sehingga meningkatkan pengalaman menonton secara keseluruhan.
Kompresi Video: Transkoding video dapat mengurangi ukuran file sambil tetap menjaga kualitas video, sehingga lebih mudah disimpan dan ditransmisikan, terutama di lingkungan dengan lebar pita jaringan yang terbatas.
Pengarsipan Data: Transkoding mengonversi video berkualitas tinggi ke format yang dioptimalkan untuk penyimpanan dan manajemen jangka panjang yang efisien, meminimalkan kebutuhan penyimpanan.
Adaptasi Resolusi: Transkoding mengurangi resolusi video untuk mendukung berbagai perangkat pemutaran dan kondisi jaringan, memastikan pengalaman pemutaran yang lebih lancar.
Kompatibilitas Format Video: Transkoding mengonversi format video yang kurang umum menjadi format yang banyak digunakan, memastikan kompatibilitas dengan perangkat lunak pemutaran media dan memungkinkan aksesibilitas yang lebih luas.
Penggunaan
Prasyarat
Intelligent Media Management (IMM) telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan IMM.
Bucket Object Storage Service (OSS) yang sesuai telah dihubungkan ke proyek IMM.
Untuk informasi tentang pengikatan di Konsol OSS, lihat Memulai.
Untuk informasi tentang pengikatan menggunakan API IMM, lihat AttachOSSBucket.
Izin yang diperlukan telah diberikan kepada Pengguna Resource Access Management (RAM) yang Anda gunakan untuk menggunakan fitur IMM. Untuk informasi lebih lanjut, lihat Izin.
Gunakan SDK OSS
Transkoding video bersifat asinkron. Di antara semua SDK OSS untuk bahasa yang didukung, hanya SDK Java, Python, dan Go yang mendukung fitur ini.
Java
OSS SDK for Java 3.17.4 atau versi 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 contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan nama video keluaran.
String targetKey = "dest.avi";
// Tentukan nama video sumber.
String sourceKey = "src.mp4";
// Buat instance OSSClient.
// Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown 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 {
// Buat variabel gaya bertipe string untuk menyimpan 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");
// 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", 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 versi lebih baru diperlukan.
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 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'
# Dapatkan kredensial akses dari variabel lingkungan.
# Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan nama bucket.
bucket_name = 'examplebucket'
# Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: cn-hangzhou.
region = 'cn-hangzhou'
# Buat bucket.
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
# Tentukan nama video sumber.
source_key = 'src.mp4'
# Tentukan nama video keluaran.
target_key = 'dest.avi'
# Buat variabel gaya bertipe string untuk menyimpan parameter transkoding video.
style = 'video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1'
process = "{0}|sys/saveas,o_{1}".format(style,
oss2.compat.to_string(base64.urlsafe_b64encode(
oss2.compat.to_bytes(target_key))).replace('=', ''))
# Panggil operasi pemrosesan media.
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 versi lebih baru diperlukan.
package main
import (
"encoding/base64"
"fmt"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Dapatkan kredensial akses dari variabel lingkungan.
// Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET 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.
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 tempat video sumber disimpan. Contoh: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
// Tentukan nama video keluaran.
targetObject := "dest.avi"
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Tentukan nama video sumber.
sourceObject := "src.mp4"
// Buat variabel gaya bertipe string untuk menyimpan parameter transkoding video.
style := "video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1"
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)
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
Action: video/convert
Tabel berikut menjelaskan parameter untuk transkoding video.
Parameter | Tipe | Diperlukan | Deskripsi |
ss | int | Tidak | Waktu mulai video dari mana transkoding dimulai. Satuan: milidetik. Nilai valid:
|
t | int | Tidak | Durasi konten video yang akan ditranskode setelah waktu mulai yang ditentukan. Satuan: milidetik. Nilai valid:
|
f | string | Ya | Jenis kontainer media.
|
vn | int | Tidak | Menentukan apakah pembuatan aliran video dinonaktifkan. Nilai valid:
|
vcodec | string | Tidak | Format pengkodean video keluaran. Nilai valid:
|
fps | float | Tidak | Laju frame video. Nilai valid: 0 hingga 240. |
fpsopt | int | Tidak | Opsi laju frame. Nilai valid:
|
pixfmt | string | Tidak | Format piksel target. Secara default, format piksel target sama dengan format piksel sumber. Nilai valid:
|
s | string | Tidak | Resolusi yang diinginkan.
|
sopt | int | Tidak | Opsi resolusi. Nilai valid:
|
scaletype | string | Tidak | Mode pengubahan ukuran. Nilai valid:
|
arotate | int | Tidak | Menentukan apakah orientasi resolusi adaptif diaktifkan. Nilai valid:
|
g | int | Tidak | Interval keyframe. Nilai valid: 1 hingga 100000. |
vb | int | Tidak | Bitrate video target. Satuan: bit/detik. Nilai valid: 10000 hingga 100000000. |
vbopt | int | Tidak | Opsi bitrate video. Nilai valid:
|
crf | float | Tidak | Faktor laju konstan (CRF). Nilai valid: 0 hingga 51. |
maxrate | int | Tidak | Bitrate maksimum. Satuan: bit/detik. Nilai valid: 10000 hingga 100000000. |
bufsize | int | Tidak | Ukuran buffer. Satuan: bit. Nilai valid: 10000 hingga 200000000. |
an | int | Tidak | Menentukan apakah pembuatan aliran audio dinonaktifkan. Nilai valid:
|
acodec | string | Tidak | Format pengkodean audio. Nilai valid:
|
ar | int | Tidak | Laju pengambilan sampel audio. Nilai valid:
|
ac | int | Tidak | Jumlah saluran suara dalam audio keluaran. Secara default, audio keluaran mempertahankan jumlah saluran yang sama dengan audio sumber. Nilai valid: 1 hingga 8. |
aq | int | Tidak | Kualitas kompresi audio. Parameter ini dan parameter ab saling eksklusif. Nilai valid: 0 hingga 100. |
ab | int | Tidak | Bitrate audio. Parameter ini dan parameter aq saling eksklusif. Satuan: bit/detik. Nilai valid: 1000 hingga 10000000. |
abopt | int | Tidak | Opsi bitrate audio. Nilai valid:
|
sn | int | Tidak | Menentukan apakah pembuatan subtitle dinonaktifkan. Nilai valid:
|
adepth | int | Tidak | Kedalaman bit pengambilan sampel audio keluaran. Nilai valid: 16 dan 24. Catatan Parameter ini hanya berlaku jika Anda mengatur parameter acodec ke flac. |
segment | string | Tidak | Pengaturan segmentasi media. Secara default, tidak ada segmentasi yang dilakukan. |
f | string | Tidak | Mode segmentasi media. Nilai valid:
Node induk: segment |
t | int | Tidak | Panjang segmen. Satuan: milidetik. Nilai valid: 0 hingga 3600000. Node induk: segment |
Anda mungkin juga perlu menggunakan parameter sys/saveas dan notify dalam tugas transkoding video. Untuk informasi lebih lanjut, lihat sys/saveas dan Pemberitahuan Pesan.
Gunakan API OSS
Jika bisnis Anda memerlukan tingkat penyesuaian yang tinggi, Anda dapat langsung memanggil API RESTful. Untuk memanggil API RESTful secara langsung, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi tentang cara menghitung tanda tangan untuk Header Authorization, lihat (Direkomendasikan) Sertakan Tanda Tangan V4.
Konversi dari AVI ke MP4
Informasi tugas transkoding
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: 1920×1080
Laju Frame Video: 30 fps
Bitrate Video: 2 Mbit/detik
Informasi Audio
Format Aliran Audio: AAC
Bitrate Audio: 100 Kbit/detik
Aliran Subtitle: Dinonaktifkan
Path Keluaran: 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 ke format kontainer MP4 dan tentukan H.265 sebagai format aliran video.
// Atur resolusi menjadi 1920 x 1080, laju frame menjadi 30 fps, dan bitrate video menjadi 2 Mbit/detik. Tentukan AAC sebagai format aliran audio dan atur bitrate audio menjadi 100 Kbit/detik. Nonaktifkan pembuatan aliran subtitle. Simpan objek keluaran sebagai 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 dari AVI ke TS
Informasi tugas transkoding
Objek Sumber
Format Video: AVI
Nama Video: example.avi
Rincian Tugas Pemrosesan
Durasi Transkoding: Transkode 60.000 milidetik video, dimulai dari milidetik ke-1.000 video.
Metode Segmentasi: Buat segmen HTTP Live Streaming (HLS) pada interval 30 detik.
Pemberitahuan Penyelesaian Transkoding: Kirim pesan Simple Message Queue (SMQ).
Objek Tujuan
Informasi Video
Format Video: TS
Format Aliran Video: H.264
Bitrate Video: 1 Mbit/detik
Informasi Audio
Format Audio: AAC
Bitrate Audio: 100 Kbit/detik
Path Keluaran
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 video 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 dari AVI ke MP3
Informasi tugas transkoding
Objek Sumber
Nama Video: example.avi
Format Video: AVI
Metode Pemrosesan: Ekstrak dan transkode audio.
Objek Tujuan
Format Kontainer Audio: MP3
Format Pengkodean Audio: MP3
Bitrate Audio: 100 Kbit/detik
Aliran Video: Dinonaktifkan
Aliran Subtitle: Dinonaktifkan
Path Keluaran: oss://outbucket/outobjprefix.mp3 (Jika video berisi beberapa saluran audio, hanya saluran 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
// Ekstrak audio dari objek example.avi dan transkode audio yang diekstraksi.
x-oss-async-process=video/convert,f_mp3,acodec_mp3,ab_100000,vn_1,sn_1|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQCatatan
Transkoding video hanya mendukung pemrosesan asinkron (x-oss-async-process).
Transkoding video tidak mendukung akses anonim.
Transkoding video mendukung format video berikut: MP4, MPEG-TS, MKV, MOV, AVI, FLV, M3U8, WebM, WMV, RM, dan VOB.
Menggunakan video/convert untuk transkoding video akan dikenakan biaya. Biaya pemrosesan media termasuk dalam tagihan IMM Anda. Untuk informasi lebih lanjut, lihat Item yang Dikenakan Biaya.
FAQ
Bagaimana cara memperbaiki kesalahan ResourceNotFound untuk tugas transkoding video?
Untuk memperbaiki kesalahan "ResourceNotFound, The specified resource Attachment is not found." selama transkoding video, pastikan bucket telah dibuat dan dihubungkan ke proyek IMM Anda. Untuk informasi lebih lanjut, lihat Langkah 2: Hubungkan Bucket OSS.
Bisakah saya menyimpan objek keluaran tugas transkoding video ke path objek sumber?
Tidak, Anda tidak dapat menyimpan objek keluaran tugas transkoding video ke path yang sama dengan objek sumber. Untuk mencegah masalah seperti loop eksekusi pemicu atau penimpaan objek sumber secara tidak sengaja, jangan gunakan path input sebagai awalan path output.
Bisakah saya menentukan kedalaman bit audio dalam tugas transkoding video?
Ya, Anda dapat menentukan kedalaman bit audio dalam tugas transkoding video dengan menyertakan parameter pixfmt dalam x-oss-process.
Bagaimana cara mengambil hasil eksekusi tugas untuk transkoding video menggunakan ID tugas yang dikembalikan?
Untuk mengambil hasil eksekusi tugas untuk transkoding video menggunakan ID tugas yang dikembalikan, kami sarankan Anda memanggil operasi GetTask di IMM.
Bagaimana OSS menangani pengambilan dan penghapusan objek dengan format tertentu berdasarkan akhirannya selama transkoding video?
OSS tidak mendukung pencarian objek berdasarkan akhiran, karena layanan penyimpanan yang ditawarkan tidak terurut.
Apa yang harus saya lakukan jika konfigurasi pendorongan pesan untuk transkoding video telah disiapkan tetapi backend tidak menerima pesan?
Periksa apakah topik SMQ telah dibuat dan langganan telah dikonfigurasi. Jika topik SMQ tidak ada atau telah dihapus, konfigurasikan ulang langganan. Mulai ulang proses transkoding berdasarkan konfigurasi langganan saat ini.
Bisakah saya menggunakan templat tertentu untuk mentranskode video setelah mengunggah video ke OSS?
Ya, Anda dapat mengonfigurasi pemicu untuk mengimplementasikan fitur ini. Tugas pemrosesan video dapat diinisiasi secara manual, atau secara otomatis menggunakan pemroses batch (untuk data yang sudah ada) dan pemicu (untuk data inkremental). Saat membuat tugas, pemroses batch, atau pemicu, Anda dapat menggunakan gaya sistem atau gaya kustom. Untuk informasi lebih lanjut, lihat Pemrosesan Batch dan Pemicu.
Apakah saya dikenakan biaya untuk penyimpanan video keluaran dalam tugas transkoding video? Jika video keluaran memiliki awalan yang berbeda dari video sumber, apakah video keluaran akan menggantikan video sumber?
Video keluaran mengonsumsi ruang penyimpanan, sehingga menghasilkan biaya terkait. Menggunakan path yang sama untuk video yang ditranskode dan video sumber dapat menyebabkan masalah looping.