ffmpeg-slow-processing-problem
側邊欄位置:2
如何解決FFmpeg影片編輯錄製延遲、影片長度減少、CPU 100%問題
在即時錄影伺服器上使用FFmpeg編輯(錄製)影片時,出現錄製延遲問題。在某些電腦上同時錄製的影片會更短。我們先來看看問題發生的情況、產生的原因以及解決的過程。
問題狀況
- 有多個伺服器用於錄製即時視訊。
- 基於 Spring Boot 和 Kotlin 的伺服器正在執行
- 每個伺服器執行使用FFmpeg錄製輸入視訊檔案的功能
- 每台伺服器的規格略有不同(請勿使 用相同的硬體或相同的實例)
:::資訊 FFmpeg 是一個在 Michael Niedermayer 的領導下開發的開源項目,其目標是對所有影片、音樂和照片格式進行解碼和編碼。詳細來說,它是一個扮演以下角色的程式。
- 開源:FFmpeg是一個開源的視訊和音訊處理工具,任何人都可以免費使用和修改。
- 多平台:FFmpeg 可在 Windows、macOS、Linux 和許多其他作業系統上運作。
- 支援多種格式:FFmpeg支援數百種格式。它能夠對視訊、音訊、影像和其他多媒體資料進行編碼、解碼、轉換和串流。
- 視訊和音訊編碼/解碼:FFmpeg支援幾乎所有主流視訊和音訊編解碼器。這意味著用戶可以對多種格式的視訊和音訊檔案進行編碼和解碼。
- 串流:FFmpeg提供了即時串流視訊和音訊的能力。這可用於建立媒體伺服器或向線上串流平台提供內容。
- 濾鏡和效果:FFmpeg 提供了各種視訊和音訊濾鏡來幫助您編輯和增強內容。例如,您可以調整大小、裁切、旋轉、校正顏色和消除雜訊。
- 命令列介面:FFmpeg 透過命令列介面使用。它允許您使用簡單的命令執行各種多媒體任務,是自動化和批次的理想選擇。
- 庫形式:FFmpeg 也以庫形式提供,允許其他應用程式使用其多媒體功能。它可用於影片編輯軟體、媒體播放器、串流媒體伺服器等。 :::
## 問題
- 在某些伺服器中,視訊編碼看起來比記錄的長度短。
- 檢查各種原因排查問題並檢查伺服器規格和系統資源使用如CPU、顯示卡和記憶體
- 確認問題環境下的伺服器與正常運作下的伺服器的系統資源使用率不同 。
- 正常:CPU使用率沒有明顯變化,顯示卡使用率從0%增加到30-40%。
- 異常:CPU持續使用100%,顯示卡使用率不增加
- 各環境比較時,有以下差異
- 正常:配備 Nvidia 外置顯示卡的環境。也可以在此環境中檢查現有的開發
- 異常:僅配備Intel內建顯示卡的伺服器
- 在一段時間內使用 CPU 100% 處理視訊而不使用顯示卡的系統中,假設由於處理無法在指定時間內完成而導致視訊被縮短。**
- 在程式碼中,錄音功能設定為運行一段時間。
## 解決
- 我尋找一種使用英特爾內建顯示卡的方法。
- 我不知道Intel的內建顯示卡效能非常好。
- 然而,我認為如果我劃分工作而不是使用 100% 的 CPU,它的工作效率會更高。
ffmpeg-編解碼器

* 使用上述命令,您可以檢查目前安裝的 ffmpeg 的可用編解碼器,如上所示。
* 錄製時,每台伺服器均使用 H.264 編解碼器,配備 Nvidia 顯示卡的型號使用「h264_nvenc」編碼器。
* 僅配備 Intel 整合式顯示卡的型號無法使用 `h264_nvenc`。我使用了“libx264”或“libopenh264”編碼器,它們是基於軟體(使用CPU)的方法。
* 此時使用`h264_qsv`時,**CPU佔用率連10%都沒有增加,而之前未使用的內建顯示卡的使用率卻增加了30%左右**。 **錄音時間沒有減少,現在是正常長度。**
* 不過,由於編碼器不同,不同顯示卡下的兩個影片的品質似乎有些不同。
* 我了解到只有充分利用每個伺服器的硬體特性才能實現正常的軟體操作,並且即使在硬體不同的情況下也有必要提前檢查。
:::資訊
H.264 是 2003 年發布的影片標準編解碼器。它是比現有的MPEG-4 Part 2更先進的視訊編碼,因此也被稱為AVC(高級視訊編碼)。它不僅具有良好的壓縮率,而且即使在相對較低的比特率下也具有良好的圖像質量,因此被用於許多服務中。
:::