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僵尸进程产生的原因
Jul 21 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 Python
Android分包MultiDex策略详解
Oct 30 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
python使用zip将list转为json的方法
Dec 31 Python
使用python实现对元素的长截图功能
Nov 14 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
pycharm 关掉syntax检查操作
Jun 09 Python
一篇文章带你搞懂Python类的相关知识
May 20 Python
pytorch训练神经网络爆内存的解决方案
May 22 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/11/03 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
JavaScript自执行闭包的小例子
2013/06/29 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python模块WSGI使用详解
2018/02/02 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
任意存:BOXFUL
2018/05/21 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
秋季运动会活动方案
2014/02/05 职场文书
学期评语大全
2014/04/30 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
项目申请汇报材料
2014/08/16 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
就业协议书范本
2014/10/08 职场文书
1000字打架检讨书
2014/11/03 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
毕业设计答辩开场白
2015/05/29 职场文书