python ffmpeg任意提取视频帧的方法


Posted in Python onFebruary 21, 2020

 环境准备

1、安装 FFmpeg

2、安装 ffmpeg-python

pip3 install ffmpeg-python

3、【可选】安装 opencv-python

pip3 install opencv-python

4、【可选】安装 numpy

pip3 install numpy

视频帧提取

准备视频素材

抖音视频素材下载:https://anoyi.com/dy/top

基于视频帧数提取任意一帧

import ffmpeg
import numpy
import cv2
import sys
import random


def read_frame_as_jpeg(in_file, frame_num):
  """
  指定帧数读取任意帧
  """
  out, err = (
    ffmpeg.input(in_file)
       .filter('select', 'gte(n,{})'.format(frame_num))
       .output('pipe:', vframes=1, format='image2', vcodec='mjpeg')
       .run(capture_stdout=True)
  )
  return out


def get_video_info(in_file):
  """
  获取视频基本信息
  """
  try:
    probe = ffmpeg.probe(in_file)
    video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
    if video_stream is None:
      print('No video stream found', file=sys.stderr)
      sys.exit(1)
    return video_stream
  except ffmpeg.Error as err:
    print(str(err.stderr, encoding='utf8'))
    sys.exit(1)


if __name__ == '__main__':
  file_path = '/Users/admin/Downloads/拜无忧.mp4'
  video_info = get_video_info(file_path)
  total_frames = int(video_info['nb_frames'])
  print('总帧数:' + str(total_frames))
  random_frame = random.randint(1, total_frames)
  print('随机帧:' + str(random_frame))
  out = read_frame_as_jpeg(file_path, random_frame)
  image_array = numpy.asarray(bytearray(out), dtype="uint8")
  image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
  cv2.imshow('frame', image)
  cv2.waitKey()

基于时间提取任意一帧

import ffmpeg
import numpy
import cv2
import sys
import random


def read_frame_by_time(in_file, time):
  """
  指定时间节点读取任意帧
  """
  out, err = (
    ffmpeg.input(in_file, ss=time)
       .output('pipe:', vframes=1, format='image2', vcodec='mjpeg')
       .run(capture_stdout=True)
  )
  return out


def get_video_info(in_file):
  """
  获取视频基本信息
  """
  try:
    probe = ffmpeg.probe(in_file)
    video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
    if video_stream is None:
      print('No video stream found', file=sys.stderr)
      sys.exit(1)
    return video_stream
  except ffmpeg.Error as err:
    print(str(err.stderr, encoding='utf8'))
    sys.exit(1)

if __name__ == '__main__':
  file_path = '/Users/admin/Downloads/拜无忧.mp4'
  video_info = get_video_info(file_path)
  total_duration = video_info['duration']
  print('总时间:' + total_duration + 's')
  random_time = random.randint(1, int(float(total_duration)) - 1) + random.random()
  print('随机时间:' + str(random_time) + 's')
  out = read_frame_by_time(file_path, random_time)
  image_array = numpy.asarray(bytearray(out), dtype="uint8")
  image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
  cv2.imshow('frame', image)
  cv2.waitKey()

相关资料
https://github.com/kkroening/ffmpeg-python/tree/master/examples

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
Python实现网站文件的全备份和差异备份
Nov 30 Python
python通过线程实现定时器timer的方法
Mar 16 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
详解django三种文件下载方式
Apr 06 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
将python包发布到PyPI和制作whl文件方式
Dec 25 Python
Python中import导入不同目录的模块方法详解
Feb 18 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
Python实现自动访问网页的例子
Feb 21 #Python
解决Python pip 自动更新升级失败的问题
Feb 21 #Python
python利用百度云接口实现车牌识别的示例
Feb 21 #Python
在python3中实现更新界面
Feb 21 #Python
Python要如何实现列表排序的几种方法
Feb 21 #Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 #Python
使用Python打造一款间谍程序的流程分析
Feb 21 #Python
You might like
php操作SVN版本服务器类代码
2011/11/27 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
jQuery动画与特效详解
2015/02/01 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
学Python 3的理由和必要性
2019/11/19 Python
python创建n行m列数组示例
2019/12/02 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
运动会口号8字
2014/06/07 职场文书
违反交通法规检讨书
2014/09/10 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
医院岗前培训心得体会
2016/01/08 职场文书