网站首页 > 文章精选 正文
最近的项目中有这样一个功能需求,就是通过海康的摄像头录制一段视频,其实,海康官方提供的提供的SDK中有关于视频录制的接口,但是SDK都是x86和64的,没有支持arm的版本。为了实现这个录制视频功能,考虑了这样一个实现方案就是利用ffmpeg将摄像头的rtsp视频流存储为mp4文件。这里就用到一个工具ffmpeg。这篇文章主要分为几个部分吧:
1.介绍一下什么时ffmpeg。
2.再windows,ubuntu,及arm版linux上如何安装ffmpeg。
3.介绍一下ffmpeg如何将视频流转保存MP4文件。
4.如何通过python的ffmpy库使用ffmpeg。
1.什么是ffmpeg
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。简单说来就是我们可以用它来进行视频的编解码,可以将视频文件转化为视频流,也可以将视频流转存储为视频文件。还有一个重点就是它是开源的。
2.如何安装ffmpeg
ffmpeg是开源的,也就说我们可以通过源码进行编译安装,它的官网也提供了已经编译好的可用程序。windows下的安装我们介绍一下如何直接下载可执行程序比较简单,Linux下我们介绍一下如何进行编译安装,相对来说复杂那么一点点。
1.windows下载安装
windows下的下载路径:https://ffmpeg.zeranoe.com/builds/,界面如图所示:
我们可以根据自己需要选择对应的版本,这里需要说明的即使图里面关于Static,Share和Dev的差别
Static版本中的exe体积较大,那是因为相关的Dll都已经编译进exe里面去了。
Shared版本中exe的体积相对小很多,是因为它们运行的时候还需要到相关的dll中调用相应的功能
Dev版本用于开发,里面包含了库文件xxx.lib以及头文件xxx.h
我们如果只是为了使用的话选择Static版本就可以。
下载完成后解压下载的压缩包,在bin目录下有3个程序,如下图所示:
我们可以在这个目录下直接打开cmd直接使用,为了使用方便,我们也可以将解压的目录添加到系统环境变量中。
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~
2.Linux下交叉编译安装
首先下载源码,解压,进入解压目录执行
./configure --enable-shared --prefix=/opt/ffmpeg
这里--prefix=/opt/ffmpeg是指定安装目录,我们可以自行修改。一般来说这时候会报错:
yasm/nasm not found or too old. Use --disable-yasm for a crippled build.
If you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.log" produced by configure as this will help
solve the problem.
提示我们缺少yasm这个东西,我们先安装一下:
apt-get install yasm
那这是一个什么东西呢?
因为没有一个好的免费的x86系例的汇编器可以使用,gas是免费的但是是用于给gcc提供服务,没有纠错相关的扩展。所以,创造了NASM。NASM全称The Netwide Assembler,是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。NASM停止更新后,产生了Yasm。Yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集。Mac下也有。在FFmpeg配置环境的时候需要用到它。从这段信息我们知道它支持x86和AMD64指令集,所以在ARM下不用安装。
然后继续执行
./configure --enable-shared --prefix=/opt/ffmpeg
时间稍长,完成之后执行编译,编译安装。
make&make install
编译时间稍长,耐心等待,安装完成之后可以在我们的安装目录下找到我们的编译程序。如下图:
我们可以在bin目录下直接运行ffmpeg程序,这是可能会提示我们找不到相关的依赖库,这时我们要把lib目录的路径给写到/etc/ld.so.conf.d/某个配置文件下,执行ldconfig命令。
当然为了方便以后使用我们也可以将bin目录添加到系统的环境变量中
3.利用ffmpeg将视频流保存为MP4
其实就是一条命令
ffmpeg -t 10 -i rtsp://admin:zhy12345@192.168.33.20:554/Streaming/Channels/101 "e:/1.mp4"
-t:可以设置我们保存多长时间
-i: 指明了我们的视频流地址,它的功能很强大,这里只是简单介绍一下自己用到的功能。
4.利用ffmpy库调用ffmpeg
当我们在程序里需要使用ffmpeg的功能的时候,对于python开发者我们可以通过ffmpy来调用ffmpeg,不得不承认python语言的易用性真的很好。
在安装完成ffmpeg之后,我们可以通过pip安装ffmpy
pip install ffmpy
安装完成之后就可以使用了
from ffmpy import FFmpeg
ff = FFmpeg(inputs={'rtsp://admin:zhy12345@192.168.33.20:554/Streaming/Channels/101': ['-t', '15']},
outputs={'e:/2.mp4': None})
print(ff.cmd)
ff.run()
这段代码的效果,就和我们直接执行上面行命令效果是一样的。
原文 ffmpeg安装方式及配合python使用_ffmpeg is not installed!_SHI.L的博客-CSDN博客
- 上一篇: 如何修改容器时间而不改变宿主机时间?
- 下一篇: 实用 | 一个高性能通信库的简单使用分享
猜你喜欢
- 2025-01-10 centos 7 升级OpenSSH
- 2025-01-10 Linux动态库和静态库教程
- 2025-01-10 Linux入门系列——软件包管理
- 2025-01-10 AI模型搭建-3
- 2025-01-10 AI模型搭建-2
- 2025-01-10 在深度Linux玩Windows游戏,可以这样安装wine的最新版
- 2025-01-10 ubuntu24.04 vscode调用 c++ opencv报错问题
- 2025-01-10 Nginx使用Lua-nginx模块脚本连接Redis数据库读取静态资源
- 2025-01-10 实用 | 一个高性能通信库的简单使用分享
- 2025-01-10 如何修改容器时间而不改变宿主机时间?
- 04-23关于linux coreutils/sort.c源码的延展思考最小堆为什么不用自旋
- 04-23一文精通如何使用二叉树
- 04-23二叉树(Binary Tree)
- 04-23数据结构入门:树(Tree)详细介绍
- 04-23数据结构错题收录(六)
- 04-23Kubernetes原理深度解析:万字图文全总结!
- 04-23一站式速查知识总结,助您轻松驾驭容器编排技术(水平扩展控制)
- 04-23kubectl常用删除命令
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)