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()
相关推荐
硫酸锌014 小时前
使用ffmpeg合并文件夹内的所有*.mp4格式视频
ffmpeg·音视频
源文雨5 小时前
shell调用ffmpeg递归转换所有wav至flac的脚本
ffmpeg·bash·音视频·音频·unix·shell·音频编码
西部秋虫5 小时前
迷你视频会议系统(FlashMeeting)
opencv·ffmpeg·视频会议·回声抑制
黄大帅@lz5 小时前
openai提示词学习
windows·学习
MyY_DO5 小时前
十四课 易语言核心逆向
windows·od
AI袋鼠帝16 小时前
Claude4.5+Gemini3 接管电脑桌面,这回是真无敌了..
人工智能·windows·aigc
獨枭17 小时前
Windows 下安装与使用 Miniconda 完整指南
windows
命里有定数18 小时前
保姆级教程:在 Windows (WSL2) 下本地部署 Qwen3-ASR
windows
lucky670721 小时前
Windows 上彻底卸载 Node.js
windows·node.js
编程小白20261 天前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习