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实现list反转实例汇总
Nov 11 Python
Python最基本的输入输出详解
Apr 25 Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 Python
Python之str操作方法(详解)
Jun 19 Python
关于python的list相关知识(推荐)
Aug 30 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
Python-while 计算100以内奇数和的方法
Jun 11 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
pytorch使用 to 进行类型转换方式
Jan 08 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
python3中for循环踩过的坑记录
Dec 14 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 adodb操作mysql数据库
2009/03/19 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
深入理解javascript动态插入技术
2013/11/12 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
详解a++和++a的区别
2017/08/30 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
Python迭代和迭代器详解
2016/11/10 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
python判断链表是否有环的实例代码
2020/01/31 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
会计专业个人自我鉴定
2014/03/21 职场文书
办理护照工作证明
2014/10/10 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
应聘教师自荐信
2015/03/26 职场文书
导游词之杭州西湖
2019/09/19 职场文书
Nebula Graph解决风控业务实践
2022/03/31 MySQL
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js