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中super的用法实例
May 28 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
Python 备份程序代码实现
Mar 06 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
对numpy中shape的深入理解
Jun 15 Python
python代码编写计算器小程序
Mar 30 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
python实现获取单向链表倒数第k个结点的值示例
Oct 24 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
python 数据类型强制转换的总结
Jan 25 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将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
pytorch masked_fill报错的解决
2020/02/18 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
浅谈python锁与死锁问题
2020/08/14 Python
浅析Python中字符串的intern机制
2020/10/03 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
应届毕业生求职信范文分享
2013/12/26 职场文书
阿德的梦教学反思
2014/02/06 职场文书
买房子个人收入证明
2014/10/12 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014年党总支工作总结
2014/12/18 职场文书
初中成绩单评语
2014/12/29 职场文书
检讨书格式范文
2015/05/07 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
Python保存并浏览用户的历史记录
2022/04/29 Python