跳至正文

ffmpeg-slow-processing-problem


侧边栏位置:2

如何解决FFmpeg视频编辑录制延迟、视频长度减少、CPU 100%问题

在实时视频录制服务器上使用FFmpeg编辑(录制)视频时,出现录制延迟问题。在某些计算机上同时录制的视频会更短。我们先看一下问题发生的情况、产生的原因以及解决的过程。

问题情况

  • 有多个服务器用于录制实时视频。
    • 基于 Spring Boot 和 Kotlin 的服务器正在运行
  • 每个服务器执行使用FFmpeg录制输入视频文件的功能
  • 每台服务器的规格略有不同(请勿使用相同的硬件或相同的实例)

:::信息 FFmpeg 是一个在 Michael Niedermayer 的领导下开发的开源项目,其目标是对所有视频、音乐和照片格式进行解码和编码。详细来说,它是一个扮演以下角色的程序。

  1. 开源:FFmpeg是一个开源的视频和音频处理工具,任何人都可以免费使用和修改。
  2. 多平台:FFmpeg 可在 Windows、macOS、Linux 和许多其他操作系统上运行。
  3. 支持多种格式:FFmpeg支持数百种格式。它能够对视频、音频、图像和其他多媒体数据进行编码、解码、转换和流传输。
  4. 视频和音频编码/解码:FFmpeg支持几乎所有主流视频和音频编解码器。这意味着用户可以对多种格式的视频和音频文件进行编码和解码。
  5. 流式传输:FFmpeg提供了实时流式传输视频和音频的能力。这可用于构建媒体服务器或向在线流媒体平台提供内容。
  6. 滤镜和效果:FFmpeg 提供了各种视频和音频滤镜来帮助您编辑和增强内容。例如,您可以调整大小、裁剪、旋转、校正颜色和消除噪点。
  7. 命令行界面:FFmpeg 通过命令行界面使用。它允许您使用简单的命令执行各种多媒体任务,是自动化和批处理的理想选择。
  8. 库形式:FFmpeg 也以库形式提供,允许其他应用程序使用其多媒体功能。它可用于视频编辑软件、媒体播放器、流媒体服务器等。 :::

## 问题

  • 在某些服务器中,视频编码看起来比记录的长度短
    • 检查各种原因排查问题并检查服务器规格和系统资源使用情况如CPU、显卡和内存
  • 确认问题环境下的服务器与正常运行下的服务器的系统资源使用率不同。
    • 正常:CPU使用率没有明显变化,显卡使用率从0%增加到30-40%。
    • 异常:CPU持续使用100%,显卡使用率不增加
  • 各个环境比较时,有如下差异
    • 正常:配备 Nvidia 外置显卡的环境。也可以在此环境中检查现有的开发
    • 异常:仅配备Intel内置显卡的服务器
  • 在一段时间内使用CPU 100% 处理视频而不使用显卡的系统中,假设由于处理无法在指定时间内完成而导致视频被缩短。 **
    • 在代码中,录音功能设置为运行一段时间。

## 解决

  • 我寻找一种使用英特尔内置显卡的方法
    • 我不知道Intel的内置显卡性能非常好。
    • 然而,我认为如果我划分工作而不是使用 100% 的 CPU,它的工作效率会更高。

ffmpeg-编解码器


![图片](/img/2024/2024-04-03-13-22-53.png)

* 使用上述命令,您可以检查当前安装的 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(高级视频编码)。它不仅具有良好的压缩率,而且即使在相对较低的比特率下也具有良好的图像质量,因此被用于许多服务中。
:::