DirectShow捕获源和FFMPEG

5
我有一张AJA捕获卡。随卡安装的驱动程序包括一些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个回答

7
我是这个过滤器的开发人员。
实际上,相同的设备用于音频和视频流。此外,两个流的数据都是一个函数调用的结果。在其他卡(例如DeckLink)中将其分为单独的音频和视频过滤器是人为的(它们必须内部连接)。划分的可能原因是试图简化图表。但是,这可能会导致其他问题(使用来自不同设备的流)。
为什么ffmpeg不能使用同一过滤器的引脚 - 对我来说不清楚。这是ffmpeg开发人员的问题。
关于只有一个实例访问 - 使用非常旧的AJA Capture Source过滤器版本。该过滤器的最新版本允许同时创建多个实例(但只能有一个实例处于“播放”状态)。请检查AJA网站以下载过滤器的最新版本。如果您想要检查AJA过滤器的最新测试版本,请写信给我support@avobjects.com。

4

在追踪FFmpeg源代码后,我们发现它无法连接到dshow源上的多个引脚。因此,我们没有修改FFmpeg源代码,而是通过两个虚拟捕获源将AJA源引脚进行了连接以实现所需的结果。


请分享您的命令。我希望连接到音频引脚,但是我找不到示例。 - Max
我在这里发布了一个问题:http://stackoverflow.com/questions/19113197/ffmpeg-directshow-capture-2-pins - Max
谢谢@rogerdpack,但那个项目很久以前就完成了,我不再拥有硬件或源代码的访问权限。 - Juan Ayala

3

最近在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或在此处发表评论。


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"

已经尝试过了。问题在于“AJA Capture Source”过滤器对硬件具有独占访问权限,因此只能有一个实例。因此,如果我尝试像video="AJA Capture Source":audio="AJA Capture Source"这样的东西,它将连接视频并在音频上失败。如果AJA有一个专用于音频和一个专用于视频的过滤器,那就太好了,但是现在似乎没有办法告诉ffmpeg连接到引脚而不是过滤器。 - Juan Ayala
所以你可以做其中之一,但不能同时做两件事吗? - rogerdpack
是的,要么这个,要么那个。我甚至可以接收一个属于网络摄像头麦克风的过滤器。在这种情况下,AJA过滤器在DirectShow下既是“视频捕获源”,又是“音频捕获源”,一次只有一个实例可以访问硬件。在常规的DirectShow设置中,单个实例具有所有相关引脚,这通常不会成为问题,但ffmpeg似乎是按设备而非引脚设置的。 - Juan Ayala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接