如何同时显示和捕获网络摄像头流?

如何同时显示和捕获网络摄像头流?

此命令非常适合将网络摄像头流保存到文件:

ffmpeg -f alsa -i default -itsoffset 00:00:00 -f video4linux2 -s 1280x720 -r 25 -i /dev/video0  out.avi

我该如何在我的计算机屏幕上同时显示这个捕获的流?

答案1

我来这里寻找相同的命令,@llogan 的命令有效,但没有音频。这是我开始用来捕捉高质量视频和音频的命令。

ffmpeg -f v4l2 \
    -framerate 30 \
    -video_size 1024x768 \
    -input_format mjpeg \
    -i /dev/video0 \
    -f alsa \
    -i hw:2,0 \
    -c:a pcm_s16le \
    -c:v mjpeg \
    -b:v 64000k \
    output.avi \
    -map 0:v \
    -vf "format=yuv420p" \
    -f xv display

也许您想将视频视为镜像。如果是这样,您必须添加hflip视频滤镜。使用-vf "format=yuv420p,hflip"

我更喜欢使用 pulseaudio 作为音频输入,这样我就可以随时更改它pavucontrol。而不是-f alsa -i hw:2,0,我使用-f pulse -i alsa_input.usb-046d_HD_Pro_Webcam_C920_22F75AFF-02.analog-stereo它作为我的网络摄像头麦克风。要知道您的音频源输入是什么,请检查这里

来源:@llogan 的回答和ffmpeg 文档

[编辑]:我将部分代码更改为摆脱 1 秒延迟生成。此-f tee方法与该选项不同,它直接编码为文件,将格式更改为yuv420p(显示器接受)并用于-f xv display将视频显示到屏幕上。

答案2

使用三通复用器

ffmpeg -f v4l2 -i /dev/video0 -map 0 -c:v libx264 -f tee "output.mp4|[f=nut]pipe:" | ffplay pipe:

答案3

只需用管道ffplay它捆绑了ffmpeg包裹。

如上所述llogan,使用球座复用器/解复用器(又名)容器!

# Redirect the 'ffmpeg' ouput to 'ffplay' input
ffmpeg -f alsa -i default -itsoffset 00:00:00 -f video4linux2 -s 1280x720 -r 25 -i /dev/video0 -f tee "out.avi|[f=nut]-" | ffplay -

相关内容