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数组条件过滤filter函数使用示例
Jul 22 Python
python进阶教程之循环对象
Aug 30 Python
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
Python实现的购物车功能示例
Feb 11 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
Apr 02 Python
python3判断url链接是否为404的方法
Aug 10 Python
pytorch使用Variable实现线性回归
May 21 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
Python lambda表达式原理及用法解析
Aug 18 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
document.all与WEB标准
2020/05/13 Javascript
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
webpack多页面开发实践
2017/12/18 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
市场营销管理毕业生自荐信
2014/03/03 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
小学端午节活动总结
2015/02/11 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
只用Python就可以制作的简单词云
2021/06/07 Python
golang中的struct操作
2021/11/11 Golang