使用高比特率录制到 HDD 而非 SSD 会导致严重延迟

使用高比特率录制到 HDD 而非 SSD 会导致严重延迟

我正在尝试使用 OBS 进行离线录制,但当我将其写入传统硬盘时,即使硬盘的写入速度足够快(+40MB/s),它也会出现严重滞后。我尝试在相同的设置中增加缓冲区,但它们似乎与输出 IO 无关。到目前为止,我找不到任何可以提供帮助的 OBS/ffmpeg 设置。如何解决这个问题?

日志:https://paste.fedoraproject.org/paste/L9LoUWC0VRGdxGSYESD2kw

系统信息转储:https://paste.fedoraproject.org/paste/~OrQZas9rYhaHTtEgJpVfg

日志显示了一个简单的速度测试,使用 dd(通过 WSL)和 OBS 日志显示了两个记录,唯一的区别是保存位置。如图所示,录制到 HDD(D:)滞后/丢失帧数相当多。相比之下,第一次录制到 SSD 的工作正常。请注意,OBS 没有记录skipped frames due to encoding lag第一次录制,因为它没有出现问题。

我做到了:

  • 测试几次,以便日志显示一个有代表性的示例。
  • 使用不同的缓冲区大小进行编码测试,没有效果。
  • 如果是 CBR,则用 CRF 而不是 CRF 进行测试。
  • 尝试了较低的比特率。在 10k 比特率下已经可以看到不太严重的延迟。

要明确的是:

  • 没有 CPU 瓶颈。
  • 没有 HDD 整体写入速度瓶颈(60k 比特率约为 8 MB/s,还可以)。

我认为问题是:写入延迟太高而输出缓冲区太小,这可能是 OBS 或 ffmpeg 中的错误,或者只是我不知道的缺少设置。

我问了这个问题r/观察前。

更新:增加了系统信息转储和额外的记录日志信息。

答案1

如果它走路像鸭子、叫声也像鸭子……

问题在于 USB2 连接及其末端的驱动器。

虽然 USB2 比某些东西更快,但它比大多数东西慢,并且通常不足以进行任何实时媒体操作。

您的指标可能表明带宽足够,可能的原因是纯数据流没有考虑到通过该链路来回的所有通信,并且测试通常经过优化并且不代表真实世界的数据类型和情况。

USB3 驱动器可能足以满足您的要求。

答案2

谢谢苏奇曼对于这个提示。

Windows 上默认禁用外部磁盘的写入缓存。启用它确实解决了该问题。

Windows 设备管理器中的对话框窗口图像

这仍然不是最好的解决方案,因为在这种情况下 OBS/ffmpeg 应该有自己的写入缓存。

相关内容