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通过Pygame绘制移动的矩形实例代码
Jan 03 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
python字符串的方法与操作大全
Jan 30 Python
完美解决在oj中Python的循环输入问题
Jun 25 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
Jun 19 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
python设置随机种子实例讲解
Sep 12 Python
Python for循环搭配else常见问题解决
Feb 11 Python
python词云库wordcloud的使用方法与实例详解
Feb 17 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
Python OpenCV形态学运算示例详解
Apr 07 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
织梦模板标记简介
2007/03/11 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
IE iframe的onload方法分析小结
2010/01/07 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
Python中使用SAX解析xml实例
2014/11/21 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
python中count函数简单用法
2020/01/05 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
顶岗实习接收函
2014/01/09 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers