ffmpeg DirectShow捕获2个引脚

时间:2013-10-01 09:55:43

标签: ffmpeg directshow video-capture audio-capture

这是ffmpeg DirectShow选项

 DirectShow video device options
  Pin "Capture"
   pixel_format=yuyv422  min s=720x480 fps=59.9402 max s=720x480 fps=59.9402
   pixel_format=yuyv422  min s=720x480 fps=29.97 max s=720x480 fps=29.97
   pixel_format=yuyv422  min s=720x576 fps=50 max s=720x576 fps=50
   pixel_format=yuyv422  min s=720x576 fps=25 max s=720x576 fps=25
   pixel_format=yuyv422  min s=640x480 fps=59.9402 max s=640x480 fps=59.9402
   pixel_format=yuyv422  min s=1920x1080 fps=29.97 max s=1920x1080 fps=29.97
   pixel_format=yuyv422  min s=1920x1080 fps=25 max s=1920x1080 fps=25
   pixel_format=yuyv422  min s=1920x1080 fps=24 max s=1920x1080 fps=24
   pixel_format=yuyv422  min s=1280x720 fps=59.9402 max s=1280x720 fps=59.9402
   pixel_format=yuyv422  min s=1280x720 fps=50 max s=1280x720 fps=50
  Pin "Audio"

什么ffmpeg命令会捕获两个Pins?

更新

我的设备名称为7160 HD Capture ffmpeg -f dshow -i video =“7160 HD Capture”out.mp4

以下命令正常工作: -

ffmpeg -f dshow -s 1280x720 -i video="7160 HD Capture" -rtbufsize 2000M out19.mp4

我试过

ffmpeg -f dshow -s 1280x720 -i "video=7160 HD Capture:audio=7160 HD Capture" -rtbufsize 2000M out20.mp4

它不起作用并返回错误: -

[dshow @ 000000000250b540] Could not enumerate audio devices. video=7160 HD Capture:audio=7160 HD Capture: Input/output error

我看到音频Pin在不同的卡片上有不同的名称。可能是我应该明确地命名它。

更新2

GraphEdit

我没有音频捕捉设备,但视频捕捉肯定有音频。

我能够在默认音频设备上播放该音频引脚

5 个答案:

答案 0 :(得分: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或在这里发表评论。

答案 1 :(得分:1)

ffmpeg.exe -f dshow -s 1920x1080 -i "video=Timeleak HD Capture (YPbPr):audio=Timeleak HD Capture (YPbPr)" -c:v libx264 -preset ultrafast -c:a ac3 -f mpegts udp://127.0.0.1:1234

答案 2 :(得分:0)

没有命令可以映射来自同一个过滤器实例的两个引脚。例如,执行以下命令:

ffmpeg.exe -f dshow -i "video=<src_filter_name>:audio=<src_filter_name>"
从图形上讲,它将创建“src_filter_name”的两个实例(由于你没有在你的问题中提供它,所以我记下了我所编写的名称)。如果您的过滤器很好,并且可以播放多个自身实例,那么您就可以了。

在图表编辑中尝试自己。将源滤波器放入两次,然后从第一个渲染音频引脚,从第二个渲染视频引脚。如果有效,则上述ffmpeg命令应该有效。

<强>更新

由于“7160 HD Capture”未列在“音频捕获源”下,因此ffm​​peg将无法看到它。 ffmpeg的写入方式只能从视频捕获源的第一个视频引脚读取视频,而从音频捕获源的第一个音频引脚读取音频。

所以你的选择是

  1. 通过修改源代码来改变ffmpeg连接dshow设备的方式
  2. 创建一个dshow接收器过滤器,您可以从7160 HD Capture设备发送音频和视频,然后创建一个源过滤器,可以充当ffmpeg的音频和视频源。这将需要一个进程或线程将数据推入接收器,以及一些如何使其可用于源。
  3. 不幸的是我没有共享的源代码,只是基本的想法。两种解决方案都是C ++。如果你知道并理解ffmpeg源代码,那么directshow方式可能更有用,ffmpeg方式可能更容易: - )

答案 3 :(得分:0)

使用timeleak中的最后一个驱动程序。

ffmpeg.exe -f dshow -s 1920x1080 -i "video=Timeleak HD Capture (YPbPr):audio=Timeleak HD Capture (YPbPr)" -f mpegts udp://127.0.0.1:1234

在VLC中打开udp:// @ 1234。

音频通过HDMI使用hd72a为我工作,我在HTTP中流式传输没有问题。

答案 4 :(得分:0)

您可以在DirectShow中复用2个捕获引脚,并使用此sink filter将多路复用的流发送到ffmpeg.exe。