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多进程multiprocessing用法实例分析
Aug 18 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
tensorflow中next_batch的具体使用
Feb 02 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python登录注册验证功能实现
Jun 18 Python
Python2包含中文报错的解决方法
Jul 09 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
Python xlrd模块导入过程及常用操作
Jun 10 Python
Python打包为exe详细教程
May 18 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-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python中的lambda表达式用法详解
2016/06/22 Python
python实现SOM算法
2018/02/23 Python
从0开始的Python学习016异常
2019/04/08 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
班组长岗位职责范本
2014/01/05 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
大学生党员承诺书
2014/05/20 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
新党章的学习心得体会
2014/11/07 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
Python时间操作之pytz模块使用详解
2022/06/14 Python