python实现视频压缩功能


Posted in Python onDecember 18, 2020

引言

实现一个视频压缩的功能,
性能优良 压缩视频 从61M 到 11M或者80M到15M
视频看起来没有太大损伤
缺点:耗时20s (win10,CPU:intel i7 8G运存 )

python实现视频压缩功能

由于压缩运算需要占用CPU资源,所以时间和性能其实很难兼顾,这个是我个人比较满意的一版 ,记录一下

话不多说,直接上代码

视频压缩:

# 视频压缩第二版
import sys
import os
import zlib
import threading
import platform
from PIL import Image

class Compress_Pic_or_Video(object):
  def __init__(self,filePath,inputName,outName=""):
    self.filePath = filePath #文件地址
    self.inputName = inputName #输入的文件名字
    self.outName = outName #输出的文件名字
    self.system_ = platform.platform().split("-",1)[0]
    if self.system_ == "Windows":
      self.filePath = (self.filePath + "\\") if self.filePath.rsplit("\\",1)[-1] else self.filePath
    elif self.system_ == "Linux":
      self.filePath = (self.filePath + "/") if self.filePath.rsplit("/",1)[-1] else self.filePath
    self.fileInputPath = self.filePath + inputName
    self.fileOutPath = self.filePath + outName

  @property
  def is_video(self):
    videoSuffixSet = {"WMV","ASF","ASX","RM","RMVB","MP4","3GP","MOV","M4V","AVI","DAT","MKV","FIV","VOB"}
    suffix = self.fileInputPath.rsplit(".",1)[-1].upper()
    if suffix in videoSuffixSet:
      return True
    else:
      return False

  def SaveVideo(self):
    fpsize = os.path.getsize(self.fileInputPath) / 1024
    if fpsize >= 150.0: #大于150KB的视频需要压缩
      if self.outName:
        compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath,self.fileOutPath)
        isRun = os.system(compress)
      else:
        compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath, self.fileInputPath)
        isRun = os.system(compress)
      if isRun != 0:
        return (isRun,"没有安装ffmpeg")
      return True
    else:
      return True

  def Compress_Video(self):
    # 异步保存打开下面的代码,注释同步保存的代码
    thr = threading.Thread(target=self.SaveVideo)
    thr.start()
    #下面为同步代码
    # fpsize = os.path.getsize(self.fileInputPath) / 1024
    # if fpsize >= 150.0: # 大于150KB的视频需要压缩
    #   compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(
    #     self.fileInputPath, self.fileOutPath)
    #   isRun = os.system(compress)
    #   if isRun != 0:
    #     return (isRun, "没有安装ffmpeg")
    #   return True
    # else:
    #   return True

if __name__ == "__main__":
  b = sys.argv[1:]	#测试压缩
  savevideo = Compress_Pic_or_Video(b[0],b[1],b[2])
  print(savevideo.Compress_Video())
# 这一版性能优良 压缩 从61M 到 11M 视频看起来没有太大损伤 缺点:inteli7 8G运存 耗时20s

启动方式:

在上述 .py文件所在目录下,shift+鼠标右键点击空白处,打开powershell窗口,运行以下命令:

python shipinyasuo-2.py D:\yasuoship test.avi test1.avi

我的文件名叫 shipinyasuo-2.py ,把这个文件名替换成自己的,

D:\yasuoship 替换成要压缩的视频的文件夹的绝对路径

test.avi  压缩的视频的文件名

test1.avi  压缩后的文件名 , 和要压缩的文件在同一目录下

python实现视频压缩功能

后续我还会再走一个牺牲图像大小啊 质量啊换取速度和大小的版本

最后贴出参考:
https://blog.csdn.net/a849992683/article/details/90030326

Python 相关文章推荐
Python获取DLL和EXE文件版本号的方法
Mar 10 Python
Python解析树及树的遍历
Feb 03 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
python3中str(字符串)的使用教程
Mar 23 Python
Python Grid使用和布局详解
Jun 30 Python
python根据时间获取周数代码实例
Sep 30 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
python爬虫添加请求头代码实例
Dec 28 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
Django Xadmin多对多字段过滤实例
Apr 07 Python
使用jupyter notebook运行python和R的步骤
Aug 13 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 #Python
python 实现全球IP归属地查询工具
Dec 18 #Python
MoviePy简介及Python视频剪辑自动化
Dec 18 #Python
Python非单向递归函数如何返回全部结果
Dec 18 #Python
python复合条件下的字典排序
Dec 18 #Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 #Python
细说NumPy数组的四种乘法的使用
Dec 18 #Python
You might like
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
php实现微信企业转账功能
2018/10/02 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
15 个 JavaScript Web UI 库
2010/05/19 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
python代码制作configure文件示例
2014/07/28 Python
python实现识别相似图片小结
2016/02/22 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
Django url 路由匹配过程详解
2021/01/22 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
写好求职信第一句话的技巧
2013/10/26 职场文书
在求职信中如何凸显个人优势
2013/10/30 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
社区干部培训心得体会
2016/01/06 职场文书
合同范本之电脑出租
2019/08/13 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang