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

使用FFmpeg.AutoGen的avformat_open_input调用USB摄像头报文件不存在错误

问题原因及解决方案

你遇到的问题核心是FFmpeg命令行与API调用的参数解析逻辑差异:

命令行中shell会自动处理引号,把video="GENERAL WEBCAM"作为一个完整的输入源传递给FFmpeg;但直接调用avformat_open_input时,没有shell来解析引号,导致带空格的设备名被FFmpeg拆分成多个部分,无法正确识别。

解决方法

你需要给带空格的设备名加上双引号,并在C#中正确转义,或者用URL编码替换空格,两种方式任选其一:

方式1:转义双引号(推荐)

使用C#的逐字字符串或者转义字符,让FFmpeg的dshow demuxer识别完整的设备名:

// 逐字字符串写法(无需转义双引号)
string deviceUrl = @"video=""GENERAL WEBCAM""";
// 或者普通字符串转义写法
string deviceUrl = "video=\"GENERAL WEBCAM\"";

// 调用API
int result = ffmpeg.avformat_open_input(&pFormatContext, deviceUrl, ffmpeg.av_find_input_format("dshow"), null);

方式2:URL编码空格

把设备名中的空格替换为%20,避免解析歧义:

string deviceUrl = "video=GENERAL%20WEBCAM";
int result = ffmpeg.avformat_open_input(&pFormatContext, deviceUrl, ffmpeg.av_find_input_format("dshow"), null);

为什么之前的写法不行?

  • 只传GENERAL WEBCAM:dshow demuxer无法识别这是视频设备,需要明确指定video=前缀
  • 传video=GENERAL WEBCAM:因为有空格,FFmpeg会把WEBCAM当成额外的参数,无法识别为完整的设备名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:27:24