如何使用FFmpeg同时录制和预览视频?

5
我希望能够从像网络摄像头这样的DirectShow设备中捕获视频+音频并将其流式传输到RTMP服务器。这部分没有问题。但是问题在于我想要能够预览它。经过很多搜索,有人说通过使用tee混合器来管道输入到ffplay。但我无法使其工作。这是用于流式传输到RTMP服务器的代码。我应该如何更改它?
ffmpeg -rtbufsize 8196k -framerate 25 -f dshow -i video="Microsoft® LifeCam Studio(TM)":audio="Desktop Microphone (Microsoft® LifeCam Studio(TM))" -vcodec libx264 -acodec aac -strict -2 -b:v 1024k -b:a 128k -ar 48000 -s 720x576 -f flv "rtmp://ip-address-of-my-server/live/out"

https://ffmpeg.org/ffmpeg-formats.html#tee - aergistal
谢谢,终于我让它正常工作了。 - mahdi gh
2个回答

4

以下是我使用的最终代码,它可以正常工作。

ffmpeg -rtbufsize 8196k -framerate 25 -f dshow -i video="Microsoft® LifeCam Studio(TM)":audio="Desktop Microphone (Microsoft® LifeCam Studio(TM))" -vcodec libx264 -acodec aac -strict -2 -f tee -map 0:v -map 0:a "[f=flv]rtmp://ip-address-and-path|[f=nut]pipe:" | ffplay pipe:

是的,我正在使用旧版本。除了nut之外,有更好的方法吗? - mahdi gh
你需要的实际核心命令是什么?例如,对于那些感兴趣的人来说,这是一个标准答案。 - Zimano

1
在Unix兼容系统(例如MacOS、BSD和GNU-Linux)上运行ffmpeg的核心命令非常简单。它是将ffmpeg的一个输出重定向或“管道”到ffplay。主要问题在于,如果输出没有可识别的文件扩展名,如.avi或.mkv,则ffmpeg无法自动检测媒体格式(或容器)。
因此,您应该使用选项-f指定格式。您可以使用ffmpeg -formats命令列出选项-f的可用选择。
在以下GNU / Linux命令示例中,我们从名为/dev/video0(可能是网络摄像头)的输入源记录。输入源也可以是常规文件。

ffmpeg -i /dev/video0 -f matroska - filename.mkv | ffplay -i -

对于非Unix用户来说,写成更少歧义的方式是使用特殊的输出说明符pipe

ffmpeg -i /dev/video0 -f matroska pipe:1 filename.mkv | ffplay -i pipe:0

上述命令足以生成预览。但为了确保您获得所需的视频和音频质量,还需要指定音频和视频编解码器等其他参数。

ffmpeg -i /dev/video -c:v copy -c:a copy -f matroska - filename.mkv | ffplay -i -

如果选择Google的AV1等慢编解码器,则仍将获得预览,但会出现卡顿。

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