七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了

前期准备

最近要压缩视频,然后发现一些压缩视频的工具要是收费,要么有水印,完全不符合要求啊。正当我发愁的时候突然想到,去年的时候接触过 ffmpeg ,可以用python ffmpeg 来压缩视频啊,想到就干。最后还给我整成功啦,唯一麻烦点的地方就是 ffmpeg 的安装,其他的都是简简单单。(代码去年就写好了,这次只是整理更新一下下,自然简单)

  • python 3
  • 需要准备的库:sys、os、platform
  • 需要下载的工具:ffmpeg

ffmpeg 是什么

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
下载地址:http://ffmpeg.org/download.html#build-windows

python 代码展示

# 2020年11月29日12:15:16
# @miss
# 视频压缩程序
# 只为更快更好的压缩视频 不作为商业用途仅供学习参考 miss

# 视频压缩第二版
import sys
import os
import zlib
import threading
import platform
from PIL import Image

# python press.py ./ 12.mp4 23.mp4
# python 文件名  路径 要压缩的文件 压缩之后的文件名
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())

几十行代码轻轻松松压缩视频,还有就是视频名字不能出现中文,要不然会出现 “没有安装ffmpeg的错误” 给大家看一下效果图:
8代 i3
七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了_第1张图片

七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了_第2张图片
七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了_第3张图片
这是压缩时的效果,视频大小是2G,压缩时间有点长
七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了_第4张图片
出现上面的图片就是结束啦,看看最后的效果吧
压缩前后对比:
七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了_第5张图片七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了_第6张图片
整体来讲,压缩的有点狠,但是对于这种录屏的视频来说,最后的感觉都差不多
这是压缩前的视频效果
七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了_第7张图片
这是压缩后的视频效果:
七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了_第8张图片
简而言之,这个压缩效果杠杠的,还没有水印。用来压缩视频,是一个很不错的选择,Python yyds!!就分享到这里啦,有需要的朋友赶紧行动起来吧。

你可能感兴趣的:(python,python,windows)