python实现视频压缩功能

作者:山有木兮I 时间:2023-12-14 02:48:36 

引言

实现一个视频压缩的功能,
性能优良 压缩视频 从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

来源:https://blog.csdn.net/dearcandy/article/details/105531718

标签:python,视频压缩
0
投稿

猜你喜欢

  • 设计的商业价值

    2009-08-13 14:43:00
  • sqlserver只有MDF文件恢复数据库的方法

    2024-01-25 11:20:32
  • 机器学习之KNN算法原理及Python实现方法详解

    2023-05-17 00:38:43
  • CSS网页布局避免滥用DIV元素

    2011-03-30 12:34:00
  • JavaScript Math 对象常用方法总结

    2024-06-05 09:33:56
  • MySQL使用binlog日志做数据恢复的实现

    2024-01-27 09:17:47
  • Python自动化办公之Word文档的创建与生成

    2022-06-16 17:49:43
  • SQL基础查询和LINQ集成化查询

    2024-01-18 21:51:47
  • [翻译]网页设计中的模式窗口

    2009-05-29 18:00:00
  • 写给JavaScript库开发者们的规则

    2008-10-26 12:30:00
  • web高性能开发系列随笔 BearRui(AK-47)版

    2023-04-10 10:58:22
  • 最简洁的多重查询的解决方案

    2008-03-02 15:51:00
  • 详解向scrapy中的spider传递参数的几种方法(2种)

    2023-05-22 04:40:38
  • 对python中的six.moves模块的下载函数urlretrieve详解

    2023-10-20 00:23:45
  • python解决网站的反爬虫策略总结

    2022-11-04 12:57:34
  • pycharm设置鼠标悬停查看方法设置

    2022-12-25 16:04:31
  • 浅谈python中的实例方法、类方法和静态方法

    2022-02-10 07:11:27
  • python爬取豆瓣评论制作词云代码

    2023-03-14 04:31:40
  • Python的for和break循环结构中使用else语句的技巧

    2022-07-02 16:59:26
  • C#数据库操作的示例详解

    2024-01-15 05:46:32
  • asp之家 网络编程 m.aspxhome.com