Process audio and video using Function Compute and FFmpeg

更新时间:
复制 MD 格式

Use the Serverless Devs tool to quickly deploy applications based on Function Compute, Object Storage Service (OSS), and FFmpeg. This lets you perform audio and video processing operations, such as retrieving audio and video information, adding watermarks, and converting formats.

Background information

FFmpeg is an open source computer program that provides a complete solution for recording, converting, and streaming audio and video. It is licensed under the LGPL or GPL and includes the advanced audio and video codec library libavcodec, which ensures high portability and codec quality. For more information, see FFmpeg.

The examples in this topic use Python. The sample template includes the following features. You can also modify the sample function code for custom development.

Example name

Description

GetMediaMeta

Gets the metadata of an audio or video file.

GetDuration

Gets the duration of an audio or video file.

GetSprites

Creates a sprite from a video.

VideoWatermark

Adds a text watermark, a static image watermark, or a dynamic GIF watermark.

AudioConvert

Converts the format of an audio or video file.

VideoGif

Extracts a GIF from a video file.

Prerequisites

Use Serverless Devs to deploy the application

  1. Run the following command to initialize the project.

    sudo s init ffmpeg-app-v3 -d ffmpeg-app-v3

    -d specifies the name of the directory to be created.

  2. Run the following command to navigate to the project directory.

    cd ffmpeg-app-v3
  3. Optional: Modify the code samples in the project directory to implement your business logic.

  4. Run the following command to deploy the project.

    sudo s deploy -y
    Note

    To deploy only a specific feature in the project, such as the GetMediaMeta feature for retrieving audio and video metadata, run the following command:

    sudo s GetMediaMeta deploy

    When you deploy other features, replace GetMediaMeta with the name of the feature.

    The following is a sample output after deployment.

    Downloading[/v3/packages/fc3/zipball/0.0.47]...
    Download fc3 successfully
    Steps for [deploy] of [ffmpeg-app]
    ====================
    Downloading[/v3/packages/fc3-domain/zipball/0.0.23]...
    Download fc3-domain successfully
    TIPS:
    
    You can use "s info" get more detail
    
    ✔ [AudioConvert] completed (2.19s)
    ✔ [GetMediaMeta] completed (0.85s)
    ✔ [GetDuration] completed (0.78s)
    ✔ [VideoGif] completed (0.77s)
    ✔ [GetSprites] completed (0.71s)
    ✔ [VideoWatermark] completed (0.82s)
    
    Result for [deploy] of [ffmpeg-app]
    
    ====================
    AudioConvert: 
      region:         cn-hangzhou
      description:    Audio format converter
      functionArn:    acs:fc:cn-hangzhou:************0898:functions/AudioConvert-****
      functionName:   AudioConvert-****
      handler:        index.handler
      internetAccess: true
      memorySize:     1024
      role:           acs:ram::************0898:role/aliyunfcdefaultrole
      runtime:        python3.9
      timeout:        900
      __component:    fc3
    GetMediaMeta: 
      region:         cn-hangzhou
      description:    Get audio and video metadata
      functionArn:    acs:fc:cn-hangzhou:************0898:functions/GetMediaMeta-****
      functionName:   GetMediaMeta-****
      handler:        index.handler
      internetAccess: true
      memorySize:     1024
      role:           acs:ram::************0898:role/aliyunfcdefaultrole
      runtime:        python3.9
      timeout:        900
      __component:    fc3
    GetDuration: 
      region:         cn-hangzhou
      description:    Get audio and video duration
      functionArn:    acs:fc:cn-hangzhou:************0898:functions/GetDuration-****
      functionName:   GetDuration-****
      handler:        index.handler
      internetAccess: true
      memorySize:     1024
      role:           acs:ram::************0898:role/aliyunfcdefaultrole
      runtime:        python3.9
      timeout:        900
      __component:    fc3
    VideoGif: 
      region:         cn-hangzhou
      description:    A powerful function to extract a GIF from a video
      functionArn:    acs:fc:cn-hangzhou:************0898:functions/VideoGif-****
      functionName:   VideoGif-****
      handler:        index.handler
      internetAccess: true
      memorySize:     1024
      role:           acs:ram::************0898:role/aliyunfcdefaultrole
      runtime:        python3.9
      timeout:        900
      __component:    fc3
    GetSprites: 
      region:         cn-hangzhou
      description:    A powerful function to create a sprite
      functionArn:    acs:fc:cn-hangzhou:************0898:functions/GetSprites-****
      functionName:   GetSprites-****
      handler:        index.handler
      internetAccess: true
      memorySize:     1024
      role:           acs:ram::************0898:role/aliyunfcdefaultrole
      runtime:        python3.9
      timeout:        900
      __component:    fc3
    VideoWatermark: 
      region:         cn-hangzhou
      description:    A powerful feature to add a watermark to a video
      functionArn:    acs:fc:cn-hangzhou:************0898:functions/VideoWatermark-****
      functionName:   VideoWatermark-****
      handler:        index.handler
      internetAccess: true
      memorySize:     1024
      role:           acs:ram::************0898:role/aliyunfcdefaultrole
      runtime:        python3.9
      timeout:        900
      __component:    fc3
    
  5. Invoke the sample functions.

    Invoke the GetMediaMeta function to retrieve audio and video metadata

    The following sample command shows how to invoke the GetMediaMeta function.

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

    Parameter description:

    • bucket_name: The name of the bucket.

    • object_key: The name of the file whose metadata you want to retrieve.

    Sample output:

      Steps for [invoke] of [ffmpeg-app]
    ====================
    ========= FC invoke Logs begin =========
    FunctionCompute python3 runtime inited.
    FC Invoke Start RequestId: 1-67051746-15265ec4-4fa70b******
    2024-10-08T11:28:07.836Z 1-67051746-15265ec4-4fa70b****** [INFO] current Function [handler] excute time is 0.46 seconds
    FC Invoke End RequestId: 1-67051746-15265ec4-4fa70b******
    
    Duration: 891.57 ms, Billed Duration: 892 ms, Memory Size: 1024 MB, Max Memory Used: 60.01 MB
    ========= FC invoke Logs end =========
    
    Invoke instanceId: c-67051746-152fc2e0-b08240******
    Code Checksum: 3393206491906161454
    Qualifier: LATEST
    RequestId: 1-67051746-15265ec4-4fa70b******
    
    Invoke Result:
    {
        "format": {
            "bit_rate": "17024829",
            "duration": "110.037333",
            "filename": "http://test-bucket.oss-cn-hangzhou-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"
            }
        ]
    }
    End of method: invoke

    Invoke the GetDuration function to retrieve the duration of an audio or video file

    The following sample command shows how to invoke the GetDuration function.

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

    Parameter description:

    • bucket_name: The name of the bucket.

    • object_key: The name of the file whose duration you want to retrieve.

    Sample output:

    Steps for [invoke] of [ffmpeg-app]
    ====================
    ========= FC invoke Logs begin =========
    FunctionCompute python3 runtime inited.
    FC Invoke Start RequestId: 1-67051470-15a07456-27998a******
    2024-10-08T11:16:03.069Z 1-67051470-15a07456-27998a****** [INFO] current Function [handler] excute time is 0.46 seconds
    FC Invoke End RequestId: 1-67051470-15a07456-27998a******
    
    Duration: 866.68 ms, Billed Duration: 867 ms, Memory Size: 1024 MB, Max Memory Used: 60.00 MB
    ========= FC invoke Logs end =========
    
    Invoke instanceId: c-67051470-152fc2e0-782287******
    Code Checksum: 6541531297040229118
    Qualifier: LATEST
    RequestId: 1-67051470-15a07456-27998a******
    
    
    Invoke Result:
    18.416667
    [GetDuration] completed (2.67s)

    Invoke the GetSprites function to create a sprite from a video

    The following sample command shows how to invoke the GetSprites function.

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

    Parameter description:

    • bucket_name: The name of the bucket.

    • object_key: The name of the file from which you want to create a sprite.

    • output_dir: The directory in the bucket for storing the transcoded video.

    • tile: The rows and columns of the sprite.

    • (Optional) start: The time at which to start creating the sprite. The default value is 0.

    • (Optional) duration: The duration of the video segment to capture, starting from the start time. For example, if you set start to 10 and duration to 20, the video from 10s to 30s is captured.

    • (Optional) itsoffset: The stream offset, which specifies a delay. The default value is 0. This parameter must be used with the start and interval parameters. The following are examples:

      • If start is 0, interval is 10, and itsoffset is 0, screenshots are taken at 5s, 15s, 25s, and so on.

      • If start is 0, interval is 10, and itsoffset is 1, then the timestamps for the screenshots are 4, 14, 24, and so on.

      • If start is 0, interval is 10, and itsoffset is -1, screenshots are taken at 6s, 16s, 26s, and so on.

      • If start is 0, interval is 10, and itsoffset is 4.999, the screenshot timestamps are 0, 10, 20, and so on.

      Note

      If you set this parameter to 5, the image at 0s is lost. To avoid this, set the parameter to 4.999.

    • (Optional) scale: The size of the screenshot. The default value is -1:-1.

    • (Optional) interval: The interval in seconds at which to take screenshots. The default value is 1.

    • (Optional) padding: The space between images. The default value is 0.

    • (Optional) color: The background color of the sprite. The default color is black.

    • (Optional) dst_type: The image format of the generated sprite. The default value is JPG. Valid values are JPG and PNG.

    Sample output:

    Steps for [invoke] of [ffmpeg-app]
    ====================
    ========= FC invoke Logs begin =========
    yuvj420p(pc), 11520x8640, q=2-31, 200 kb/s, 0.08 fps, 0.08 tbn, 0.08 tbc (default)\n    Metadata:\n      creation_time   : 2024-10-08T06:45:29.000000Z\n      handler_name    : Core Media Video\n      encoder         : Lavc58.54.100 mjpeg\n    Side data:\n      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1\nframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=1.21x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=1.15x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed= 1.1x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=1.05x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=1.01x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.966x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.923x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.887x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.855x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.822x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.794x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.768x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.736x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.714x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.693x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.673x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.652x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.634x    \rframe=    1 fps=0.1 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.615x    \rframe=    1 fps=0.0 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.597x    \rframe=    1 fps=0.0 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.582x    \rframe=    1 fps=0.0 q=21.1 size=N/A time=00:00:12.00 bitrate=N/A speed=0.566x    \r[mjpeg @ 0x464b0c0] get_buffer() failed\n[mjpeg @ 0x464b0c0] thread_get_buffer() failed\n[mjpeg @ 0x464b0c0] get_buffer() failed (-12 (nil))\nVideo encoding failed\nConversion failed!\n"
    2024-10-08T11:16:59.390Z 1-67051494-15cef74d-1880b1****** [ERROR] stdout:b''
    2024-10-08T11:16:59.540Z 1-67051494-15cef74d-1880b1****** [INFO] Uploaded /tmp/screen.record1.jpg to output/screen.record1.jpg
    2024-10-08T11:16:59.540Z 1-67051494-15cef74d-1880b1****** [INFO] current Function [handler] excute time is 22.28 seconds
    FC Invoke End RequestId: 1-67051494-15cef74d-1880b1******
    
    Duration: 22703.61 ms, Billed Duration: 22704 ms, Memory Size: 1024 MB, Max Memory Used: 926.45 MB
    ========= FC invoke Logs end =========
    
    Invoke instanceId: c-67051494-152fc2e0-aecae7******
    Code Checksum: 3870681690589467457
    Qualifier: LATEST
    RequestId: 1-67051494-15cef74d-1880b1******
    
    Invoke Result:
    ok
    [GetSprites] completed (23.38s)

    Invoke the VideoWatermark function to add a watermark to a video

    The following sample command shows how to invoke the VideoWatermark function.

    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"}'

    Parameters:

    • bucket_name: The name of the bucket.

    • object_key: The name of the file to be watermarked.

    • output_dir: The directory in the bucket where the transcoded video is stored.

    • vf_args: Specifies a text watermark or a static image watermark.

    • filter_complex_args: Specifies a dynamic image watermark. If you set this parameter and the vf_args parameter at the same time, the value of vf_args is ignored.

    Sample output:

    Steps for [invoke] of [ffmpeg-app]
    ========= FC invoke Logs begin =========
    static-master/target/lib ......
    ......
    FC Invoke End RequestId: 31ecddfa-4e41-44bb-9489-00708b07****
    
    Duration: 3740.74 ms, Billed Duration: 3741 ms, Memory Size: 1024 MB, Max Memory Used: 979.74 MB
    ========= FC invoke Logs end =========
    
    Invoke instanceId: c-67051514-152fc2e0-7ca0b5******
    Code Checksum: 15811305094477563349
    Qualifier: LATEST
    RequestId: 1-67051514-15f4ad6f-b9e770******
    
    Invoke Result:
    ok
    [VideoWatermark] completed (7.04s)

    Invoke the AudioConvert function to convert an audio format

    The following sample command shows how to invoke the AudioConvert function. Modify the parameters as needed.

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

    Metric description:

    • bucket_name: The name of the bucket.

    • object_key: The name of the file whose audio format you want to convert.

    • output_dir: The storage path for the transcoded video in the bucket.

    • dst_type: The format of the output file.

    • (Optional) ac: Specifies the number of sound channels.

    • (Optional) ar: Specifies the sample rate.

    Sample output:

    Steps for [invoke] of [ffmpeg-app]
    ========= FC invoke Logs begin =========
    ......
    2024-10-08T11:19:14.345Z 1-67051531-1540ac27-5efd5d****** [INFO] current Function [handler] excute time is 0.39 seconds
    FC Invoke End RequestId: 1-67051531-1540ac27-5efd5d******
    
    Duration: 1156.09 ms, Billed Duration: 1157 ms, Memory Size: 256 MB, Max Memory Used: 88.23 MB
    ========= FC invoke Logs end =========
    
    FC Invoke Result:
    ok
    
    
    End of method: invoke

    Invoke the VideoGif function to extract a GIF from a video

    The following sample command shows how to invoke the VideoGif function. You can modify the parameters as needed.

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

    Parameters:

    • bucket_name: The name of the bucket.

    • object_key: The name of the file that you want to convert to the GIF format.

    • output_dir: The storage path in Object Storage Service for the transcoded video.

    • (Optional) vframes: The number of video frames to transform, starting at the time specified by the start parameter.

    • (Optional) start: The start time for the conversion. The default value is 0.

    • (Optional) duration: The duration of the video to be transformed, starting at the time specified by the start parameter.

    Note

    If you set both the duration and vframes parameters, the duration parameter takes precedence. If you do not set either of these parameters, the entire video is converted to the GIF format by default.

    Sample output:

    Steps for [invoke] of [ffmpeg-app]
    ========= FC invoke Logs begin =========
    FunctionCompute python3 runtime inited.
    FC Invoke Start RequestId: 1-6705158b-15aae364-e8b091******
    2024-10-08T11:20:48.472Z 1-6705158b-15aae364-e8b091****** [INFO] b'{"bucket_name": "csy-test-bucket-hangzhou","object_key": "screen.record.mov", "output_dir" : "output/", "vframes": "5", "start": "0",  "duration": "2"}'
    2024-10-08T11:20:48.553Z 1-6705158b-15aae364-e8b091****** [INFO] cmd = ffmpeg -y -ss 0 -t 2 -accurate_seek -i http://csy-test-bucket-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/screen.record.mov?security-token=CAISzgJ1q6Ft5B2yfSjIr5bgJd%2BBj5FX%2FbSlR3HinW8hR95tobDlkzz2IHhMe3JhAuwdtPw0lG1Y5vgYlqZdVplOWU3Da%2BB364xK7Q75%2FH00TwPvv9I%2Bk5SANTW5KXyShb3%2FAYjQSNfaZY3eCTTtnTNyxr3XbCirW0ffX7SClZ9gaKZ8PGD6F00kYu1bPQx%2FssQXGGLMPPK2SH7Qj3HXEVBjt3gX6wo9y9zmmZfDs0CA1AenkLVN99WhGPX%2BMZkwZqUYesyuwel7epDG1CNt8BVQ%2FM909vccoWic74rBWAMJuEXbY7qKqMcUJQt4d7U8FaVIofb1iPlkoOvXmpRJRpfKsXy0OM62ZvdDoKOscIvBXr6y5QAursKXmZkJus1AV6%2Fw%2FbD%2FoDkLGrxvYzY7alc3aVrxMYzcwxvBAWzIcMvovuxIl%2FQ8oTrmlUSOVA3RK93xGoABgSZSgv9GieOwVAhZcBP%2Ff6NCPBIJkOXSUDRUiIqoLG0NMAEvGz1kHRhxkSShhCrHGqFD1OXkwdmwzOtcE8s%2F3VP6%2Fw4t6kj0pFtSkl7HWbvyI1Pdxd%2Fs6GLV8xnoIoSQAAOTNjIHUHVx22GPGGDGmMcsAphusXkjHmB5KAldSL0gAA%3D%3D&OSSAccessKeyId=STS.NUUne5bNvJvNEWSyotKQANuNq&Expires=1728390048&Signature=AWhsgR2D3xRMFZZ35PKpUVPwjH4%3D -pix_fmt rgb24 /tmp/screen.record.gif
    2024-10-08T11:21:01.793Z 1-6705158b-15aae364-e8b091****** [INFO] Uploaded /tmp/screen.record.gif to output/screen.record.gif 
    2024-10-08T11:21:01.796Z 1-6705158b-15aae364-e8b091****** [INFO] current Function [handler] excute time is 13.32 seconds
    FC Invoke End RequestId: 1-6705158b-15aae364-e8b091******
    
    Duration: 13803.77 ms, Billed Duration: 13804 ms, Memory Size: 1024 MB, Max Memory Used: 414.34 MB
    ========= FC invoke Logs end =========
    
    Invoke instanceId: c-6705158b-152fc2e0-5ca045******
    Code Checksum: 5414709321074418652
    Qualifier: LATEST
    RequestId: 1-6705158b-15aae364-e8b091******
    
    Invoke Result:
    ok
    [VideoGif] completed (18.86s)

References