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中的自定义函数学习笔记
Sep 23 Python
Python操作Word批量生成文章的方法
Jul 28 Python
Python实现自动发送邮件功能
Mar 02 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
Python利用递归实现文件的复制方法
Oct 27 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
python中的itertools的使用详解
Jan 13 Python
PyTorch在Windows环境搭建的方法步骤
May 12 Python
Python WSGI 规范简介
Apr 11 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
Jun 11 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
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
基于js disabled="false"不起作用的解决办法
2013/06/26 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
javascript求日期差的方法
2016/03/02 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
Vuex 入门教程
2018/01/10 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python脚本实现验证码识别
2018/06/07 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
dpn网络的pytorch实现方式
2020/01/14 Python
python实现批处理文件
2020/07/28 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
门卫岗位职责
2013/11/15 职场文书
大学生专科毕业生自我评价
2013/11/17 职场文书
青年创业培训欢迎词
2014/01/08 职场文书
文明青少年标兵事迹材料
2014/01/28 职场文书
综合内勤岗位职责
2014/04/14 职场文书
营业用房租赁协议书
2014/11/26 职场文书
通报表扬范文
2015/01/17 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB
Python装饰器详细介绍
2022/03/25 Python
使用Python解决图表与画布的间距问题
2022/04/11 Python