DirectShow捕获源和FFMPEG

时间:2013-05-17 22:15:08

标签: ffmpeg directshow video-capture

我有一张AJA Capture卡。随卡安装的驱动程序包括一些DirectShow过滤器。如果我将过滤器弹出到GraphEdit中,我会看到:

AJA Capture Filter in GraphEdit

如果我运行ffmpeg命令

ffmpeg -f dshow -list_options true -i video="AJA Capture Source"

我看到了

[dshow @ 0034eec0] DirectShow video device options
[dshow @ 0034eec0]  Pin "Video"
[dshow @ 0034eec0]   pixel_format=yuyv422  min s=720x486 fps=27.2604 max s=1024x
486 fps=29.985
...
[dshow @ 0034eec0]  Pin "Audio 1-2"
[dshow @ 0034eec0]  Pin "Line21"
video=AJA Capture Source: Immediate exit requested

所以我看到了我需要的视频和音频引脚。但是当我尝试运行ffmpeg命令捕获两者时,我只能弄清楚如何处理视频部分。如何连接到该音频引脚?似乎所有示例和文档都指向使用单独的音频设备,而不是挂钩到引脚。我现在就像批处理文件一样运行它,我使用^来打破这一行

ffmpeg.exe ^
-y ^
-rtbufsize 100M ^
-f dshow ^
-i video="AJA Capture Source" ^
-t 00:00:10 ^
-aspect 16:9 ^
-c:v libx264 ^
"C:\VCS_AUD_SAMPLE.mp4"

同样,上面的命令会给我一些漂亮的视频,但我无法弄清楚音频部分。这甚至在ffmpeg中支持还是我将不得不修改ffmpeg dshow代码?

4 个答案:

答案 0 :(得分:4)

我是此过滤器的开发者。

实际上,同一设备用于音频和视频流。而且,两个流的数据都是一个函数调用的结果。在其他卡(例如DeckLink)中使用单独的音频和视频滤波器进行划分是人为的(它们必须在内部连接)。划分的可能原因 - 尝试简化图表。但是,这可能会导致其他问题(使用来自不同设备的流)。

为什么ffmpeg无法使用相同滤镜的引脚 - 我不清楚。 ffmpeg开发人员的这个问题。

仅关于一个实例访问 - 使用了非常旧版本的AJA Capture Source过滤器。更新版本的过滤器允许您同时创建多个实例(但只有一个实例可能处于“播放”状态)。请检查AJA网站以下载最新版本的过滤器。如果您想查看最新的AJA过滤器测试版,请发送电子邮件至support@avobjects.com

答案 1 :(得分:2)

因此,在跟踪FFmpeg的源代码之后,它被认为无法连接到dshow源上的多个引脚,因此我们不是修改FFmpeg源,而是通过两个虚拟捕获源管理AJA源引脚以实现期望的结果。

答案 2 :(得分:2)

好的支持这个(希望)最近在FFmpeg dshow中添加了,你现在可以指定ffmpeg -f dshow -i video="AJA Capture Source":audio="AJA Capture Source"并且它可以工作。

如果需要,甚至还有新的参数可供您选择要使用的引脚。 https://www.ffmpeg.org/ffmpeg-devices.html#dshow

如果它对某人/任何人不起作用,请告诉我rogerdpack@gmail.com或在这里发表评论。

答案 3 :(得分:1)

来自http://ffmpeg.org/trac/ffmpeg/wiki/DirectShow

  

此注释“输入字符串的格式为video=<video device name>:audio=<audio device name>

所以试试

ffmpeg.exe -f dshow -i "video=AJA Capture Source:audio=audio source name"