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 相关文章推荐
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
浅析Python四种数据类型
Sep 26 Python
python实现多进程代码示例
Oct 31 Python
把pandas转换int型为str型的方法
Jan 29 Python
Python中的asyncio代码详解
Jun 10 Python
django用户登录验证的完整示例代码
Jul 21 Python
python装饰器相当于函数的调用方式
Dec 27 Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 Python
python生成并处理uuid的实现方式
Mar 03 Python
Python接口测试数据库封装实现原理
May 09 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 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支付宝手机网页支付类实例
2015/03/04 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
javascript document.compatMode兼容性
2010/02/23 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
Python代码的打包与发布详解
2014/07/30 Python
在Django的模板中使用认证数据的方法
2015/07/23 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
python K近邻算法的kd树实现
2018/09/06 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
购房协议书
2014/04/11 职场文书
副总经理任命书
2014/06/05 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
个人售房合同协议书
2016/03/21 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
Spring整合Mybatis的全过程
2021/06/28 Java/Android
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL