降智警告:本人为编程新手,遵守面向CSDN编程原则,代码架构具有个人特色,仅供参考

前言:因为之前看到一个视频里的ed还挺喜欢的,所以想截取下来,做成gif,结果做出来几十M,所以本文还会涉及截取并裁剪视频帧的内容

内容分为五个部分:①截取视频,②视频分帧(可选),③图片裁剪(可选),④音频提取(可选),⑤gif/mp4生成

需要用到的库有moviepy,imageio,skimage(scikit-image),numpy,PIL,os

一.截取视频

直接使用moviepy.editor可以截取视频,还可以改变帧尺寸

  1. import moviepy.editor as mpy

  2. #获取视频内容

  3. clip = mpy.VideoFileClip('ori.mp4')

  4. #按时间划分截取(如下,截取22分25秒到23分55秒的内容)

  5. content = clip.subclip((22,25),(23,55))

  6. #截取视频的同时改变帧大小,改为480x360

  7. #content = clip.subclip((22,25),(23,55)).resize((480, 360))

  8. #将截取的视频写入到新文件保存

  9. content.write_videofile('get.mp4')

如果提示需要ffmpeg.exe

  1. import imageio

  2. imageio.plugins.ffmpeg.download()

二.视频分帧

将截取的视频按帧生成图片,如果不需要修改帧(去字幕等),可以跳过

  1. import imageio

  2. import skimage

  3. import numpy as np

  4. #视频的绝对路径

  5. filename = 'get.mp4'

  6. #使用ffmpeg读取视频内容

  7. reader = imageio.get_reader(filename, 'ffmpeg')

  8. for i, im in enumerate(reader) :

  9. #将每一帧转为np.array

  10. image = skimage.img_as_float(im).astype(np.float64)

  11. #将每一帧写入为新图片

  12. imageio.imsave(str(i) + '.jpg', image)

三.图片裁剪

这里需要你使用其他方式定位你要裁剪下来的图片的区域,找到该区域左上角和右下角的坐标

  1. import os

  2. from PIL import Image

  3. #获取图片列表

  4. pic = os.listdir()

  5. for p in pic :

  6. #若不是要进行操作的图片或是之前已经操作过的图片,则跳过

  7. if p.split('.')[1] != 'jpg' or p.split('.')[0][-3:] == 'new':

  8. continue

  9. #打开图片

  10. img = Image.open(p)

  11. #获取图片尺寸

  12. width, height = img.size

  13. #图片编号,后面生成新图片要用

  14. num = int(p.split('.')[0])

  15. #设置自定义的裁剪位置

  16. if num < 1037 :

  17. x, y, w, h = 0, 75, 820, 75 + 570

  18. elif num < 1812 :

  19. x, y, w, h = width - 820, 75, width, 75 + 570

  20. else :

  21. x, y, w, h = 0, 75, 820, 75 + 570

  22. # 开始截取

  23. region = img.crop((x, y, w, h))

  24. # 另保存为新图片

  25. region.save(p.split('.')[0] + "_new.jpg")

  1. '''

  2. new = img.crop((x,y,w,h))

  3. x w

  4. ---------------------------------

  5. | | | |

  6. y|-------A---------------- |

  7. | | | |

  8. | | | |

  9. | | | |

  10. | | | |

  11. h|-----------------------B |

  12. | |

  13. ---------------------------------

  14. '''

四.音频提取

从截取的视频里提取出音频

下载ffmpeg.exe,这个东西可以用来处理音频视频等,功能强大,这里仅是用来提取音频

官网下载,在get the packages 里按系统选,可以直接下载exe格式的(我是windows)

跳转后按系统要求选择,点download build

下载后在bin文件夹里找到ffmpeg.exe,跟要提取的视频放在同一目录下,使用以下命令:

ffmpeg -i video.mp4(原视频) -vn audio.mp3(提取音频) -vn

然后就会生成一个audio.mp3文件,就是提取出来的音频

五.gif/mp4生成

gif的话很简单

1.使用图片生成gif

  1. import os

  2. import imageio

  3. #获取图片列表

  4. pic = [i for i in os.listdir() if i.split('.')[0][-3:] == 'new']

  5. #将图片按编号排序

  6. pic = sorted(pic, key = lambda x : int(x.split('.')[0][:-4]))

  7. #目标gif的文件名

  8. filename = 'fin.gif'

  9. #获取帧列表

  10. frames = [imageio.imread(i) for i in pic]

  11. #将帧合成gif

  12. imageio.mimsave(filename, frames, 'GIF', duration = 1 / 24)

2.根据视频生成gif(可以直接截取视频生成gif)

  1. import moviepy.editor as mpy

  2. #获取视频内容

  3. clip = mpy.VideoFileClip('ori.mp4')

  4. #按时间划分截取(如下,截取22分25秒到23分55秒的内容)

  5. content = clip.subclip((22,25),(23,55))

  6. #截取视频的同时改变帧大小,改为480x360

  7. #content = clip.subclip((22,25),(23,55)).resize((480, 360))

  8. #生成gif

  9. content.write_gif('get.gif')

使用图片跟音频生成视频(图片命名格式:编号_new.jpg)

  1. import os

  2. import imageio

  3. from moviepy.editor import *

  4. #获取图片列表

  5. pic = [i for i in os.listdir() if i.split('.')[0][-3:] == 'new']

  6. #将图片按编号排序

  7. pic = sorted(pic, key = lambda x : int(x.split('.')[0][:-4]))

  8. #将图片按帧率(fps)划分,fps可调

  9. clip = ImageSequenceClip(pic, fps = 24)

  10. #使用音频与帧表合成视频

  11. clip.write_videofile('new.mp4', audio = "audio.mp3")

总结:使用imageio和moviepy基本可以满足视频操作的需要,特殊需求可以使用ffmpeg作为辅助。PIL可以对图片进行操作,两者相结合就可以自定义的生成动态文件了。

参考:

gif制作 : https://blog.csdn.net/Spade_/article/details/79516322

图片切割:https://blog.csdn.net/t8116189520/article/details/80271661

音频提取:https://blog.csdn.net/cjs68/article/details/49993473

Python-从视频到gif(imageio,moviepy,ffmpeg)相关推荐

  1. python使用方法视频-Python读取视频的两种方法(imageio和cv2)

    用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...

  2. python怎么导入视频-Python读取视频的两种方法(imageio和cv2)

    用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...

  3. 用python打开视频_Python读取视频的两种方法(imageio和cv2)

    用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...

  4. hdfs用fileutil读取文件内容_MoviePy - 用Python玩转视频剪辑!(MoviePy安装及视频文件读取)

    最近有一些视频需要剪辑,但本人比较懒,不想逐一手工处理.第一个想到的,就是万能的Python. 果不其然google一搜,真的有现成的库 moviepy.如官方文档所介绍的,moviepy是一个用于视 ...

  5. Python把视频转为 gif 图片——视频制作利器:MoviePy

    简 介:MoviePy 是一个用于视频编辑的 Python 模块,可用于基本操作(如剪切.连接.标题插入).视频合成(也称为非线性编辑).视频处理或创建高级效果.它可以读取和写入最常见的视频格式,包括 ...

  6. 用python打开视频_MoviePy - 用Python玩转视频剪辑!(MoviePy安装及视频文件读取)...

    最近有一些视频需要剪辑,但本人比较懒,不想逐一手工处理.第一个想到的,就是万能的Python. 果不其然google一搜,真的有现成的库 moviepy.如官方文档所介绍的,moviepy是一个用于视 ...

  7. python使用方法视频-使用Python进行视频处理

    Imageio逐帧视频处理 安装 conda install imageio 将视频转换成图片 import imageio timeF = 10 reader = imageio.get_reade ...

  8. python视频-python剪切视频与合并视频的实现

    windows10/python3.6环境需安装imageio,ffmpeg(视频中有教下载)文字中不体现太麻烦,看起来也不方便! 剪切代码python代码: import imageio image ...

  9. python剪切视频与合并视频

    #windows10/python3.6环境需安装imageio,ffmpeg(视频中有教下载)文字中不体现太麻烦,看起来也不方便! #剪切代码python代码: import imageio ima ...

  10. python播放本地视频教程_怎样用python播放视频

    使用python播放视频的方法: 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用.import pylab import imageio #视频的绝对路径 ...

最新文章

  1. 发布一个biztalk 解析Excel文件到xml消息的管道组件
  2. 以图搜图 图像匹配_图像匹配,基于深度学习DenseNet实现以图搜图功能
  3. MySql主从同步最小配置
  4. 语言身高预测实验注意事项_?新预训练模型CodeBERT出世,编程语言和自然语言都不在话下...
  5. leetcode 682. 棒球比赛(Baseball Game)
  6. 游泳,情人节纪念一下。
  7. R 学习笔记《二》 R语言初学者指南
  8. 频谱图 与傅立叶变换
  9. IDEA在当前工作空间导入项目
  10. 全球500强员工是这么考试的!还有答案~
  11. 深入分析中小型千兆网吧解决方案(转)
  12. linux桌面系统 9,红旗Linux系统RedFlag Linux Desktop 9.0安装教程
  13. 博客神器-markdown
  14. Moco测试知多少?什么是moco?如何使用?
  15. html点击关注新浪微博,新浪微博设置关注回复的详细方法
  16. 电脑上媒体服务器在哪个文件夹,老物件之用老PC打造家用媒体服务器
  17. Fisco-Bcos智能合约开发案例----商品溯源
  18. 苹果秋季发布会打破惯例:最强芯片A14先用在iPad上!
  19. 利用伪类编写小三角和模仿微信对话框
  20. 《惢客创业日记》2020.07.21(周二)悬疑爱好者的基地

热门文章

  1. qq邮箱mx服务器,电子邮箱如何设置域名MX记录
  2. 大学学了java可以做点什么_学习Java的,大学毕业一般从事些什么工作?
  3. mysql根据字段长度查询_SQL语句如何查询某一字符串字段长度等于某个值的所有记录...
  4. 编辑数学公式_LaTeXiT for mac(数学公式编辑器)
  5. css BEM书写规范
  6. github 项目绑定自己的域名
  7. VLC 关键模块结构分析
  8. 开始iOS 7中自动布局教程(一)
  9. JPA(二)之CRUD操作
  10. Android--UI之ImageView