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 21 Python
python中实现定制类的特殊方法总结
Sep 28 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
Python自动化构建工具scons使用入门笔记
Mar 10 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
10分钟教你用Python实现微信自动回复功能
Nov 28 Python
Python2与Python3的区别点整理
Dec 12 Python
python基于event实现线程间通信控制
Jan 13 Python
Python 代码调试技巧示例代码
Aug 11 Python
bat批处理之字符串操作的实现
Mar 16 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
极典R601SW收音机
2021/03/02 无线电
PHP sprintf()函数用例解析
2011/05/18 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
Vue中keep-alive组件作用详解
2020/02/04 Javascript
python实现探测socket和web服务示例
2014/03/28 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Python适配器模式代码实现解析
2019/08/02 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
使用Python发现隐藏的wifi
2020/03/04 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
企业道德讲堂实施方案
2014/03/19 职场文书
汽车促销活动方案
2014/03/31 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
跑出一片天观后感
2015/06/08 职场文书
2019年大学推荐信
2019/06/24 职场文书
Golang bufio详细讲解
2022/04/21 Golang