ffmpeg+x265精简压缩图片

可以看到700M的图片可以压缩到只有9M,并且模型推理精度只会下降0.07.有很多种压缩方式,经过大量实验qb36是最好的,默认使用这个。

@input_images:原始图片。

@mkv_files\qb36:中转文件,也就是说原始图片要先转换为.mkv文件,然后继而转换为被压缩后的图片。

@output_images:不用多说,压缩后的图片。

NOTE:只需安装ffmpeg。

👑核心代码:

python 复制代码
import os
import glob
from tqdm import tqdm

class x265_encode_decode_Tool(object):
    def __init__(self, quality, mkv_path, input_img_path, output_img_path) -> None:
        self.quality = quality
        self.mkv_path = mkv_path
        self.input_img_path = input_img_path
        self.output_img_path = output_img_path
        self.mkvFile = ""

        if not os.path.exists(self.mkv_path):
            os.makedirs(self.mkv_path)

        if not os.path.exists(self.output_img_path):
            os.makedirs(self.output_img_path)

    def run_x265_encode(self):
        label_list=os.listdir(self.input_img_path)
        for label in tqdm(label_list):    #xxx.jpg
            '''
                jpg to mkv with qpxx
            '''
            os.chdir(self.input_img_path)  # .../JPEGImages/
            cmd_jpg_to_mkv="ffmpeg -i " + label + " -c:v libx265 -x265-params qp="\
                + self.quality[2:] + " "+ self.mkv_path + "/"+\
                label[:len(label)-4]+".mkv"
            # print(cmd_jpg_to_mkv)
            os.system(cmd_jpg_to_mkv)

    def run_x265_decode(self):
        # '''
        #    mkv to jpg
        # '''
        label_list=os.listdir(self.input_img_path)
        for label in tqdm(label_list):    #xxx.jpg
            os.chdir(self.mkv_path + "/" + self.mkvFile) #.../x265_VOC2007/
            cmd_mkv_to_jpg = "ffmpeg -i  "+label[:len(label)-4]+".mkv -r 1 \
                            -f image2 "+ self.output_img_path + "/" + self.mkvFile + "/" + label
            # print(cmd_mkv_to_jpg)
            os.system(cmd_mkv_to_jpg)

    def run_x265_encode_and_decode(self):
        label_list=os.listdir(self.input_img_path)
        for label in tqdm(label_list):    #xxx.jpg
            '''
            jpg to mkv with qpxx
            '''
            os.chdir(self.input_img_path)  # .../JPEGImages/
            cmd_jpg_to_mkv="ffmpeg -i " + label + " -c:v libx265 -x265-params qp="\
                        + self.quality[2:] + " "+ self.mkv_path + "/"+\
                        label[:len(label)-4]+".mkv"
            # print(cmd_jpg_to_mkv)
            os.system(cmd_jpg_to_mkv)

            # '''
            #     mkv to jpg
            # '''
            os.chdir(self.mkv_path + "/" + self.mkvFile) #.../x265_VOC2007/
            cmd_mkv_to_jpg = "ffmpeg -i  "+label[:len(label)-4]+".mkv -r 1 \
            				-f image2 "+ self.output_img_path + "/" + self.mkvFile + "/" + label
            # print(cmd_mkv_to_jpg)
            os.system(cmd_mkv_to_jpg)

👑调用接口:

python 复制代码
from x265_encode_and_decode import x265_encode_decode_Tool

if __name__ == "__main__":
  
  quality = 'qb36'
  mkv_path = '/data2/personal/jiangziliang/projects/x265_imageCompressor/mkv_files/%s' % quality
  input_img_path = r'/data2/personal/jiangziliang/projects/x265_imageCompressor/input_images'
  output_img_path = r'/data2/personal/jiangziliang/projects/x265_imageCompressor/output_images'
  
  x265Tools = x265_encode_decode_Tool(
    quality, mkv_path, input_img_path, output_img_path)
  '''
    jpeg -> mkv
  '''
  # x265Tools.run_x265_encode()
  '''
    mkv -> jpeg
  '''
  # x265Tools.run_x265_decode()
  '''
    jpeg -> mkv -> jpeg
  '''
  # x265Tools.run_x265_encode_and_decode()
相关推荐
x***r1517 分钟前
TUPortable安装步骤详解(附流量监控与进程占用查看教程)
windows
Zzz 小生3 小时前
LangChain Messages:消息使用完全指南
数据库·windows·microsoft
不吃鱼的猫7483 小时前
【ffplay 源码解析系列】01-开篇-ffplay整体架构与启动流程
c++·架构·ffmpeg·音视频
发现你走远了12 小时前
Windows 下手动安装java JDK 21 并配置环境变量(详细记录)
java·开发语言·windows
love530love14 小时前
【OpenClaw 本地实战 Ep.3】突破瓶颈:强制修改 openclaw.json 解锁 32k 上下文记忆
人工智能·windows·json·cuda·lm studio·openclaw·context length
刮涂层_赢大奖14 小时前
我给MAC做了一个 Windows 任务栏,用了之后再也回不去 Dock 了
windows·macos·ios
聂 可 以16 小时前
Windows环境Git安装教程(下载Git安装包、安装Git、验证Git是否安装成功)
windows·git
secondyoung18 小时前
Git使用:Git使用问题及解决方法总结
windows·经验分享·git·vscode·gitee·github·gitcode
呆萌的代Ma19 小时前
解决windows记事本打开后打开上一次的文件导致卡死
windows
x***r15120 小时前
Dism++x64系统优化清理安装步骤详解(附系统清理与优化使用教程)
windows