Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python将视频抽帧的的多种方式

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

原创
作者头像
JQ实验室
发布于 2022-09-29 02:02:53
发布于 2022-09-29 02:02:53
3.1K0
举报
文章被收录于专栏:实用技术实用技术

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

#### 视频转换为帧的三种方式

**第一种:使用open-cv**

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、WindowsAndroid和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 moviepy

> pip install Pillow

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

pyhon3一般使用的都是pillow;

安装完成后导入:

```

from moviepy.editor import *

from PIL import Image

```

* 使用方法:

使用moviepy中的VideoFileClip函数加载视频信息,

使用iter_frames方法获取到每一帧

使用Image函数将每一帧转换为图片

* 具体代码如下:

```python

from moviepy.editor import *

from PIL import Image

def 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) 左上角坐标,宽度和高度四个参数

具体代码如下:

```bash

#! _*_ 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('裁剪完成...')

```

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Linux探索学习】第五弹——Linux用户管理:创建、删除与查看普通用户
进入temp4后,我们可以通过whoami指令查看一下我们当前身份是否 更换为普通用户
GG Bond1
2024/10/16
3480
【Linux探索学习】第五弹——Linux用户管理:创建、删除与查看普通用户
ubuntu中root和普通用户切换方法
ubuntu登录后,默认是普通用户权限,那么普通用户权限和root权限如何切换呢,下面总结下它们之间如何切换。
一个会写诗的程序员
2022/09/30
8.2K0
linux下su和sudo命令如何使用?
  su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用户没有这个权限,而这个权限恰恰由root所拥有。解决办法无法有两个,一是退出beinan用户,重新以root用户登录,但这种办法并不是最好的;二是我们没有必要退出beinan用户,可以用su来切换到root下进行添加用户的工作,等任务完成后再退出root。我们可以看到当然通过su 切换是一种比较好的办法;
会长君
2023/04/25
3.2K0
第二章,ubuntu系统的查看防火墙,切换root用户,设置固定ip、系统时间等
第一次接触ubuntu系统,之前用的都是centos系统,因此也需要知道ubuntu的基本操作,跟centos的差别还是很大的。
全栈程序员站长
2022/08/05
2K0
第二章,ubuntu系统的查看防火墙,切换root用户,设置固定ip、系统时间等
Linux用户-su命令
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2024/11/01
2590
Linux用户-su命令
Linux如何切换到root用户(linux禁止用户切换root)
当前用户是xg其中我解释一下[xg@localhost ~] 这个的含义,其中xg指的是当前的用户,localhost指的是主机名,~指的是当前目录,后面的符号表示普通用户,普通用户的话就是在
全栈程序员站长
2022/08/02
60K0
Linux如何切换到root用户(linux禁止用户切换root)
linux学习第十三篇:su命令,sudo命令,限制root远程登录
su命令 su - user1  //彻底切换用户,如果没有加“-”,切换用户不彻底。 su  -c  "touch /tmp/1.txt"  user1    //在不登录用户user1的情况下,以user1的身份在tmp目录下创建文件1.txt PS:当切换到一个没有家目录的用户时,可以在root用户下 1. mkdir /home/username  //创建用户家目录 2. chown username:username /home/username   //修改username目录的所有者以及所属
用户1215343
2018/02/05
3.2K0
linux学习第十三篇:su命令,sudo命令,限制root远程登录
驾驭Linux的权力:Root与Sudo
在Linux系统中,权限管理是一项至关重要的功能,它决定了用户和系统进程对系统资源的访问级别。其中,Root用户和Sudo命令是Linux权限管理的两大核心组件。本文将详细阐述Root用户的角色以及Sudo权限管理的理论和实践。
久绊A
2024/08/23
3150
权限管理su、sudo、限制root远程登录 原
语法: su [-] username “-”可有可无,加上“-”的作用是在切换用户时初始化当前用户的各种环境变量。普通用户su不加username时就是直接切换到root用户。 eg:
阿dai学长
2019/04/03
3K0
linux中禁用Root帐户的4种方法
root账号 是 Linux 和其他类 Unix 操作系统上的超级帐户。此帐户可以访问系统上的所有命令和文件,并具有完全读取、写入和执行权限。它用于在系统上执行任何类型的任务; create/update/access/delete其他用户的帐户,install/remove/upgrade软件包。 root用户拥有绝对权力,执行的任何操作都对系统至关重要。在这方面,任何错误由root用户可能对系统的正常运行产生巨大影响。此外,该帐户也可能因意外、恶意或人为无视规则而被不当或不当使用而被滥用。 因此,建议禁
玖柒的小窝
2021/10/21
3.7K0
安全运维之:Linux系统账户和登录安全
在Linux下可通过history命令查看用户所有的历史操作记录,同时shell命令操作记录默认保存在用户目录下的.bash_history文件中,通过这个文件可以查询shell命令的执行历史,有助于运维人员进行系统审计和问题排查,同时,在服务器遭受黑客攻击后,也可以通过这个命令或文件查询黑客登录服务器所执行的历史命令操作,但是有时候黑客在入侵服务器后为了毁灭痕迹,可能会删除.bash_history文件,这就需要合理的保护或备份.bash_history文件。下面介绍下history日志文件的安全配置方法。
明哥的运维笔记
2019/01/30
3.2K0
CentOS 系统限制普通用户切换到 root 管理员账号
首页 ꄲ 服务器 ꄲ  CentOS 系统限制普通用户切换到 root 管理员账号
拓荒者
2019/03/11
3.5K0
CentOS 系统限制普通用户切换到 root 管理员账号
Linux权限揭秘“Root与Sudo”
在Linux系统中,权限管理是一项至关重要的功能,它决定了哪些用户和组能够执行哪些操作。其中,Root用户和Sudo工具在权限管理中扮演着核心角色。
久绊A
2025/02/20
3670
Linux基础知识(2)
在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。
用户7657330
2020/08/14
8080
Linux基础知识(2)
sudo、su、su – 之间的区别以及wheel组
文章转自:https://www.howtoforge.com/tutorial/sudo-vs-su/,非常好的一篇文章,我就不总结了,最后只补充一下轮子组wheel。
好派笔记
2021/09/14
3.2K0
疑问易答 | su与 sudo 命令你真的会用?
在 Linux 中有多个用户,比如 root、master、worker 等,那我想从一个用户切换到另一个用户如何切换呢?比如登录 master 用户后,突然想去切换到 worker 用户执行一个命令,操作一个 worker 用户下的文件。这个时候切换用户有多个方法
读懂原理
2023/02/28
5950
疑问易答 | su与 sudo 命令你真的会用?
Ubuntu系统微调
本章讲述了基本的基于命令行界面的系统配置方法。在学习本章前,你需要先阅读 Ubuntu 系统安装提示, 第 3 章.
一见
2018/08/07
8720
初次使用树莓派并启用root管理员
要想使用root帐号,或者说开启root用户,可使用pi用户登录,执行下面命令(此命令是给root账户设置密码的,当切换到root管理员后,此命令无效)
似水的流年
2019/12/08
1.1K0
Linux用户账户管理精髓:创建、删除、密码与会话管理全攻略
在Linux系统中,用户账户管理是系统管理员日常工作中不可或缺的一部分。良好的用户账户管理不仅有助于维护系统的安全性,还能提高系统的可用性和可管理性。以下将详细介绍创建与删除用户、设置与修改密码、以及用户切换与会话管理的相关理论和代码示例。
久绊A
2024/08/23
2040
树莓派4部署LNMP服务
VPS侦探在刚接触Linux时最怕的就是SSH远程登录Linux VPS编译安装程序时(比如安装lnmp)网络突然断开,或者其他情况导致不得不与远程SSH服务器链接断开,远程执行的命令也被迫停止,只能重新连接,重新运行。相信现在有些VPSer也遇到过这个问题,今天就给VPSer们介绍一款远程会话管理工具 - screen命令。
菜菜有点菜
2022/03/17
1.1K0
树莓派4部署LNMP服务
推荐阅读
相关推荐
【Linux探索学习】第五弹——Linux用户管理:创建、删除与查看普通用户
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档