最近的项目中有这样一个功能需求,就是通过海康的摄像头录制一段视频,其实,海康官方提供的提供的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/,界面如图所示:
![](https://img-blog.csdnimg.cn/img_convert/6716f7d8837a3f2d6ccafc90eb3a8afa.webp?x-oss-process=image/format,png)
我们可以根据自己需要选择对应的版本,这里需要说明的即使图里面关于Static,Share和Dev的差别
Static版本中的exe体积较大,那是因为相关的Dll都已经编译进exe里面去了。
Shared版本中exe的体积相对小很多,是因为它们运行的时候还需要到相关的dll中调用相应的功能
Dev版本用于开发,里面包含了库文件xxx.lib以及头文件xxx.h
我们如果只是为了使用的话选择Static版本就可以。
下载完成后解压下载的压缩包,在bin目录下有3个程序,如下图所示:
我们可以在这个目录下直接打开cmd直接使用,为了使用方便,我们也可以将解压的目录添加到系统环境变量中。
首先下载源码,解压,进入解压目录执行
./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
[email protected] 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
编译时间稍长,耐心等待,安装完成之后可以在我们的安装目录下找到我们的编译程序。如下图:
![](https://img-blog.csdnimg.cn/img_convert/3c4aa501dda75587e4562e0d68a57f5d.webp?x-oss-process=image/format,png)
我们可以在bin目录下直接运行ffmpeg程序,这是可能会提示我们找不到相关的依赖库,这时我们要把lib目录的路径给写到/etc/ld.so.conf.d/某个配置文件下,执行ldconfig命令。
当然为了方便以后使用我们也可以将bin目录添加到系统的环境变量中
3.利用ffmpeg将视频流保存为MP4
其实就是一条命令
ffmpeg -t 10 -i rtsp://admin:[email protected]: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:[email protected]: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博客
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓