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

工控机:幻影峡谷

系统:Ubuntu20.04

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

以下是使用ffmpeg的拉取的视频:

安装ffmpeg步骤

依次运行以下命令:

bash 复制代码
sudo apt update  
sudo apt install ffmpeg

安装完成后,通过运行ffmpeg -version来验证安装是否成功,并查看FFmpeg的版本信息。

bash 复制代码
ffmpeg -version

上图表明,ffmpeg已经安装。

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

查找可用的摄像头设备

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

bash 复制代码
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格式,使用以下的命令:

bash 复制代码
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)在文件中输入以下内容:
bash 复制代码
#!/bin/bash  
ffplay -f v4l2 -video_size 640x480 -i /dev/video0

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

复制代码
(3)保存并关闭文件。

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

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

bash 复制代码
./view_video.sh
相关推荐
梧桐樹下21 分钟前
FFmpeg avformat_open_input函数分析
ffmpeg
道剑剑非道24 分钟前
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
开发语言·qt·ffmpeg
IOsetting25 分钟前
Ubuntu24.04 交叉编译 aarch64 ffmpeg
ffmpeg
却道天凉_好个秋27 分钟前
ffmpeg(三):处理原始数据命令
ffmpeg
@残梦31 分钟前
129、QT搭建FFmpeg环境
开发语言·qt·ffmpeg
y1x2y36 小时前
【HITCSAPP 哈工大计算机系统期末大作业】 程序人生-Hello’s P2P
linux·程序人生·ubuntu
后端木木7 小时前
一键 Ubuntu、Debian、Centos 换源(阿里源、腾讯源等)
ubuntu·centos·debian
Aaron.Ma11 小时前
ubuntu自定义服务自动启动
linux·服务器·ubuntu
乐观主义现代人12 小时前
centos 9/ubuntu 一次性的定时关机
linux·ubuntu·centos
无聊的小坏坏1 天前
Linux 进程调度与管理:从内核管理到调度机制的深度解析
linux·ubuntu