使用最少的CPU处理时捕获avconv/ffmpeg网络摄像头

ssi*_*fod 1 ffmpeg video-capture libav avconv webcam-capture

我有一个关于avconv(或ffmpeg)用法的问题.

我的目标是从网络摄像头捕获视频并将其保存到文件中.另外,我不想使用太多的CPU处理.(我不希望avconv扩展或重新编码流)

所以,我正在考虑使用来自网络摄像头的压缩mjpeg视频流并直接将其保存到文件中.

我的网络摄像头是Microsoft LifeCam HD 3000,它的功能是:

ffmpeg -f v4l2 -list_formats all -i /dev/video0

Raw: yuyv422 : YUV 4:2:2 (YUYV) : 640x480 1280x720 960x544 800x448 640x360 424x240 352x288 320x240 800x600 176x144 160x120 1280x800

Compressed: mjpeg : MJPEG : 640x480 1280x720 960x544 800x448 640x360 800x600 416x240 352x288 176x144 320x240 160x120
Run Code Online (Sandbox Code Playgroud)

什么是avconv命令直接保存压缩流而不使用avconv进行缩放或重新编码.

现在,我正在使用此命令:

avconv -f video4linux2 -r 30 -s 320x240 -i /dev/video0 test.avi
Run Code Online (Sandbox Code Playgroud)

我不确定这个命令是否具有CPU效率,因为我没有告诉任何地方使用网络摄像头的mjpeg压缩功能.

在开始记录文件之前,avconv是否负责配置网络摄像头设置?它始终是原始流的工作,并在原始流上进行缩放和enconding吗?

感谢您的回答

aer*_*tal 6

阅读实际文档 ™是您在现实生活中最接近魔术的东西:

video4linux2,v4l2

input_format

设置首选像素格式(对于原始视频)或编解码器名称.此选项允许用户在有多个输入格式可用时选择输入格式.

video_size

设置视频帧大小.参数必须是WIDTHxHEIGHT形式的字符串或有效大小的缩写.

该命令用于-c:v copy复制接收的编码而不触及它,因此实现了最低的资源使用:

ffmpeg -f video4linux2 -input_format mjpeg -video_size 640x480 -i /dev/video0 -c:v copy <output>
Run Code Online (Sandbox Code Playgroud)