python实现视频压缩功能
作者:山有木兮I 时间:2023-12-14 02:48:36
引言
实现一个视频压缩的功能,
性能优良 压缩视频 从61M 到 11M或者80M到15M
视频看起来没有太大损伤
缺点:耗时20s (win10,CPU:intel i7 8G运存 )
由于压缩运算需要占用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 压缩后的文件名 , 和要压缩的文件在同一目录下
后续我还会再走一个牺牲图像大小啊 质量啊换取速度和大小的版本
最后贴出参考:
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