Python做图像处理及视频音频文件分离和合成功能


Posted in Python onNovember 24, 2020

一、简介

Imageio是一个Python库,提供了一个简单的界面来读取和写入各种图像数据,包括动画图像,视频,体积数据和科学格式。它是跨平台的,运行在Python 2.7和3.4+上,易于安装。

作为用户,您只需要记住一些功能:

  • imread()和imwrite() - 用于单个图像
  • mimread()和mimwrite() - 用于图像系列(动画)
  • volread()和volwrite() - 用于体积图像数据
  • get_reader()和get_writer() - 用于更多控制(例如流式传输)
  • 有关更多信息,请参阅文档。

通过一系列功能简单的界面。
使用conda或pip 易于安装。
几乎没有依赖(只有Numpy和Pillow)。
纯Python,运行在Python 2.7,3.4 +和Pypy上
跨平台,在Windows,Linux,OS X上运行(Raspberry Pi计划)
许多支持的格式。
可以读取文件名,文件对象,zip文件,http / ftp和原始字节。
使用插件轻松扩展。
通过许多测试和持​​续集成来维护代码质量。

Imageio有一个相对简单的核心,为不同的文件格式提供通用接口。这个核心负责从不同的源(如http)读取,并为插件公开一个简单的API来访问原始数据。所有文件格式都在插件中实现。可以轻松注册其他插件。

一些插件依赖于外部库(例如ffmpeg)。Imageio提供了一种通过一个函数调用下载这些函数的方法,并在需要时提示用户这样做。下载缓存在您的appdata目录中,这可以保持imageio轻松和可扩展。

Imageio提供各种图像格式,包括科学格式。任何有关实现更多格式的帮助都非常受欢迎!

代码库遵循PEP8样式指南的(子集)。我们力求最大的测试覆盖率(核心为100%,每个插件为> 95%)。

二、代码总结:

import subprocess
import imageio
import os
from PIL import Image

def video2mp3(file_name):
 """
 将视频转为音频
 :param file_name: 传入视频文件的路径
 :return:
 """
 outfile_name = file_name.split('.')[0] + '.mp3'
 subprocess.call('ffmpeg -i ' + file_name
     + ' -f mp3 ' + outfile_name, shell=True)

def video_add_mp3(file_name, mp3_file):
 """
  视频添加音频
 :param file_name: 传入视频文件的路径
 :param mp3_file: 传入音频文件的路径
 :return:
 """
 outfile_name = file_name.split('.')[0] + '-txt.mp4'
 subprocess.call('ffmpeg -i ' + file_name
     + ' -i ' + mp3_file + ' -strict -2 -f mp4 '
     + outfile_name, shell=True)

def compose_gif(file_path):
 """
  将静态图片转为gif动图
  :param file_path: 传入图片的目录的路径
  :return:
 """
 img_paths = sorted([int(p[3:-4]) for p in os.listdir(file_path) if os.path.splitext(p)[1] == ".png"])
 img_paths = img_paths[:int(len(img_paths) / 3.6)]
 gif_images = []
 for path in img_paths:
  gif_images.append(imageio.imread('{0}/out{1}.png'.format(file_path, path)))
 imageio.mimsave("test.gif", gif_images, fps=30)

def compress_png(file_path):
 """
  将gif动图转为每张静态图片
  :param file_path: 传入gif文件的路径
  :return:
 """
 img_paths = [p for p in os.listdir(file_path) if os.path.splitext(p)[1] == ".png"]
 for filename in img_paths:
  with Image.open('{0}/{1}'.format(file_path, filename)) as im:
   width, height = im.size
   new_width = 150
   new_height = int(new_width * height * 1.0 / width)
   resized_im = im.resize((new_width, new_height))
   output_filename = filename
   resized_im.save('{0}/{1}'.format(file_path, output_filename))

if __name__ == '__main__':
 # video2mp3(file_name='data-a.mp4')
 video_add_mp3(file_name='swap-data-a.mp4', mp3_file='data-a.mp3')
 # compose_gif(file_path='merged')
 # compress_png(file_path='merged')

到此这篇关于Python做图像处理及视频音频文件分离和合成功能的文章就介绍到这了,更多相关python视频音频分离和合成内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python struct.unpack
Sep 06 Python
python实现将元祖转换成数组的方法
May 04 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
Python绘制七段数码管实例代码
Dec 20 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
python连接mongodb集群方法详解
Feb 13 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 Python
如何在Python项目中引入日志
May 31 Python
Python调用Redis的示例代码
Nov 24 #Python
基于django和dropzone.js实现上传文件
Nov 24 #Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 #Python
Django web自定义通用权限控制实现方法
Nov 24 #Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 #Python
Pycharm安装python库的方法
Nov 24 #Python
python opencv角点检测连线功能的实现代码
Nov 24 #Python
You might like
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
php生成微信红包数组的方法
2019/09/05 PHP
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
js实现简单进度条效果
2020/03/25 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
Python写的服务监控程序实例
2015/01/31 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
Python实现的概率分布运算操作示例
2017/08/14 Python
python生成ppt的方法
2018/06/07 Python
python制作mysql数据迁移脚本
2019/01/01 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
Python中内建模块collections如何使用
2020/05/27 Python
Python使用Matlab命令过程解析
2020/06/04 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
DataList 能否分页,请问如何实现?
2015/05/03 面试题
高中生毕业评语
2014/12/30 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
关于Python中进度条的六个实用技巧分享
2022/04/05 Python
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang