Ubuntu20.04安装ffmpeg,并捕获视频流

发布于:2024-06-02 ⋅ 阅读:(66) ⋅ 点赞:(0)

工控机:幻影峡谷
系统:Ubuntu20.04
摄像头:杰瑞微通环星光USB摄像头杰瑞微通环星光USB摄像头记录一下使用ffmpeg拉取视频流的原因:刚开始用的是ubuntu系统自带的 茄子 软件,但是视频流很卡(非常卡,基本上不能用),排查了是不是板卡、播流软件等因素,最终发现是播流软件 茄子 的原因,所以想到用ffmpeg来拉取视频流。测试之后,确实ffmpeg的拉流效果远好于茄子。
以下是使用ffmpeg的拉取的视频:

安装ffmpeg步骤

依次运行以下命令:

sudo apt update  
sudo apt install ffmpeg

在这里插入图片描述
安装完成后,通过运行ffmpeg -version来验证安装是否成功,并查看FFmpeg的版本信息。

ffmpeg -version

在这里插入图片描述上图表明,ffmpeg已经安装。

接入USB摄像头后,使用ffmpeg拉取视频流

查找可用的摄像头设备

在Ubuntu系统中,USB摄像头通常会被识别为/dev/videoX设备,其中X是一个数字。可以使用FFmpeg的-list_formats选项来查看可用的摄像头设备和它们支持的格式:

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

在这里插入图片描述上图表明已经成功运行了 ffmpeg 命令来列出 /dev/video0 设备上可用的视频格式。从输出中可以看到,Compressed和Raw部分列出了设备支持的视频格式和分辨率:Compressed: mjpeg 表示设备支持Motion-JPEG压缩格式,并且列出了支持的分辨率。Raw: yuyv422表示设备支持原始YUV格式(特别是YUYV 4:2:2)。Compressed: h264表示设备支持H.264压缩格式,也列出了支持的分辨率。

捕获摄像头的视频流

(1)如果想要捕获摄像头的视频流并将其保存为文件,例如保存为MP4格式,使用以下的命令:

ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast -crf 23 -y output.mp4

这个命令的含义是:

-f v4l2:指定输入格式为 Video4Linux2(Linux下USB摄像头常用的格式)。
-video_size 640x480:设置视频捕获的分辨率为 640x480。可以根据需要选择其他分辨率。
-i /dev/video0:指定输入设备为 /dev/video0。
-c:v libx264:指定视频编码器为 libx264,它将视频编码为 H.264 格式。
-preset ultrafast:设置 x264 编码器的预设为 ultrafast,以获得最快的编码速度(但可能牺牲一些压缩效率)。
-crf 23:设置 Constant Rate Factor(CRF)为 23,这是一个控制视频质量的参数。值越小,质量越好,但文件也会越大。
-y:如果输出文件已存在,则覆盖它。
output.mp4:输出文件的名称。

(2)如果想要实时查看摄像头的视频流而不保存为文件,使用 ffplay 命令(它是 FFmpeg 套件的一部分):
ffplay -f v4l2 -video_size 640x480 -i /dev/video0

验证

只是实时查看摄像头的视频流:
运行上述命令之后,右侧出现了摄像头的视频流如果想要将将 ffplay 命令写入一个 .sh 脚本文件中,以便直接运行该脚本来拉取视频流,按照以下步骤操作:

(1)创建一个新的文件,例如 view_video.sh。

(2)在文件中输入以下内容:
#!/bin/bash  
ffplay -f v4l2 -video_size 640x480 -i /dev/video0

第一行的 #!/bin/bash 是一个 shebang,它告诉系统该脚本应该使用哪个解释器来执行。在这个例子中,我们使用的是 bash shell。

(3)保存并关闭文件。

(4)为了让这个脚本可执行,需要添加执行权限。在终端中,使用 chmod 命令来添加权限:
chmod +x view_video.sh

(5)直接运行这个脚本来拉取视频流

./view_video.sh