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 时间戳与格式化时间的转化实现代码
Mar 23 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
python版简单工厂模式
Oct 16 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
Python实现的txt文件去重功能示例
Jul 07 Python
在python中pandas的series合并方法
Nov 12 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
Python使用enumerate获取迭代元素下标
Feb 03 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
全网最全python库selenium自动化使用详细教程
Jan 12 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中curl和file_get_content的区别
2014/05/10 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
php简单复制文件的方法
2016/05/09 PHP
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
2015/12/29 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
2020/06/01 Python
Python库安装速度过慢解决方案
2020/07/14 Python
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
几个判断型的面试题
2012/07/03 面试题
报到证丢失证明
2014/01/11 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
cf战队收人广告词
2014/03/14 职场文书
满月酒主持词
2014/03/27 职场文书
五四青年节演讲稿
2014/05/26 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android
Python中异常处理用法
2021/11/27 Python
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python