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 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
详解Django中的权限和组以及消息
Jul 23 Python
用Pygal绘制直方图代码示例
Dec 07 Python
python2.7实现FTP文件下载功能
Apr 15 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
使用python实现回文数的四种方法小结
Nov 24 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 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在Linxu下执行时的文件权限方法
2017/06/07 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
python中abs&map&reduce简介
2018/02/20 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
将python图片转为二进制文本的实例
2019/01/24 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
Python如何定义一个函数
2015/09/01 面试题
中专毕业生自我鉴定
2013/11/21 职场文书
运动会广播稿80字
2014/01/23 职场文书
函授本科自我鉴定
2014/02/04 职场文书
读书演讲主持词
2014/03/18 职场文书
党员服务承诺书
2014/05/28 职场文书
火灾现场处置方案
2014/05/28 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
经营场所使用证明
2015/06/19 职场文书
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
python解析照片拍摄时间进行图片整理
2022/07/23 Python