You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg通过v4l2loopback转发视频时CPU占用100%求助

问题描述
  • 系统:Fedora 36/37
  • 硬件:i5-8600K、RTX 2060、16GB内存
  • 现象:使用FFmpeg将USB视频卡(/dev/video1)的视频转发到v4l2loopback设备(/dev/video0)时,CPU占用率达100%,系统卡顿严重,游戏帧率降至15FPS;此前相同操作几乎不影响性能
  • 尝试过的命令:
    # 初始命令
    ffmpeg -f video4linux2 -video_size 1920x1080 -input_format mjpeg -i /dev/video1 -f v4l2 -c copy /dev/video0
    # 添加参数后的命令
    ffmpeg -nostdin -threads 1 -f video4linux2 -video_size 1920x1080 -input_format mjpeg -i /dev/video1 -f v4l2 -preset fast -c:v copy /dev/video0
    
    上述命令均未改善CPU占用问题
问题分析与解决方案

核心原因:v4l2loopback设备不支持MJPEG格式,导致FFmpeg自动转码

你指定了-c:v copy试图直接拷贝MJPEG流,但如果v4l2loopback设备默认不支持MJPEG输出格式,FFmpeg会自动将MJPEG转码为设备支持的格式(如YUYV422),这一过程会占用大量CPU资源。

1. 确认v4l2loopback设备的格式支持

执行以下命令查看/dev/video0支持的视频格式:

v4l2-ctl --list-formats-ext -d /dev/video0

如果输出中没有MJPG(MJPEG)格式,说明设备不支持直接输出MJPEG,导致FFmpeg被迫转码。

2. 创建支持MJPEG的v4l2loopback设备

卸载原有v4l2loopback模块,重新加载并指定支持MJPEG格式:

sudo rmmod v4l2loopback
sudo modprobe v4l2loopback exclusive_caps=1 video_nr=0 card_label="Loopback" formats=MJPG
  • exclusive_caps=1:让设备被识别为视频捕获设备(部分应用需要此参数)
  • formats=MJPG:强制设备支持MJPEG格式

3. 简化FFmpeg命令(移除无效参数)

-preset fast是针对编码的参数,在-c:v copy(流拷贝)模式下完全无效;-threads 1反而可能限制FFmpeg的IO处理效率,建议移除:

ffmpeg -nostdin -f video4linux2 -video_size 1920x1080 -input_format mjpeg -i /dev/video1 -f v4l2 -c:v copy /dev/video0

4. 排查FFmpeg或v4l2loopback版本变化

  • 若你近期更新过FFmpeg,可尝试回退到之前的版本测试,确认是否是版本更新导致的行为变化(比如FFmpeg对v4l2设备格式兼容性的调整)
  • 同步更新v4l2loopback到最新版本,修复可能存在的格式支持bug

5. 其他辅助优化

  • 增加v4l2loopback缓冲区:加载模块时添加max_buffers=4,减少IO等待带来的CPU占用
  • 禁用FFmpeg的日志输出(减少CPU开销):添加-loglevel quiet参数
补充说明

如果确认v4l2loopback设备已支持MJPEG,但CPU仍高占用,可检查USB视频卡的读取效率:

  • 执行ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video1 -f null -测试纯读取流的CPU占用,若此时CPU已很高,可能是USB视频卡的驱动问题或USB带宽不足,可尝试降低分辨率测试。

内容的提问来源于stack exchange,提问作者didentifier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:55:16