全部產品
Search
文件中心

Function Compute:音視頻處理最佳實務

更新時間:Jul 06, 2024

您可以通過Function Compute控制台來體驗GPU執行個體的最佳實務。本文以Python語言為例,說明如何通過控制台將原始視頻經過函數代碼的轉碼處理,從.mp4轉換為.flv格式。

應用情境和優勢

隨著越來越多的強互動應用情境的出現,例如社交直播、線上課堂以及遠程醫學等,互連網流量正在向即時、准即時的趨勢演化。視頻平台通常要將原始視頻內容根據碼率、解析度、渠道貼片、播放平台等維度,以1∶N的方式轉碼輸出多種分發視頻格式,以服務不同網路品質、各種播放平台的觀看者。視頻轉碼是視頻生產分發中的關鍵一環,理想的視頻轉碼解決方案需要在成本(人民幣/流)和功率效率(瓦/流)方面具有成本效益。

在不同的應用情境下,Function Compute提供的GPU執行個體與CPU相比所具備的優勢如下。

  • 即時、准即時的應用情境

    提供數倍於CPU的轉碼效率,從而快速將生產內容推向終端使用者。

  • 成本優先的GPU應用情境

    提供彈性預留模式,從而按需為您保留工作GPU執行個體,對比自購VM擁有較大成本優勢。

  • 效率優先的GPU應用情境

    屏蔽營運GPU叢集的繁重負擔(驅動/CUDA版本管理、機器運行管理、GPU壞卡管理),使得開發人員專註於代碼開發、聚焦營運目標的達成。

GPU執行個體的更多資訊,請參見執行個體類型及使用模式

效能對比

Function ComputeGPU執行個體基於的Turing架構支援以下編碼和解碼格式:

  • 編碼格式

    H.264 (AVCHD) YUV 4:2:0

    H.264 (AVCHD) YUV 4:4:4

    H.264 (AVCHD) Lossless

    H.265 (HEVC) 4K YUV 4:2:0

    H.265 (HEVC) 4K YUV 4:4:4

    H.265 (HEVC) 4K Lossless

    H.265 (HEVC) 8k

    HEVC10-bitsupport

    HEVCB Framesupport

  • 解碼格式

    MPEG-1

    MPEG-2

    VC-1

    VP8

    VP9

    H.264 (AVCHD)

    H.265 (HEVC) 4:2:0

    *H.265 (HEVC) 4:4:4

    8 bit

    10 bit

    12 bit

    8 bit

    10 bit

    12 bit

    8 bit

    10 bit

    12 bit

原始視頻資訊如下表所示。

視頻資訊

資料

時間長度

2分05秒

碼率

4085 Kb/s

視頻流資訊

h264 (High), yuv420p (progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc

音視頻資訊

aac (LC), 44100 Hz, stereo, fltp

CPU和GPU的測試機器指標如下表所示。

對比項

CPU機型

GPU機型

CPU

CPU Xeon® Platinum 8163 4C

CPU Xeon® Platinum 8163 4C

RAM

16 GB

16 GB

GPU

N/A

T4

FFmpeg

git-2020-08-12-1201687

git-2020-08-12-1201687

視頻轉碼(1∶1)

效能測試:1路輸入、1路輸出

解析度

CPU轉碼耗時

GPU轉碼耗時

H264∶1920x1080 (1080p) (Full HD)

3分19.331秒

0分9.399秒

H264∶1280x720 (720p) (Half HD)

2分3.708秒

0分5.791秒

H264∶640x480 (480p)

1分1.018秒

0分5.753秒

H264∶480x360 (360p)

44.376秒

0分5.749秒

視頻轉碼(1∶N)

效能測試:1路輸入、3路輸出

解析度

CPU轉碼耗時

GPU轉碼耗時

H264∶1920x1080 (1080p) (Full HD)

5分58.696秒

0分45.268秒

H264∶1280x720 (720p) (Half HD)

H264∶640x480 (480p)

轉碼命令

  • CPU轉碼命令

    • 單路轉碼(1∶1)

      docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg -y -i input.mp4 -c:v h264 -vf scale=1920:1080 -b:v 5M output.mp4
    • 多路轉碼(1∶N)

      docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg \
      -y -i input.mp4 \
      -c:a copy -c:v h264 -vf scale=1920:1080 -b:v 5M output_1080.mp4 \
      -c:a copy -c:v h264 -vf scale=1280:720 -b:v 5M output_720.mp4 \
      -c:a copy -c:v h264 -vf scale=640:480 -b:v 5M output_480.mp4
    表 1. 參數說明

    參數

    說明

    -c:a copy

    無需任何重新編碼即可複製音頻流。

    -c:v h264

    為輸出資料流選擇軟體H.264編碼器。

    -b:v 5M

    將輸出位元速率設定為5 Mb/s。

  • GPU轉碼命令

    • 單路轉碼(1∶1)

      docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -c:v h264_nvenc -vf scale_cuda=1920:1080:1:4 -b:v 5M output.mp4
    • 多路轉碼(1∶N)

      docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg \
      -y -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
      -c:a copy -c:v h264_nvenc -vf scale_npp=1920:1080 -b:v 5M output_1080.mp4 \
      -c:a copy -c:v h264_nvenc -vf scale_npp=1280:720 -b:v 5M output_720.mp4 \
      -c:a copy -c:v h264_nvenc -vf scale_npp=640:480 -b:v 5M output_480.mp4
    表 2. 參數說明

    參數

    說明

    -hwaccel cuda

    選擇合適的硬體加速器。

    -hwaccel_output_format cuda

    將解碼的幀儲存在GPU記憶體中。

    -c:v h264_nvenc

    選擇NVIDIA硬體加速H.264編碼器。

準備工作

通過Function Compute控制台部署GPU應用

  1. 部署鏡像。

    1. 建Container Registry的企業版執行個體或個人版執行個體。

      推薦您建立企業版執行個體。具體操作步驟,請參見建立企業版執行個體

    2. 建立命名空間和鏡像倉庫。

    3. Container Registry控制台,根據介面提示完成Docker相關操作步驟。然後將上述樣本app.pyDockerfile推送至執行個體鏡像倉庫,檔案資訊,請參見通過ServerlessDevs部署GPU應用時/code目錄中的app.pyDockerfile

      db-acr-docker

  2. 建立GPU函數。具體操作步驟,請參見建立Custom Container函數

  3. 修改函數的執行逾時時間。

    1. 在目標函數的配置頁簽,在左側導覽列,選擇運行時,然後單擊運行時右側的編輯

    2. 運行時面板,修改執行逾時時間,然後單擊確定

    說明

    CPU轉碼耗時會超過預設的60s,因此建議您修改執行逾時時間為較大的值。

  4. 配置GPU預留執行個體。關於配置預留執行個體的具體操作,請參見配置預留執行個體

    配置完成後,您可以在規則列表查看預留的GPU執行個體是否就緒。即當前預留執行個體數是否為設定的預留執行個體數。

  5. 使用cURL測試函數。

    1. 在函數詳情頁面,單擊觸發器管理頁簽,查看觸發器的配置資訊,擷取觸發器的訪問地址。

    2. 在命令列執行如下命令,調用GPU函數。

      • 查看線上函數版本

        curl -v "https://tgpu-ff-console-tgpu-ff-console-ajezot****.cn-shenzhen.fcapp.run"
        {"function": "trans_gpu"}
      • 使用CPU進行轉碼

        curl "https://tgpu-ff-console-tgpu-ff-console-ajezot****.cn-shenzhen.fcapp.run" -H 'TRANS-MODE: cpu'
        {"result": "ok", "upload_time": 8.75510573387146, "download_time": 4.910430669784546, "trans_time": 105.37688875198364}
      • 使用GPU進行轉碼

        curl "https://tgpu-ff-console-tgpu-ff-console-ajezotchpx.cn-shenzhen.fcapp.run" -H 'TRANS-MODE: gpu'
        {"result": "ok", "upload_time": 8.313958644866943, "download_time": 5.096682548522949, "trans_time": 8.72346019744873}

執行結果

您可通過在瀏覽器中訪問以下網域名稱,查看轉碼後的視頻:

https://cri-zbtsehbrr8******-registry.oss-cn-shenzhen.aliyuncs.com/output.flv

本網域名稱僅為樣本,需以實際情況為準。