使用ffmpeg 对rtmp流保存成视频文件,对视频进行截图

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。这个项目是由 Fabrice Bellard 发起的,现在由 Michael Niedermayer 主持。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。

目前接到一个需求,设备推rtmp流到srs直播服务器(此处可以是腾讯云或者阿里云的直播服务器,我们是自己搭建的srs直播服务器,因为穷哈哈哈),然后需要实时的将rtmp流进行保存成MP4或者flv,并对保存的视频进行缩略图的截取。

此处对保存成MP4需要特殊说明一下,rtmp的每一帧其实就是flv,将视频保存成flv不设计转码,也就是说在保存视频的过程中不设计视频的转码,不消耗服务器CPU,但是如果保存成MP4的话,就会设计转码,这个时候你的服务器CPU就会蹭蹭往上搞。下边我会特殊说明

ffmpeg的命令:

ffmpeg -probesize 32768 -i " rtmp://192.168.17.233/live/a1 live=1" -acodec copy -vcodec copy -f flv /home/mnt/disk/storage/111.flv

 

-probesize 32768 :没有查到这个参数什么意思,不过字面意思是探针的大小,可能是内存申请32768大小的内存把

-i “rtmp。。。”    :后接地址

-y                              :覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了

-t 0.001                   :设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持

-ss 1                       :延迟1秒后开始

-f image2               :以图片格式保存

-r 1                          :帧数,此处为截取一帧

-acodec copy -vcodec copy  这个表示在对rtmp流进行保存成MP4的同时防止视频进行转码。各位需注意

 

ffmpeg对视频进行截图:

ffmpeg -i /home/mnt/disk/storage/111.flv -y -f mjpeg -t 0.001 -s 288*162 /home/mnt/disk/storage/222.png

-s 288*162 :你的图片的宽高

 

ffmpeg获取视频的时长:

/usr/local/HSrs/bin/ffmpeg -i ${address}/storage/$s3/$s2.flv > ${address}/storage/$s3/$s2.txt 2>&1
    time=`cat ${address}/storage/$s3/$s2.txt | grep Dura | awk '{print $2}'`

将视频时长保存到txt内

 

ffmpeg本人是安装在centos7环境下,可以在线安装也可以离线安装,后续上传离线安装包

ffmpeg还可以对视频进行好多操作,未完待续。。。。。。,求关注

上一篇:直播系统推流和拉流的过程,解决低延迟问题用FLV


下一篇:公司最近最直播回放方面功能,所以让我查看相关资料,总结了一下