此命令非常适合将网络摄像头流保存到文件:
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 -