全部产品
Search
文档中心

Function Compute:Gunakan aplikasi berbasis FFmpeg di Function Compute untuk memproses file audio dan video

更新时间:Jul 02, 2025

Serverless Devs memungkinkan Anda menerapkan aplikasi bersama dengan layanan seperti Function Compute, Object Storage Service (OSS), dan FFmpeg untuk memproses file audio dan video. Sebagai contoh, Anda dapat menggunakan Serverless Devs untuk menanyakan informasi audio dan video, menambahkan watermark ke file audio dan video, serta mengonversi format file.

Latar Belakang

FFmpeg adalah proyek perangkat lunak sumber terbuka yang mencakup serangkaian program untuk merekam, mengonversi, dan melakukan streaming file audio dan video. FFmpeg dilisensikan di bawah GNU Lesser General Public License (LGPL) atau GNU General Public License (GPL). FFmpeg menyediakan solusi komprehensif untuk merekam, mengonversi, dan melakukan streaming audio dan video. FFmpeg menggunakan libavcodec, pustaka codec audio dan video tingkat lanjut, untuk memastikan portabilitas tinggi dan kualitas dalam skenario encoding dan decoding. Untuk informasi lebih lanjut, lihat FFmpeg.

Tema ini memberikan contoh fitur-fitur saat Anda memproses file audio dan video. Dalam topik ini, bahasa Python digunakan. Tabel berikut menjelaskan fungsi sampel untuk mengimplementasikan fitur tertentu. Anda dapat memodifikasi kode fungsi untuk setiap fungsi sampel sesuai kebutuhan bisnis Anda.

Fungsi sampel

Deskripsi

AudioConvert

Mengonversi format file audio atau video.

GetDuration

Menanyakan durasi file audio atau video.

GetMediaMeta

Menanyakan metadata file audio atau video.

GetSprites

Membuat sprite gambar untuk video.

VideoGif

Mengonversi file video menjadi file GIF.

VideoWatermark

Menambahkan watermark teks, watermark gambar, atau watermark Graphics Interchange Format (GIF) animasi ke video.

Sebelum Anda mulai

Terapkan aplikasi menggunakan Serverless Devs

  1. Jalankan perintah berikut untuk menginisialisasi proyek yang ingin Anda kelola:

    sudo s init ffmpeg-app -d ffmpeg-app

    Dalam perintah sebelumnya, -d menentukan nama direktori yang dihasilkan.

  2. Jalankan perintah berikut untuk masuk ke direktori proyek:

    cd ffmpeg-app
  3. (Opsional) Anda dapat memodifikasi kode sampel di direktori berdasarkan kebutuhan bisnis Anda untuk mengimplementasikan logika bisnis Anda.

  4. Jalankan perintah berikut untuk menerapkan proyek:

    sudo s deploy -y
    Catatan

    Jika Anda ingin menerapkan fitur spesifik dari proyek, jalankan perintah yang sesuai. Sebagai contoh, jika Anda ingin menerapkan fitur GetMediaMeta untuk menanyakan informasi metadata file audio atau video, jalankan perintah berikut:

    sudo s GetMediaMeta deploy

    Jika Anda ingin menerapkan fitur lain, ganti GetMediaMeta dengan nama fitur lain.

    Keluaran Perintah

    [2021-11-25T17:35:56.524] [INFO ] [S-CLI] - Mulai ...
    [2021-11-25T17:35:56.529] [INFO ] [S-CLI] - Terdeteksi bahwa proyek Anda memiliki proyek-proyek berikut < AudioConvert,GetMediaMeta,GetDuration,VideoGif,GetSprites,VideoWatermark > untuk dieksekusi
    [2021-11-25T17:35:56.530] [INFO ] [S-CLI] - Memulai eksekusi proyek AudioConvert
    [2021-11-25T17:35:57.725] [INFO ] [FC-DEPLOY] - Menggunakan wilayah: cn-qingdao
    [2021-11-25T17:35:57.725] [INFO ] [FC-DEPLOY] - Menggunakan alias akses: default
    [2021-11-25T17:35:57.726] [INFO ] [FC-DEPLOY] - Menggunakan accessKeyID: yourAccessKeyID
    [2021-11-25T17:35:57.726] [INFO ] [FC-DEPLOY] - Menggunakan accessKeySecret: yourAccessKeySecret
     Menggunakan tipe penyebaran fc: sdk, Jika Anda ingin menerapkan dengan pulumi, Anda bisa [s cli fc-default set deploy-type pulumi] untuk beralih.
     ......
    
    Ada konfigurasi otomatis dalam layanan: FcOssFFmpeg
    
    ......
    AudioConvert:
      region:   cn-qingdao
      service:
        name: FcOssFFmpeg
      function:
        name:       AudioConvert
        runtime:    python3
        handler:    index.handler
        memorySize: 256
        timeout:    600
    GetMediaMeta:
      region:   cn-qingdao
      service:
        name: FcOssFFmpeg
      function:
        name:       GetMediaMeta
        runtime:    python3
        handler:    index.handler
        memorySize: 1024
        timeout:    600
    GetDuration:
      region:   cn-qingdao
      service:
        name: FcOssFFmpeg
      function:
        name:       GetDuration
        runtime:    python3
        handler:    index.handler
        memorySize: 256
        timeout:    600
    VideoGif:
      region:   cn-qingdao
      service:
        name: FcOssFFmpeg
      function:
        name:       VideoGif
        runtime:    python3
        handler:    index.handler
        memorySize: 512
        timeout:    600
    GetSprites:
      region:   cn-qingdao
      service:
        name: FcOssFFmpeg
      function:
        name:       GetSprites
        runtime:    python3
        handler:    index.handler
        memorySize: 512
        timeout:    600
    VideoWatermark:
      region:   cn-qingdao
      service:
        name: FcOssFFmpeg
      function:
        name:       VideoWatermark
        runtime:    python3
        handler:    index.handler
        memorySize: 256
        timeout:    600
  5. Panggil sebuah fungsi.

    Detail Pemanggilan Fungsi AudioConvert

    Untuk memanggil fungsi AudioConvert guna mengonversi format file audio atau video, jalankan perintah berikut. Ganti nilai parameter spesifik berdasarkan kebutuhan bisnis Anda.

    sudo s AudioConvert invoke -e '{"bucket_name": "test-bucket","object_key": "a.mp4", "output_dir" : "output/", "dst_type":".wav", "ac":"1", "ar":"4000"}'

    Parameter:

    • bucket_name: Nama Bucket OSS.

    • object_key: Nama file audio yang ingin Anda konversi formatnya.

    • output_dir: Nama Bucket OSS tempat Anda ingin menyimpan file video setelah transkode file.

    • dst_type: Format yang dikonversi.

    • (Opsional) ac: Jumlah saluran suara.

    • (Opsional) ar: Laju sampling audio.

    Keluaran Perintah Sampel:

    [2021-11-26T16:04:16.293] [INFO ] [S-CLI] - Mulai ...
    ========= Log FC invoke dimulai =========
    ......
    2021-11-26T08:04:18.520Z 2fc578cd-8787-4681-ab21-a3f6b4ab1e2a [ERROR] returncode:1
    ......
    Durasi: 1156.09 ms, Durasi yang Dibayar: 1157 ms, Ukuran Memori: 256 MB, Penggunaan Memori Maksimum: 88.23 MB
    ========= Log FC invoke berakhir =========
    
    Hasil FC Invoke:
    ok
    
    
    Akhir metode: invoke

    Detail Pemanggilan Fungsi GetDuration

    Untuk memanggil fungsi GetDuration guna menanyakan durasi file audio atau video, jalankan perintah berikut. Ganti nilai parameter spesifik berdasarkan kebutuhan bisnis Anda.

    sudo s GetDuration invoke -e '{"bucket_name": "bucket-name","object_key": "a.mp4"}'

    Parameter:

    • bucket_name: Nama Bucket OSS.

    • object_key: Nama objek yang durasinya ingin Anda ketahui.

    Keluaran Perintah Sampel:

    [2021-11-26T14:21:48.877] [INFO ] [S-CLI] - Mulai ...
    ========= Log FC invoke dimulai =========
    Runtime python3 FunctionCompute diinisialisasi.
    FC Invoke Start RequestId: 6bb9ecae-7f53-4efb-afea-7614ef87****
    2021-11-26T06:21:50.273Z 6bb9ecae-7f53-4efb-afea-7614ef87**** [INFO] waktu eksekusi Fungsi [handler] saat ini adalah 0.17 detik
    FC Invoke End RequestId: 6bb9ecae-7f53-4efb-afea-7614ef87****
    
    Durasi: 754.63 ms, Durasi yang Dibayar: 755 ms, Ukuran Memori: 256 MB, Penggunaan Memori Maksimum: 61.21 MB
    ========= Log FC invoke berakhir =========
    
    Hasil FC Invoke:
    110.037333
    
    Akhir metode: invoke

    Detail Pemanggilan Fungsi GetMediaMeta

    Untuk memanggil fungsi GetMediaMeta guna menanyakan metadata file audio atau video, jalankan perintah berikut. Ganti nilai parameter spesifik berdasarkan kebutuhan bisnis Anda.

    sudo s GetMediaMeta invoke -e '{"bucket_name": "test-bucket","object_key": "a.mp4"}'

    Parameter:

    • bucket_name: Nama Bucket OSS.

    • object_key: Nama objek yang ingin Anda ketahui metadata-nya.

    Keluaran Perintah Sampel:

    [2021-11-26T14:19:02.045] [INFO ] [S-CLI] - Mulai ...
    ========= Log FC invoke dimulai =========
    Runtime python3 FunctionCompute diinisialisasi.
    FC Invoke Start RequestId: dda964e0-82b6-452a-b849-6b0b835f****
    2021-11-26T06:19:04.688Z dda964e0-82b6-452a-b849-6b0b835f**** [INFO] waktu eksekusi Fungsi [handler] saat ini adalah 0.23 detik
    FC Invoke End RequestId: dda964e0-82b6-452a-b849-6b0b835f****
    
    Durasi: 1238.78 ms, Durasi yang Dibayar: 1239 ms, Ukuran Memori: 1024 MB, Penggunaan Memori Maksimum: 118.39 MB
    ========= Log FC invoke berakhir =========
    
    Hasil FC Invoke:
    {
        "format": {
            "bit_rate": "17024829",
            "duration": "110.037333",
            "filename": "http://test-bucket.oss-cn-qingdao-internal.aliyuncs.com/a.mp4......",
            "format_long_name": "QuickTime / MOV",
            "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
            "nb_programs": 0,
            "nb_streams": 2,
            "probe_score": 100,
            "size": "234170850",
            "start_time": "0.000000",
            "tags": {
                "compatible_brands": "mp42mp41",
                "creation_time": "2020-09-05T06:03:49.000000Z",
                "major_brand": "mp42",
                "minor_version": "0"
            }
        },
        "streams": [
            {
                "avg_frame_rate": "25/1",
                "bit_rate": "16708594",
                "bits_per_raw_sample": "8",
                "chroma_location": "left",
                "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
                "codec_name": "h264",
                "codec_tag": "0x31637661",
                "codec_tag_string": "avc1",
                "codec_time_base": "1/50",
                "codec_type": "video",
                "coded_height": 1088,
                "coded_width": 1920,
                "color_primaries": "bt709",
                "color_range": "tv",
                "color_space": "bt709",
                "color_transfer": "bt709",
                "disposition": {
                    "attached_pic": 0,
                    "clean_effects": 0,
                    "comment": 0,
                    "default": 1,
                    "dub": 0,
                    "forced": 0,
                    "hearing_impaired": 0,
                    "karaoke": 0,
                    "lyrics": 0,
                    "original": 0,
                    "timed_thumbnails": 0,
                    "visual_impaired": 0
                },
                "duration": "110.000000",
                "duration_ts": 2750000,
                "has_b_frames": 1,
                "height": 1080,
                "index": 0,
                "is_avc": "true",
                "level": 41,
                "nal_length_size": "4",
                "nb_frames": "2750",
                "pix_fmt": "yuv420p",
                "profile": "Main",
                "r_frame_rate": "25/1",
                "refs": 1,
                "start_pts": 0,
                "start_time": "0.000000",
                "tags": {
                    "creation_time": "2020-09-05T06:03:49.000000Z",
                    "encoder": "AVC Coding",
                    "handler_name": "\u001fMainconcept Video Media Handler",
                    "language": "eng"
                },
                "time_base": "1/25000",
                "width": 1920
            },
            {
                "avg_frame_rate": "0/0",
                "bit_rate": "317375",
                "bits_per_sample": 0,
                "channel_layout": "stereo",
                "channels": 2,
                "codec_long_name": "AAC (Advanced Audio Coding)",
                "codec_name": "aac",
                "codec_tag": "0x6134706d",
                "codec_tag_string": "mp4a",
                "codec_time_base": "1/48000",
                "codec_type": "audio",
                "disposition": {
                    "attached_pic": 0,
                    "clean_effects": 0,
                    "comment": 0,
                    "default": 1,
                    "dub": 0,
                    "forced": 0,
                    "hearing_impaired": 0,
                    "karaoke": 0,
                    "lyrics": 0,
                    "original": 0,
                    "timed_thumbnails": 0,
                    "visual_impaired": 0
                },
                "duration": "110.000000",
                "duration_ts": 5280000,
                "index": 1,
                "max_bit_rate": "417750",
                "nb_frames": "5158",
                "profile": "LC",
                "r_frame_rate": "0/0",
                "sample_fmt": "fltp",
                "sample_rate": "48000",
                "start_pts": 0,
                "start_time": "0.000000",
                "tags": {
                    "creation_time": "2020-09-05T06:03:49.000000Z",
                    "handler_name": "#Mainconcept MP4 Sound Media Handler",
                    "language": "eng"
                },
                "time_base": "1/48000"
            }
        ]
    }
    Akhir metode: invoke

    Detail Pemanggilan Fungsi GetSprites

    Untuk memanggil fungsi GetSprites guna membuat sprite dari file video, jalankan perintah berikut. Ganti nilai parameter spesifik berdasarkan kebutuhan bisnis Anda.

    sudo s GetSprites invoke -e '{"bucket_name": "test-bucket","object_key": "aclear.mp4", "output_dir" : "output/", "tile": "3*4"}'

    Parameter:

    • bucket_name: Nama Bucket OSS.

    • object_key: Nama objek yang ingin Anda gunakan untuk membuat sprite.

    • output_dir: Nama Bucket OSS tempat Anda ingin menyimpan file video setelah transkode file.

    • tile: Baris dan kolom sprite.

    • (Opsional) start: Titik awal video dari mana Anda ingin membuat sprite. Nilai default: 0.

    • (Opsional) duration: Durasi klip video untuk membuat sprite setelah Anda menentukan parameter start. Contohnya, jika Anda mengatur parameter start ke 10 dan parameter duration ke 20, snapshot diambil selama detik ke-10 hingga ke-30 video.

    • (Opsional) itsoffset: Latensi aliran video yang ditampilkan. Nilai default: 0. Parameter ini harus digunakan bersama dengan parameter start dan interval. Contoh:

      • Jika Anda mengatur parameter start ke 0, parameter interval ke 10, dan parameter itsoffset ke 0, snapshot diambil pada detik ke-5, ke-15, dan ke-25 video.

      • Jika Anda mengatur parameter start ke 0, parameter interval ke 10, dan parameter itsoffset ke 1, snapshot diambil pada detik ke-4, ke-14, dan ke-24 video.

      • Jika Anda mengatur parameter start ke 0, parameter interval ke 10, dan parameter itsoffset ke -1, snapshot diambil pada detik ke-6, ke-16, dan ke-26 video.

      • Jika Anda mengatur parameter start ke 0, parameter interval ke 10, dan parameter itsoffset ke 4.999, snapshot diambil pada detik ke-0, ke-10, dan ke-20 video.

      Catatan

      Jika Anda mengatur parameter itsoffset ke 5, snapshot yang diambil pada detik ke-0 akan hilang. Kami sarankan Anda mengatur parameter ini ke 4.999.

    • (Opsional) scale: Ukuran snapshot yang diambil. Secara default, rasio aspek snapshot yang diambil adalah -1:-1.

    • (Opsional) interval: Interval di mana snapshot diambil dari video. Satuan: detik. Nilai default: 1.

    • (Opsional) padding: Jarak antara snapshot. Nilai default: 0.

    • (Opsional) color: Warna latar belakang sprite. Secara default, warna latar belakang adalah hitam.

    • (Opsional) dst_type: Format sprite. Nilai default: JPG. Nilai valid: JPG dan PNG.

    Keluaran Perintah Sampel:

    [2021-11-26T16:07:42.585] [INFO ] [S-CLI] - Mulai ...
    ========= Log FC invoke dimulai =========
    Runtime python3 FunctionCompute diinisialisasi.
    FC Invoke Start RequestId: 1b427831-e10f-4c2b-b780-9b504c29aa67
    2021-11-26T08:07:44.684Z 1b427831-e10f-4c2b-b780-9b504c29aa67 [INFO] b'{"bucket_name": "test-bucket","object_key": "a.mp4", "output_dir" : "output/", "dst_type":".wav"}'
    2021-11-26T08:07:51.642Z 1b427831-e10f-4c2b-b780-9b504c29aa67 [INFO] Diunggah /tmp/transcoded_a.wav ke output/transcoded_a.wav
    2021-11-26T08:07:51.642Z 1b427831-e10f-4c2b-b780-9b504c29aa67 [INFO] waktu eksekusi Fungsi [handler] saat ini adalah 6.96 detik
    FC Invoke End RequestId: 1b427831-e10f-4c2b-b780-9b504c29aa67
    
    Durasi: 7876.26 ms, Durasi yang Dibayar: 7877 ms, Ukuran Memori: 3072 MB, Penggunaan Memori Maksimum: 119.06 MB
    ========= Log FC invoke berakhir =========
    
    Hasil FC Invoke:
    ok
    
    
    Akhir metode: invoke

    Detail Pemanggilan Fungsi VideoGif

    Untuk memanggil fungsi VideoGif guna menghasilkan GIF animasi dari file video, jalankan perintah berikut. Ganti nilai parameter spesifik berdasarkan kebutuhan bisnis Anda.

    sudo s VideoGif invoke -e '{"bucket_name": "test-bucket","object_key": "a.mp4", "output_dir" : "output/", "vframes": "5", "start": "0",  "duration": "2"}'

    Parameter:

    • bucket_name: Nama Bucket OSS.

    • object_key: Nama file video yang ingin Anda konversi menjadi file GIF.

    • output_dir: Nama Bucket OSS yang digunakan untuk menyimpan file video setelah Anda melakukan transkode file.

    • (Opsional) vframes: Durasi klip video yang ingin Anda buat menjadi file GIF setelah menentukan parameter start.

    • (Opsional) start: Titik awal video dari mana Anda ingin mengonversi. Nilai default: 0.

    • (Opsional) duration: Durasi video yang ingin Anda buat menjadi file GIF setelah menentukan parameter start.

    Catatan

    Jika Anda mengonfigurasi parameter duration dan vframes pada saat yang sama, nilai parameter duration yang berlaku. Secara default, jika tidak ada satu pun dari dua parameter tersebut yang dikonfigurasi, seluruh video akan dikonversi menjadi file GIF.

    Keluaran Perintah Sampel:

    [2021-11-26T15:27:26.647] [INFO ] [S-CLI] - Mulai ...
    ========= Log FC invoke dimulai =========
    Runtime python3 FunctionCompute diinisialisasi.
    FC Invoke Start RequestId: a49fc8b4-ee8f-4e8b-9923-b8b41ced47cb
    2021-11-26T07:27:28.279Z a49fc8b4-ee8f-4e8b-9923-b8b41ced47cb [INFO] b'{"bucket_name": "test-bucket","object_key": "a.mp4", "output_dir" : "output/", "vframes": "5", "start": "0",  "duration": "2"}'
    2021-11-26T07:27:28.280Z a49fc8b4-ee8f-4e8b-9923-b8b41ced47cb [INFO] cmd = ffmpeg -y -ss 0 -t 2 -accurate_seek -i ......
    2021-11-26T07:27:30.150Z a49fc8b4-ee8f-4e8b-9923-b8b41ced47cb [INFO] Diunggah /tmp/a.gif ke output/a.gif
    2021-11-26T07:27:30.151Z a49fc8b4-ee8f-4e8b-9923-b8b41ced47cb [INFO] waktu eksekusi Fungsi [handler] saat ini adalah 1.87 detik
    FC Invoke End RequestId: a49fc8b4-ee8f-4e8b-9923-b8b41ced47cb
    
    Durasi: 2495.95 ms, Durasi yang Dibayar: 2496 ms, Ukuran Memori: 512 MB, Penggunaan Memori Maksimum: 85.32 MB
    ========= Log FC invoke berakhir =========
    
    Hasil FC Invoke:
    ok
    
    Akhir metode: invoke

    Detail Pemanggilan Fungsi VideoWatermark

    Untuk memanggil fungsi VideoWatermark guna menambahkan watermark ke file video, jalankan perintah berikut. Ganti nilai parameter spesifik berdasarkan kebutuhan bisnis Anda.

    sudo s VideoWatermark invoke -e '{"bucket_name": "test-bucket","object_key": "a.mp4", "output_dir" : "output/", "vf_args" : "drawtext=fontfile=/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc:text='hello Function Compute':x=100:y=50:fontsize=24:fontcolor=red"}'

    Parameter:

    • bucket_name: Nama Bucket OSS.

    • object_key: Nama file video yang ingin Anda tambahkan watermark.

    • output_dir: Nama Bucket OSS tempat Anda ingin menyimpan file video setelah Anda melakukan transkode file.

    • vf_args: Watermark teks atau gambar yang ingin Anda tambahkan.

    • filter_complex_args: Watermark GIF animasi yang ingin Anda tambahkan. Secara default, jika Anda mengonfigurasi parameter ini dan parameter vf_args pada saat yang sama, nilai parameter vf_args menjadi tidak valid.

    Keluaran Perintah Sampel:

    [2021-11-26T15:20:24.396] [INFO ] [S-CLI] - Mulai ...
    ========= Log FC invoke dimulai =========
    static-master/target/lib ......
    ......
    FC Invoke End RequestId: 31ecddfa-4e41-44bb-9489-00708b07****
    
    Durasi: 1302.08 ms, Durasi yang Dibayar: 1303 ms, Ukuran Memori: 256 MB, Penggunaan Memori Maksimum: 256.00 MB
    ========= Log FC invoke berakhir =========
    
    Hasil FC Invoke:
    ok
    
    
    Akhir metode: invoke

Referensi