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类的多重继承问题深入分析
Nov 09 Python
Django中ORM表的创建和增删改查方法示例
Nov 15 Python
点球小游戏python脚本
May 22 Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 Python
Python PyCharm如何进行断点调试
Jul 05 Python
如何使用python操作vmware
Jul 27 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
python小白切忌乱用表达式
May 29 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 Python
如何在pycharm中安装第三方包
Oct 27 Python
python 算法题——快乐数的多种解法
May 27 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/02/08 PHP
Javascript string 扩展库代码
2010/04/09 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
jQuery实现跨域
2015/02/03 Javascript
JavaScript中this详解
2015/09/01 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
python使用KNN算法识别手写数字
2019/04/25 Python
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
中软Java笔试题
2012/11/11 面试题
军训自我鉴定怎么写
2014/02/13 职场文书
运输服务质量承诺书
2014/03/27 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
节能环保家庭事迹材料
2014/08/27 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
运动会加油稿20字
2014/11/15 职场文书
运动会加油稿30字
2015/07/21 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python