All Products
Search
Document Center

Object Storage Service:Tangkapan video multi-frame

Last Updated:Mar 21, 2026

Ekstrak frame dari video yang disimpan di OSS dan simpan sebagai gambar. Fitur ini dapat digunakan untuk menghasilkan gambar mini, menyiapkan set data pelatihan AI, mendeteksi perubahan adegan, atau membuat strip pratinjau video.

Kasus penggunaan

  • Pembuatan gambar mini dan sampul: Ekstrak frame representatif untuk digunakan sebagai sampul atau gambar mini video.

  • Data pelatihan AI: Ambil sampel frame pada interval reguler untuk pipeline pelatihan model atau inferensi.

  • Deteksi perubahan adegan: Gunakan mode dhash untuk menangkap frame tempat konten visual berubah secara signifikan.

  • Pratinjau video: Ekstrak frame yang tersebar merata untuk memberikan ikhtisar cepat mengenai konten video kepada pengguna.

  • Ekstraksi sampul audio: Ambil karya seni album tersemat dari file audio seperti FLAC.

  • Berbagi dan perekaman tangkapan layar: Saat pengguna menonton video dan ingin menyimpan atau membagikan frame yang disukai, mereka dapat menangkap frame video pada saat itu.

Cara kerja

Unggah video sumber ke bucket OSS. Kirim tugas penangkapan frame asinkron menggunakan parameter x-oss-async-process dengan aksi video/snapshots. Setelah tugas selesai, frame yang ditangkap disimpan ke path output yang Anda tentukan.

Semua contoh dalam topik ini menggunakan header x-oss-async-process. Pemrosesan sinkron tidak didukung.
image

Prasyarat

Sebelum memulai, pastikan Anda telah:

Tangkap frame menggunakan SDK

Penangkapan frame hanya tersedia secara asinkron. Gunakan SDK Java, Python, atau Go untuk mengirimkan tugas.

Penting

Jika Anda menghilangkan ekstensi file (seperti .jpg) dari path output, sistem akan secara otomatis menambahkan sufiks nomor seri (misalnya, _0_1.jpg). Jika Anda menyertakan ekstensi, hanya frame terakhir yang ditangkap yang disimpan. Hilangkan ekstensi untuk menyimpan semua frame. Untuk menyesuaikan format nomor seri, gunakan variabel ApsaraVideo Media Processing.

Java

Memerlukan Java SDK 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 {
        // Endpoint wilayah tempat bucket berada
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // ID wilayah Alibaba Cloud tujuan umum
        String region = "cn-hangzhou";
        // Baca kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        String bucketName = "examplebucket";
        // Nama objek output (tanpa ekstensi — sistem menambahkan nomor seri secara otomatis)
        String targetKey = "dest.png";
        // Nama objek video sumber
        String sourceKey = "src.mp4";

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

        try {
            // Parameter penangkapan frame: output JPG, 100x100 px, penskalaan crop, interval 10 detik
            String style = "video/snapshots,f_jpg,w_100,h_100,scaletype_crop,inter_10000";
            // Encode nama bucket dan nama objek output dalam Base64
            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);
            // Kirim tugas penangkapan frame asinkron
            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 Python SDK 2.18.4 atau lebih baru.

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

def main():
    # Baca kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    region = 'cn-hangzhou'
    bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)

    source_key = 'src.mp4'
    # Nama objek output (tanpa ekstensi — sistem menambahkan nomor seri secara otomatis)
    target_key = 'dest.png'

    # Parameter penangkapan frame: output JPG, 100x100 px, penskalaan crop, interval 10 detik
    style = 'video/snapshots,f_jpg,w_100,h_100,scaletype_crop,inter_10000'

    # Encode nama bucket dan nama objek output dalam Base64
    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:
        # Kirim tugas penangkapan frame 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

Memerlukan Go SDK 3.0.2 atau lebih baru.

package main

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

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

func main() {
    // Baca kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    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.mp4"
    // Nama objek output (tanpa ekstensi — sistem menambahkan nomor seri secara otomatis)
    targetKey := "dest.png"

    // Parameter penangkapan frame: output JPG, 100x100 px, penskalaan crop, interval 10 detik
    style := "video/snapshots,f_jpg,w_100,h_100,scaletype_crop,inter_10000"

    // Encode nama bucket dan nama objek output dalam 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",
        style, bucketNameEncoded, targetKeyEncoded)

    // Kirim tugas penangkapan frame asinkron
    result, err := bucket.AsyncProcessObject(sourceKey, process)
    if err != nil {
        log.Fatalf("Gagal mengirim tugas penangkapan frame: %s", err)
    }

    fmt.Printf("EventId: %s\n", result.EventId)
    fmt.Printf("RequestId: %s\n", result.RequestId)
    fmt.Printf("TaskId: %s\n", result.TaskId)
}

Parameter

Aksi: video/snapshots

ParameterTipeWajibBawaanDeskripsi
fstringYaFormat gambar output. Nilai yang valid: jpg, png
ssintTidak0 (awal video)Waktu mulai dalam milidetik. Atur ke nilai lebih besar dari 0 untuk memulai pada offset tertentu.
mstringTidakinterMode snapshot. Lihat Mode snapshot.
numintTidak0 (tidak terbatas)Jumlah frame yang akan ditangkap. Jumlah aktual mungkin kurang dari yang ditentukan karena durasi video atau parameter lainnya. Dalam mode avg, parameter ini wajib dan tidak boleh 0.
interintTidak0 (setiap frame)Interval penangkapan dalam milidetik. Jika nilainya kurang dari interval keyframe video sumber, frame ditangkap sesuai interval keyframe. Tidak digunakan dalam mode key atau avg.
thrintTidak0Ambang batas perubahan konten untuk mode dhash (0–100). Nilai yang lebih tinggi menangkap lebih sedikit frame. Pertahankan nilai ini pada 25 atau di bawahnya dan sesuaikan untuk konten Anda. Hanya berlaku dalam mode dhash.
wintTidakLebar sumberLebar gambar output dalam piksel (32–4096).
hintTidakTinggi sumberTinggi gambar output dalam piksel (32–4096).
pwintTidak100Lebar output sebagai persentase dari lebar video sumber (0–200). Diabaikan jika w diatur.
phintTidak100Tinggi output sebagai persentase dari tinggi video sumber (0–200). Diabaikan jika h diatur.
scaletypestringTidakstretchMetode penskalaan. Lihat Metode penskalaan.
Parameter sys/saveas dan notify juga digunakan untuk tangkapan video. Untuk detailnya, lihat Simpan sebagai dan Notifikasi.

Mode snapshot

ModeDeskripsi
inter (bawaan)Interval tetap: Menangkap frame pada interval yang ditetapkan oleh inter. Jumlah frame dikendalikan oleh num.
keyKeyframe: Hanya menangkap frame IDR dari video sumber. Jumlah frame dikendalikan oleh num. Parameter inter tidak berpengaruh dalam mode ini.
avgRata-rata: Mendistribusikan num frame secara merata sepanjang durasi video. Parameter inter tidak berpengaruh dalam mode ini. num harus lebih besar dari 0.
dhashContent-aware: Menangkap frame pada interval waktu yang ditentukan oleh inter, lalu menyaring frame yang mengalami perubahan konten visual melebihi ambang batas yang ditetapkan oleh thr. Jumlah frame yang dikembalikan dikendalikan oleh num.

Metode penskalaan

NilaiPerilakuKapan digunakan
stretch (bawaan)Merenggangkan gambar agar mengisi dimensi yang tepat. Rasio aspek tidak dipertahankan.Gambar mini berukuran tetap di mana distorsi dapat diterima
cropMenskala gambar agar mengisi dimensi, lalu memotong bagian yang melimpah. Rasio aspek dipertahankan.Pratinjau media sosial yang memerlukan dimensi tepat
fillMenskala gambar agar muat dalam dimensi dan menambahkan bilah hitam untuk mengisi ruang yang tersisa. Rasio aspek dipertahankan.Output letterboxed atau pillarboxed
fitMenskala gambar secara proporsional agar muat dalam dimensi. Tidak ada bilah hitam yang ditambahkan; output mungkin lebih kecil dari dimensi target.Gambar mini di mana seluruh gambar harus terlihat
Saat w/h dan pw/ph diatur bersamaan, pw dan ph diabaikan.

Pemberian nama file output

Nama objek output diturunkan dari path yang Anda tentukan dalam sys/saveas:

  • Tanpa ekstensi file: Sistem menambahkan nomor seri dan ekstensi secara otomatis. Misalnya, jika path output Anda adalah frames/output, frame yang ditangkap disimpan sebagai frames/output_0_1.jpg, frames/output_0_2.jpg, dan seterusnya. Ini menyimpan semua frame yang ditangkap.

  • Dengan ekstensi file (misalnya, frames/output.jpg): Hanya frame terakhir yang ditangkap yang disimpan, menimpa yang sebelumnya.

Untuk menyesuaikan format nomor seri, gunakan variabel ApsaraVideo Media Processing.

Contoh API

Untuk memanggil REST API secara langsung, hitung signature permintaan seperti yang dijelaskan dalam Signature Version 4 (disarankan).

Sebelum memanggil API, sambungkan proyek IMM ke bucket. Untuk detailnya, lihat AttachOSSBucket.

Tangkap satu frame setiap 10 detik untuk pelatihan model AI

Tangkap frame pada interval 10 detik dari example.mkv. Output: gambar JPG 512x512 px, penskalaan crop.

Konfigurasi

PengaturanNilai
Sumberexample.mkv
Format outputJPG
Interval10 dtk
Resolusi512x512 px (crop)
Path outputoss://outbucket/outobjprefix-%d.jpg
NotifikasiTopik MNS example-mns-topic
POST /example.mkv?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=video/snapshots,f_jpg,w_512,h_512,scaletype_crop,inter_10000|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LXtpbmRleH0ue2F1dG9leHR9Cg/notify,topic_ZXhhbXBsZS1tbnMtdG9waWMK

Tangkap 5 frame pada interval 4 detik mulai dari 11 detik

Mulai dari 11 dtk, tangkap 5 frame PNG pada interval 4 detik. Dimensi output adalah 50% dari resolusi video sumber.

Konfigurasi

PengaturanNilai
Sumberexample.mkv
Format outputPNG
Waktu mulai11 dtk
Interval4 dtk
Jumlah frame5
Resolusi50% dari lebar dan tinggi sumber
Path outputoss://outbucket/outobjprefix-%d.png
NotifikasiTopik MNS example-mns-topic
POST /example.mkv?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=video/snapshots,ss_11000,f_png,pw_50,ph_50,num_5|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LXtpbmRleH0ue2F1dG9leHR9Cg/notify,topic_ZXhhbXBsZS1tbnMtdG9waWMK

Tangkap keyframe event menggunakan dhash

Gunakan dhash untuk mendeteksi perubahan adegan dan mengekstrak frame tempat konten visual berubah secara signifikan.

Penting

Sesuaikan parameter thr untuk konten spesifik Anda. Algoritma dhash sensitif terhadap nilai ambang batas.

Konfigurasi

PengaturanNilai
Sumberexample.mkv
Mode snapshotdhash
Format outputJPG
Ambang batas15
Interval1 dtk
ResolusiSama dengan sumber
Path outputoss://outbucket/outobjprefix-%d.jpg
NotifikasiTopik MNS example-mns-topic
POST /example.mkv?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=video/snapshots,m_dhash,f_jpg,inter_1000,thr_15|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LXtpbmRleH0ue2F1dG9leHR9Cg/notify,topic_ZXhhbXBsZS1tbnMtdG9waWMK

Tangkap 5 frame perubahan adegan paling signifikan

Gunakan dhash untuk menemukan 5 frame dengan perubahan visual paling signifikan, cocok untuk pipeline inferensi.

Konfigurasi

PengaturanNilai
Sumberexample.mkv
Mode snapshotdhash
Format outputJPG
Jumlah frame5
Interval1 dtk
ResolusiSama dengan sumber
Path outputoss://outbucket/outobjprefix-%d.jpg
NotifikasiTopik MNS example-mns-topic
POST /example.mkv?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=video/snapshots,m_dhash,f_jpg,inter_1000,num_5|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LXtpbmRleH0ue2F1dG9leHR9Cg/notify,topic_ZXhhbXBsZS1tbnMtdG9waWMK

Tangkap semua keyframe IDR

Ekstrak setiap frame IDR dari video. Berguna untuk mendapatkan set lengkap frame yang dapat didekode secara independen.

Konfigurasi

PengaturanNilai
Sumberexample.mkv
Mode snapshotkey
Format outputJPG
ResolusiSama dengan sumber
Path outputoss://outbucket/outobjprefix-%d.jpg
NotifikasiTopik MNS example-mns-topic
POST /example.mkv?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=video/snapshots,m_key,f_jpg|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LXtpbmRleH0ue2F1dG9leHR9Cg/notify,topic_ZXhhbXBsZS1tbnMtdG9waWMK

Tangkap 10 frame yang tersebar merata

Ekstrak 10 frame yang tersebar merata sepanjang durasi video penuh.

Konfigurasi

PengaturanNilai
Sumberexample.mkv
Mode snapshotavg
Format outputJPG
Jumlah frame10
ResolusiSama dengan sumber
Path outputoss://outbucket/outobjprefix-%d.jpg
NotifikasiTopik MNS example-mns-topic
POST /example.mkv?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=video/snapshots,m_avg,f_jpg,num_10|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LXtpbmRleH0ue2F1dG9leHR9Cg/notify,topic_ZXhhbXBsZS1tbnMtdG9waWMK

Ekstraksi sampul audio

Beberapa file audio (seperti FLAC) menyematkan karya seni album. Gunakan fitur tangkapan video untuk mengekstrak gambar sampul.

Konfigurasi

PengaturanNilai
Sumberexample.flac
Format outputJPG
ResolusiSama dengan sumber
Path outputoss://outbucket/cover.jpg
NotifikasiTopik MNS example-mns-topic
POST /example.mkv?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=video/snapshots,f_jpg|sys/saveas,b_b3V0YnVja2V0,o_Y292ZXIuanBnCg/notify,topic_ZXhhbXBsZS1tbnMtdG9waWMK

Penagihan

Tangkapan video menggunakan layanan IMM dan menghasilkan item yang dapat ditagih untuk OSS dan IMM.

Biaya OSS — Untuk detail harga, lihat harga OSS.

APIItem yang dapat ditagihDasar
GetObjectPermintaan GETPer permintaan berhasil
GetObjectTrafik keluar melalui internetVolume data (berlaku saat menggunakan titik akhir publik seperti oss-cn-hangzhou.aliyuncs.com atau titik akhir percepatan)
GetObjectVolume data Akses Jarang yang diambilVolume data (berlaku untuk objek kelas Akses Jarang)
GetObjectVolume data yang diambil menggunakan akses waktu nyata untuk objek ArsipVolume data (berlaku saat akses Arsip waktu nyata diaktifkan)
GetObjectAkselerasi transferVolume data (berlaku saat akselerasi transfer diaktifkan)
PutObjectPermintaan PUTPer permintaan berhasil
PutObjectBiaya penyimpananKelas penyimpanan, ukuran, dan durasi
HeadObjectPermintaan GETPer permintaan berhasil

Biaya IMM — Untuk detail harga, lihat item yang dapat ditagih IMM.

Penting

Mulai pukul 11.00 (UTC+8) pada 28 Juli 2025, IMM menurunkan harga untuk tangkapan video. Item yang dapat ditagih spesifik adalah VideoFraming. Untuk detailnya, lihat pengumuman penyesuaian penagihan IMM.

APIItem yang dapat ditagihDasar
CreateMediaConvertTaskVideoFramingPer snapshot berhasil

Batasan

  • Tangkapan video hanya mendukung pemrosesan asinkron melalui x-oss-async-process. Pemrosesan sinkron tidak didukung.

  • Penangkapan frame dapat gagal atau menghasilkan jumlah file gambar yang salah jika video sumber memiliki kesalahan timestamp atau korupsi aliran.

  • Akses anonim ditolak.

FAQ

Apakah fitur tangkapan video mendukung penyaringan layar hitam?

Tidak, penyaringan layar hitam tidak didukung.

Apakah fitur tangkapan video mendukung pembuatan gambar mini video pendek?

Tidak. Untuk membuat pratinjau animasi pendek, gunakan fitur konversi video ke gambar animasi. Untuk detailnya, lihat Konversi video ke gambar animasi.

Apakah ada batasan format untuk video sumber?

Tidak. Semua format video utama didukung.

Dalam mode keyframe, jika waktu snapshot jatuh dalam detik pertama, apakah frame yang ditangkap adalah keyframe terdekat sebelum titik tersebut?

Ya.

Frame yang ditangkap menampilkan gambar abu-abu, bukan konten video yang diharapkan. Apa penyebabnya?

Gambar abu-abu biasanya berarti bitrate video terlalu tinggi sehingga proses snapshot tidak dapat mendekode dengan benar. Transkode video ke bitrate yang lebih rendah sebelum menangkap frame.