写点什么

python 将视频抽帧的的多种方式

作者:技能实验室
  • 2022-10-19
    河南
  • 本文字数:1633 字

    阅读完需:约 1 分钟

最近有一个需求是将视频抽取为一个个的帧图片,使用 python 很方便实现,而且有多种方式;

视频转换为帧的三种方式

第一种:使用 open-cv


OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法;
复制代码


由于 open-cv 不是 python 的内置库,所以使用之前需要先安装;


安装方式推荐有很多种,推荐使用 pip;


pip 是 Python 的包安装程序。其实,pip 就是 Python 标准库(The Python Standard Library)中的一个包,只是这个包比较特殊,用它可以来管理 Python 标准库(The Python Standard Library)中其他的包。pip 是一个命令行程序。 安装 pip 后,会向系统添加一个 pip 命令,该命令可以从命令提示符运行。


使用 pip 安装,打开命令行输入;


pip install open-cv


等待执行安装成功;


安装完成后,导入:


import cv2


需要注意的是,安装的库名称和导入的名称不一样


1. 开始编码:具体思路是:使用 cv2 中的 VideoCapture 函数加载视频,然后按帧读取,使用 read 方法;


  vidcap = cv2.VideoCapture(video_path)    success, image = vidcap.read()
复制代码


read 方法返回两个参数,一个是读取结果是否成功,一个是图片帧;读取结果为 True,则保存图片帧为图片,需要使用 cv2.imwrite 方法,代码如下:


  if success:            cv2.imwrite("frame_{0:0>3}.png".format(count), image)             if cv2.waitKey(10) == 27:                break            count += 1
复制代码


累加 count,方便计数;


使用 open-cv 保存图片完成;


第二种:使用 moviepy 和 PIL


moviepy 是 python 中处理视频的常用库 PIL 是 python 中处理图片的常用库;两个库都是第三方库,使用前需要安装;


使用 pip 安装 moviepy 和 PIL 分别输入安装命令,打开命令行窗口,执行:


pip install moviepypip install Pillow


Pillow 是 PIL 的替代版本,PIL 软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等等 pyhon3 一般使用的都是 pillow;


安装完成后导入:


from moviepy.editor import *from PIL import Image
复制代码


  • 使用方法:


使用 moviepy 中的 VideoFileClip 函数加载视频信息,使用 iter_frames 方法获取到每一帧使用 Image 函数将每一帧转换为图片


  • 具体代码如下:


from moviepy.editor import *from PIL import Imagedef v2pngs(videofile,out_path):    """    将视频保存为图片    """    video_clip = VideoFileClip(videofile)     if not os.path.exists(out_path):        os.makedirs(out_path)     for idx, frame in enumerate(video_clip.iter_frames()):        print(">>>idx: ", idx)        if idx % 5 > 0:            continue        filename = out_path+'/img_' + str(int(idx/5)).zfill(3) + ".png"        Image.fromarray(frame).save(filename)     video_clip.close()    print("Done!")
复制代码


使用 FFmpeg 抽帧


FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序;


使用 ffmpeg 命令可以很快的抽取视频帧;python 在使用 ffmpeg 命令时,只需要调用内置库 os;


os.system('ffmpeg -***")


使用 os.system 执行命令行窗口命令;具体抽帧函数,可以参考 ffmpeg 官网命令;




在抽取视频帧时,有时需要获取指定分辨率的图片,那就需要先裁减原视频,ffmpeg 实现此功能最方便;


使用 FFmpeg 裁剪视频


使用 ffmpeg 裁剪视频时的命令如下:


ffmpeg -i video_path -vf crop=405:720:440:0 out_path


关键参数 crop,输入(x,y,width,height) 左上角坐标,宽度和高度四个参数


具体代码如下:


#! _*_ coding:utf-8 _*_import os
def cropVideo(video_path,out_path): '''裁剪视频''' os.system('ffmpeg -i %s -vf crop=405:720:440:0 %s' % (video_path,out_path)) print('裁剪完成...')
复制代码


发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022-07-26 加入

还未添加个人简介

评论

发布
暂无评论
python将视频抽帧的的多种方式_10月月更_技能实验室_InfoQ写作社区