视频帧数(图片)和音频提取及保存方法&图片合成视频方法—ffmpeg

环境:Ubuntu16.04、Python3.5、anaconda3
任务需要,要从视频里提取一定帧数的图片和音频,查了不少方法,也试了不少方法,很多都不可行,也又可能是配置的问题,没细究,下面把亲测可行的拿出来分享,配上关键操作的输出效果:

用的是一个Python的工具—ffmpeg,非常强大,不仅可以提取视频里一定帧数的图片,也可以提取特定帧数的图片,也可以转换视频的格式。

先说一下安装方法:

  1. 先说明,我是在anaconda里搭建的环境,所以有些依赖项可能需要根据自己的环境去配置
conda install imageio scikit-image
  1. 在terminal里进入Python
python
import imageio
imageio.plugins.ffmpeg.download()

之后就会开始下载,下载完就ok了

说一下两个测试可行的方法:

method 1

import pylab
import imageio
import skimage
import numpy as np
filename='/home/will/Videos/level_1.mp4'
vid=imageio.get_reader(filename, 'ffmpeg')
for num,im in enumerate(vid):#print im.mean()image = skimage.img_as_float(im).astype(np.float64)fig = pylab.figure()fig.suptitle('image #{}'.format(num), fontsize=20)pylab.imshow(im)
pylab.show()


上面测试的视频是之前录的RL的demo,根据自己视频的保存路径修改即可,注意是绝对路径

method 2
这个方法就简单了,直接使用ffmpeg工具,这里以一个叫testvideo.avi的视频做测试

ffmpeg -i testvideo.avi -vf select='eq(pict_type\,I)' -vsync 2 -f image2 frame-%03d.jpg -hide_banner

其实还可以设置很多参数的,但是我也一下子找不到太多,所以也希望有大神知道的,可以分享一下这部分,我把我知道的分享一下:
-i :后面的视频的名字也是路径,这个参数一定要放在最前面
-f :图片的命名格式及保存格式,不加这个也行,直接把保存格式写上就好
-s :分辨率,如-s 160×90则将图片的分辨率统一设定成160×90
-vsync :阻止每个关键帧产生多余的拷贝,其实只有两个值可以输入,1或2
-vf :表示过滤图形的描述,选择过滤器select会选择帧进行输出:包括过滤器常量
eq(pict_type\,I):PICT_TYPE_I 表示是I帧,即关键帧,如果I帧,7秒视频输出201个图片,换成2,7秒视频输出101个图片。
-vframes :指抽取的帧数
-ss :指起始时间
-t :持续时间,单位是秒
-r :指抽取的帧率,即从视频每秒钟抽取图片的数量,1即每秒抽取一帧

放下效果图:
图片的保存路径默认当前所在的路径
7秒的视频,生成了201张图片


加个题外话,ffmpeg转换视频格式命令:

ffmpeg -i input.mp4 output.avi

用ffmpeg按每秒8帧进行解帧,命令如下:

ffmpeg -i ${path} -vf fps=fps=8/1 -q 0 $IMGFOLDER/%06d.jpg

视频截取

官方推荐把-ss放在-i前面,这样做剪辑出来的视频时间轴更精准,并且速度更快。
加上-accurate_seek是准确裁剪视频,不加这个剪出来的视频会有所误差。

ffmpeg -ss 10 -t 15 -accurate_seek -i test.mp4 -codec copy cut.mp4

-ss:指定开始
-i:导入的视频文件
-t:指定时长

比如-ss 10 -t 15 -i video.mp4,则剪辑出来的视频,是原视频从第10s开始持续15s的片段。
-codec copy:使用编码为copy复制源视频文件的编码格式

音频提取

ffmpeg -i apple.mp4 -f mp3 -vn apple.mp3

参数解释:
-i 表示input,即输入文件
-f 表示format,即输出格式:mp3, wav等
-vn表示vedio not,即输出不包含视频

图片合成视频

利用ffmpeg就可以完成这项任务了,下面是具体指令,再附上每个指令的说明:
-threads:线程,这里可以设2个,加快视频生成速度
-y:图片合成视频会有很多个覆盖操作,此处一律同意覆盖
-rfps,这个是关键,设置多少帧/s,这里我自己设的是8,就是每八张图片合成1s的视频
-i:后接的第一个参数是输入的图片,我的图片都是以image%06d命名的,按自己图片的实际命名排序来设置,最后的是输出视频的格式。
ffmpeg -threads 2 -y -r 8 -i image%06d.jpg 1234.mp4

效果如图所示:

视频帧数(图片)和音频提取及保存方法图片合成视频方法---ffmpeg相关推荐

  1. matlab怎么设置视频帧数,matlab无法读取视屏

    %初始化背景所需要的帧数N=15;%背景更新参数p1 =95;p2 = 100-p1;M_ = 1;%读取AVI视频文件mov = VideoReader('D:\42.avi');%获取视频帧数mo ...

  2. Android FFmpeg移植总攻略——获取视频帧数(亲测可用)

    第一次尝试使用Android 移植FFmpeg算法,一路坎坷,最终做如下总结,适用于Android手机.Android开发板.亲测可用. 一.下载组件 在Android Studio中下载所需组件:C ...

  3. python视频提取音频_python脚本实现mp4中的音频提取并保存在原目录

    一段把mp4中的音频提取为mp3并保存在原目录的python脚本 需要提前安装好ffmpeg 转换为单线程,耗时较长 #!/usr/bin/env python3 # -*- coding: utf- ...

  4. python用OpenCV读取视频帧数、高度宽度等

    python用OpenCV读取视频帧数.高度宽度等 import cv2 import time# 2655 def get_each_frame(video_path):# 读取视频文件videoC ...

  5. 获取视频帧数和总帧数

    获取视频帧数和总帧数代码 import cv2 videoPath=input("请输入视屏文件的绝对路径:") # 将视频文件路径转化为标准的路径 videoPath=video ...

  6. python视频帧提取并保存_如何用python实现视频关键帧提取并保存为图片?

    展开全部 import cv2 vc = cv2.VideoCapture('Test.avi') #读入视频文件2113 c=1 if vc.isOpened(): #判断是否正常打开5261 rv ...

  7. matlab降低视频帧数,如何更改视频的帧速率

    你开始改变. 调整. 修复或帧速率转换之前,您需要注意的一点就是实际的视频帧显示的速度很大程度上取决于您的计算机的硬件能力.即使它是共同的帧速率增加,提高视频质量,这只会工作到某一个点.另外,还有一些 ...

  8. 60帧/秒摄像头 视频帧数最佳选择!

    随着网络的普及,作为电脑外设产品的摄像头也迅速进入千家万户.这一重大商机也给摄像头行业的发展带来一片繁荣景象.在这个进入门槛低.公模横行的行业,摄像头产品在外观设计.用户应用范围.新功能技术指标等方面 ...

  9. python 多帧 超分辨_利用python-opencv生成视频帧数控制,和常见错误总结

    首先呢 利用opencv生成视频的例子相信网络上已经很多了.但是大多数例子都只是捕获一个摄像头就没了.但是在实际运用中会发现.因为涉及到图像处理,生成的视频要不就就是过快要不就是比实际时间长. 控制视 ...

最新文章

  1. step by step YAML 复用
  2. 计算机术语的英文全称,计算机英文名词缩写
  3. 解决java.lang.UnsupportedClassVersionError: Bad version number in .class file问题
  4. VMware vCenter Converter Standlone迁移手册
  5. 多网卡指定网卡发送数据
  6. 我该建数仓、大数据平台还是数据中台?看完脑子终于清醒了
  7. 采用UDP协议实现PIC18F97J60 ethernet bootloader
  8. python开发信息系统权限设置_[Python学习] Django 权限控制
  9. windbg学习-----n(Set Number base)
  10. 使用Xcode和Instruments调试解决iOS内存泄露
  11. 混淆视听的感脚(二)
  12. mindray心电监护仪使用说明_怎么看监护仪上的参数
  13. 【HDU - 5452】Minimum Cut(树形dp 或 最近公共祖先lca+树上差分,转化tricks,思维)
  14. Chapter 3.GDI/DirectDraw Internal Data Structures
  15. Android类参考---Fragment(五)
  16. iOS http文件下载
  17. 微信小程序之WeUI组件库的使用
  18. 通过三层交换机实现VLAN间路由
  19. 计算机英语口语app,最实用五大英语口语app,强烈推荐
  20. matlab中的index函数的使用方法,index函数语法说明及应用实例

热门文章

  1. C语言鼠标操作方法及源码
  2. 2019校招真题编程(十九)魔法深渊
  3. PSpice分析类型
  4. TCP/IP网络编程(一)
  5. [多线程]多线程使用QTimer
  6. jQuery在IE8上使用,IE8提示“对象不支持此属性或方法”
  7. 使用wiki百科的中文语料库训练词向量
  8. 互联网工作 常用名词及基础知识扫盲
  9. webstorm 2018 激活破解方法大全 亲测第三个有用
  10. 产品如何选择 RF射频,RF433,RF315