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(3)
Sep 15 Python
Python判断字符串与大小写转换
Jun 08 Python
使用Python编写基于DHT协议的BT资源爬虫
Mar 19 Python
python 简单的多线程链接实现代码
Aug 28 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
用Eclipse写python程序
Feb 10 Python
使用DataFrame删除行和列的实例讲解
Apr 08 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
python基础之匿名函数详解
Apr 21 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
zf框架的校验器InArray使用示例
2014/03/13 PHP
PHP合并静态文件详解
2014/11/14 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
wxPython框架类和面板类的使用实例
2014/09/28 Python
使用Python设计一个代码统计工具
2018/04/04 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
python实现低通滤波器代码
2020/02/26 Python
python获取整个网页源码的方法
2020/08/03 Python
django中cookiecutter的使用教程
2020/12/03 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
研究生毕业鉴定
2014/01/29 职场文书
求职信需要的五点内容
2014/02/01 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
行政文秘岗位职责范本
2014/02/10 职场文书
学用政策心得体会
2014/09/10 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
2014年人大工作总结
2014/12/10 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
logback 实现给变量指定默认值
2021/08/30 Java/Android