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 判断一个进程是否存在
Apr 09 Python
python实现得到一个给定类的虚函数
Sep 28 Python
python通过apply使用元祖和列表调用函数实例
May 26 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
Sublime开发python程序的示例代码
Jan 24 Python
Python封装原理与实现方法详解
Aug 28 Python
详解python中docx库的安装过程
Nov 08 Python
Java文件与类动手动脑实例详解
Nov 10 Python
Python实现钉钉订阅消息功能
Jan 14 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
keras 权重保存和权重载入方式
May 21 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 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应用技巧
2008/03/27 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
Javascript之文件操作
2007/03/07 Javascript
Jquery之美中不足小结
2011/02/16 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
javascript基本语法
2016/05/31 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
Python模拟用户登录验证
2017/09/11 Python
python求绝对值的三种方法小结
2019/12/04 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
车间安全生产标语
2014/06/06 职场文书
安全检查汇报材料
2014/12/26 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
军事理论课感想
2015/08/11 职场文书
教师听课学习心得体会
2016/01/15 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
基于redis+lua进行限流的方法
2022/07/23 Redis
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android