ffmpeg+x265精简压缩图片

news/2024/7/10 20:48:42 标签: ffmpeg, windows

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

@input_images:原始图片。

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

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

NOTE:只需安装ffmpeg。 

 👑核心代码:

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)

👑调用接口:

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()

http://www.niftyadmin.cn/n/5310270.html

相关文章

【期末不挂科-考前速过系列P6】单片机[接口与总线]——经典例题盘点(带图解析)(第六章:10题速过定时计数器的结构和工作方式例题)

前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

C++笔记之cout高亮输出以及纯C++实现一个彩色时钟

C笔记之cout高亮输出以及纯C实现一个彩色时钟 code review! 文章目录 C笔记之cout高亮输出以及纯C实现一个彩色时钟一.cout高亮输出1.1.运行1.2.代码一1.3.代码二1.4.重置终端的文本格式到默认设置说明 二.纯C实现一个彩色时钟2.1.运行2.2.main.cc2.3.cout带颜色打印输出技巧…

2024--Django平台开发-Django知识点(三)

day03 django知识点 项目相关路由相关 urls.py视图相关 views.py模版相关 templates资源相关 static/media 1.项目相关 新项目 开发时,可能遇到使用其他的版本。虚拟环境 老项目 打开项目虚拟环境 1.1 关于新项目 1.系统解释器命令行【学习】 C:/python38- p…

LanChatRoom局域网聊天室

CPP已经结课,我提交的项目是Qt的入门项目,局域网聊天室LanChatRoom。 这个代码重构了很多遍。第一遍是照着明哥推荐到书,把代码抄了一遍。 但抄下来之后,各种问题,而且是清朝老代码。抄了一遍之后,对代码的…

Kubernetes复习总结(二):Kubernetes容器网络

2、Kubernetes容器网络 1)、Docker网络原理 Docker默认使用的网络模型是bridge,这里只讲bridge网络模型 1)容器之间通信原理 当安装完docker之后,docker会在宿主机上创建一个名叫docker0的网桥,默认IP是172.17.0.1…

Linux Ubuntu 20.04.6 Intel WiFi6 Ax411 1690i Ax1690i Killer 解决无线网卡识别不出来问题

项目场景: 网卡型号:英特尔 Killer™ Wi-Fi 6E AX1690 i/s ubuntu 版本 uname -a Linux kuanli 5.15.0-91-generic #101~20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux cat /proc/version Linux version 5.15.0-9…

斯坦福家用机器人开源项目

模仿学习在机器人技术领域取得了显著进展,它通过学习人类的演示来完成任务,并展示出了令人印象深刻的表现。然而,目前的研究大多集中在桌面操作上,缺乏实现通用移动性和灵活性所需的关键要素。 在这项研究中,开源项目…

二叉树与堆的深度解析:数据结构中的关键概念及应用

. 个人主页:晓风飞 专栏:数据结构|Linux|C语言 路漫漫其修远兮,吾将上下而求索 文章目录 前言树概念注意: 树的基本概念及术语基本概念及术语以家谱为例 树的表示孩子兄弟表示法简介优势应用示例 树在实际中的运用文件系统的目录树…