一个源中的多个视频流 ffmpeg



我们正在尝试从两个网络摄像头发送实时流,如下所示:

ffmpeg -f video4linux2 -i /dev/video0 -f video4linux2 -i /dev/video1 http://127.0.0.1:8090/feed1.ffm

我们希望使用任何可用的播放器播放这两个流。当我们使用 VLC 打开流时,我们只得到一个流(来自/dev/video0)。命令如下:

vlc http://127.0.0.1:8090/test.mpg

在这里,我在我的机器上运行 ffserver,并尝试以本地主机身份访问。我的ffserver配置如下:

Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
NoDaemon
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 1G
ACL allow 127.0.0.1
</Feed>
<Stream test.mpg>
# coming from live feed 'feed1'
Feed feed1.ffm
Format mpeg
VideoBufferSize 40000
VideoSize 1280x720
VideoCodec mpeg1video
NoAudio
ACL ALLOW 127.0.0.1
</Stream>
<Stream stat.html>
Format status
# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
#FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico
</Stream>

# Redirect index.html to the appropriate site
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>

如果我们尝试以下命令将两个流保存到文件中,我们将获得两个 VLC 播放器实例,并且可以看到两个流:

ffmpeg -f video4linux2 -i /dev/video0 -f video4linux2 -i /dev/video1 /home/2Streams.mpg

这是一种奇怪的行为,我能够将两个视频流保存为一个文件,但我无法在一个单一提要中发送两个视频流。请帮助我实现相同的目标。

问候

可以

考虑使用 ffmpeg 的叠加过滤器并排显示两个视频流或画中画(假设两个视频源的分辨率均为 320x240),如下所示:

ffmpeg -i... -i... -filter_complex "nullsrc=size=640x240 [base]; [base][0:v] overlay [tmp]; [tmp][1:v] overlay=x=320" output.mpg

但是,文档指出,在存在 2 个或更多相同类型的输入流的情况下,ffmpeg 选择"更好"的一个并使用它来编码输出。这就是VLC显示单个流的原因。

我对你是如何设法将两个流保存到一个文件(你的最后一个代码片段)中的有点困惑。当我需要做这样的事情时,我使用 -map 选项,例如:

ffmpeg -i... -i... -map 0:0 -map 1:0 output.mkv

希望这有帮助。

最新更新