使用ffmpeg从视频中截取图像帧

在抽取视频帧方面,ffmpeg比opencv java版速度好太多了

ffmpeg 安装

centos 6 与 7 安装ffmpeg还是有区别的,不过事先都需要安装拓展源

yum -y install epel-release

centos 6

su -c 'yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-6.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-6.noarch.rpm'

yum -y install ffmpeg ffmpeg-devel

centos 7

su -c 'yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm'

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm

yum -y install ffmpeg ffmpeg-devel

windows 下安装直接有现成的 exe

链接: https://pan.baidu.com/s/1n5mJ1grkTFT9rLuJ8XlJZA
提取码: b7du
记得将 bin 所在的路径加入到环境变量path里面

提取帧图片

下面的例子是 每隔多少帧取一帧

# 老版本例如 centos6.5
/usr/bin/ffmpeg -i /tmp/1.mp4 -vf "select='gt(t,1)*lt(t,100)*not(mod(n,5))'" -vsync 0 /tmp/1/%d.jpg

# 新版本
/usr/bin/ffmpeg -i /tmp/1.mp4  -vf "select=between(n,1,100)*not(mod(n,5))"  -vsync 0 /tmp/1/%d.jpg
  • /usr/bin/ffmpeg 为ffmpeg的路径
  • /tmp/1.mp4 为视频路径
  • select=between(n,1,100)*not(mod(n,5)) 中 100 为视频的总帧数 5 为隔多少帧取一帧
  • /tmp/1/ 为输出的帧图片的位置 位置一定要先创建好

获取视频总帧数

可以通弄过 ffprobe

ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 /tmp/1.mp4

也可以通过java代码opencv来获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值