基于Python使用ffmpeg批量缩放图片

一、前言

​ 笔者因为项目原因或者个人撰文需要,经常要写大量技术文档,文档中通常需要配图,但配图就有一个比较讨厌的问题:截图大小不一,宽度通常要手动调整,非常麻烦。那有没有好的办法可以解决?是有的,我们可以通过批量图片处理软件,预先将图片的宽度都调成一样,长度跟随比例缩放,这样在写文档插入图片就不用再逐个调整,大部分直接可用。

​ 市面上这样的软件很多,百度和知乎一搜就有好多,它们有精美的界面,简易的操作,和强大的工具箱,免费的广告和收费的主题…反正不被笔者所爱。

​ 基于上述原因,笔者目光转移到了开源软件,之前用ffmpeg做过视频处理,它强大的功能给笔者留下了很深刻的印象。软件有了,要实现批量处理需要写脚本自动遍历文件夹并提取,再调用ffmpeg处理。可选项有不少:matlab脚本、BAT脚本、Python脚本。Matlab强大的同时也异常庞大,放弃。BAT脚本易用但难写,放弃。最终本文基于Python脚本编写了脚本调用ffmpeg实现了图片的批量缩放。

​ 文中代码参考了博主:星沉地动的文章。原文处理的是视频文件,用于格式转换,笔者对代码进行了改写,实现图片的缩放。有兴趣的读者可以移步原文章:

原文链接:https://blog.csdn.net/qq446252221/article/details/111679491

二、ffmpeg简介

​ ffmpeg是一款强大的开源音视频处理软件,被网友称为:“多媒体处理神器”,它由鼎鼎大名的天才程序员法布里斯•贝拉编写并开源。ffmpeg你不一定听过,但是使用ffmpeg作为内核的视频播放器和音视频工具,大部分读者一定用过:Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音,格式工厂等,还有众多播放器使用开源的ffmpeg但并不对外公布。

​ 它通常被用来处理音视频数据,在本文中被用来处理图片,可谓大材小用了。

​ 对批处理脚本有兴趣的读者,想必软件安装定不是难题,笔者不在此多费口舌,自行检索安装即可,安装后记得在作者脚本代码中更改ffmpeg路径为自己的安装路径。

​ 最后,法布里斯•贝拉简直是个神,有兴趣的可以去找他的履历看一下。

三、Python

​ 这个,不想多说,只说一句话**:“人生苦短,我用Python”**,各位读者自行安装吧。

​ 使用本文脚本的步骤是:

  1. 安装Python(已安装可忽略)

  2. 安装ffmpeg(已安装可忽略)

  3. 将脚本拷贝到图片所在的根目录,修改脚本代码以下宏定义内容:ffmpeg路径,长宽参数,需要处理的图片扩展名。

  4. 在该目录下通过以下命令调用脚本:

    python '.\Picture Process.py'
    

    ​ 脚本运行结束后会在源文件目录的上一级目录新建**“NewPicture”**文件夹,并将缩放完成后的图片存入其中。

四、脚本运行效果

  1. 源图片分辨率 1718*636

  2. 处理后图片分辨率800*296

    新生成的所有图片,都按照脚本参数进行了宽度为800的限制,高度等比例缩放。即:小于该分辨率的图片将被放大,大于该分辨率的图片将被缩小。

五、源代码

​ 最后,贴上源代码:

import os
from turtle import heading#设置ffmpeg路径
EXE_PATH="D:\\ffmpeg\\bin\\ffmpeg.exe"
#源图像路径
src_dir = ".\\"
#目标路径
dst_dir = "..\\NewPicture\\"
#图片文件扩展名
src_name= ".jpg"# ffmpeg参数设置
#设置长度
width = 800
#设置宽度
height = -1
# 二者任何一个参数为-1时,将保持比例跟随另一个参数缩放 """ Picture_Zoom函数定义
调用ffmpeg """
def Picture_Zoom(exe_path, src_path, dst_path):# 命令编辑cmd_line = '%s -i "%s" -vf scale="%s":"%s" -q 1 "%s"' % (exe_path, src_path,width,height,dst_path)# 调用命令行ret = os.system(cmd_line)if ret == 0:return Trueelse:return False""" Process_dir函数定义
遍历目录下所有文件并调用ffmpeg处理 """
def Process_dir(exe_path, src_dir, dst_dir):# 判断源目录是否存在if not os.path.exists(src_dir):print("The directory does not exist!")return#判断目标目录是否存在,若目标路径已存在,#先删除原来的旧目录if os.path.exists(dst_dir):# 调用CMD命令“rmdir”删除旧目录os.system('rmdir /s/q "%s"' % dst_dir)# 新建目标目录if not os.path.exists(dst_dir):os.mkdir(dst_dir)# 枚举源目录下的文件picture_list = os.listdir(src_dir)# 遍历指定扩展名的图像文件并处理for file in picture_list:if file.endswith(src_name):print("+Convert file:", file)# 生成新的源图片路径src_path = src_dir + file# 生成新的目标图片路径dst_path = dst_dir + file# 调用ffmpeg进行缩放Picture_Zoom(exe_path, src_path, dst_path)Process_dir(EXE_PATH,src_dir, dst_dir)#By ZhangJianCe 2022.3.17

基于Python使用ffmpeg批量缩放图片相关推荐

  1. Python Opencv等比例缩放图片

    Python Opencv等比例缩放图片 前言 前提条件 相关介绍 实验环境 等比例缩放图片 代码实现 输出结果 前言 本文是个人使用Python Opencv处理图片的笔记,由于水平有限,难免出现错 ...

  2. python空间数据处理_基于Python的空间数据批量处理方法

    第 34 卷 第 4 期 2011 年 8 月 测绘与空间地理信息 GEOMATICS & SPATIAL INFORMATION TECHNOLOGY Vol. 34,No. 4 Aug. ...

  3. 基于Python的文件批量重命名(附详细过程解读)

    基于Python的文件批量重命名(附详细过程解读) 0.闲言碎语 hi ~ 欢迎关注公众号"壹贰叁言"! 啥都写,图一乐哈哈! 1.前因后果 前几日,我在用arcgis处理一些数据 ...

  4. python 用PIL库缩放图片并保存

    python 用PIL库缩放图片并保存 PIL库安装 pip install pillow 单个图片缩放 from PIL import Imageimagepath = r'.\img\number ...

  5. python应用如何实现升级_一种基于Python实现BMC批量升级的方法与流程

    本发明涉及BMC批量升级,尤其涉及一种基于Python实现BMC批量升级的方法. 背景技术: 随着现代服务器主板技术的发展,主板设计形态复杂多变.无论是设计成本还是后期使用过程中的维护成本都很高.如何 ...

  6. python爬虫+ffmpeg批量下载ts文件,解密合并成mp4

    标题 python爬虫+ffmpeg批量下载ts文件,解密合并成mp4 文章目录 标题 前言 一.分析目标 二.寻找url规律 三.写代码 总结 前言 (第一次写博客,写的不好请见谅哈~~) 目标是大 ...

  7. 10 行 Python 代码,批量压缩图片 500 张,简直太强大了

    这几天,我在用 Github page + hexo 搭建个人网站,为了延续风格,就想把配图与文章一起迁移过去.这时候就出现了一个难题:我所用的图片都是高清大图,放到网站上会严重拖慢加载速度.因此,需 ...

  8. python画超长图-python实现按长宽比缩放图片

    使用python按图片固定长宽比缩放图片到指定图片大小,空白部分填充为黑色. 代码 # -*- coding: utf-8 -*- from PIL import Image class image_ ...

  9. Python学习:批量转换图片格式-PNG转JPG

    个人微信公众号:AI研习图书馆,欢迎关注~ 深度学习知识及资源分享,学习交流,共同进步~ 1. 介绍 Python代码:批量将PNG格式图片转换为JPG图片格式,即PNG转JPG格式. 2. Pyth ...

最新文章

  1. 模块隐藏(LDR_MODULE链 与 PE特征)
  2. 在Win上做Python开发?当然是用官方的MS Terminal和VS Code了
  3. E. Sign on Fence(整体二分 + 线段树维护区间最大连续 1 的个数)
  4. 王者荣耀8月15日服务器维护,王者荣耀8月15日更新维护到什么时候 王者荣耀8月15日更新时间分享...
  5. 第二章--电商设计表订单实体-电商项目
  6. [翻译]Real-Time Correlative Scan Matching
  7. 第三季-第20课-多线程程序设计
  8. ArcGIS笔记1_如何为shapefile要素定义坐标系
  9. qq说说时间轴php实现,qq空间时间轴PHP实现时间轴函数代码
  10. linux usr目录权限不够,linux-mkdir:无法创建目录“ /usr/local/n / versions”:权限被拒绝...
  11. 适合学计算机学生喝的茶,学生喝什么茶能够提高记忆力
  12. 字体凹陷效果html,在PS中,想做凹进去的效果,怎么做?例如文字凹进木板中?...
  13. HB 7066机舱内部非金属材料毒性测定
  14. 深入计算机组成原理(二十)面向流水线的指令设计(上):一心多用的现代CPU
  15. easyUI右侧搜索面板下拉列表框样例
  16. MySQL之初识MySQL
  17. [cx32] jlink烧录脚本使用
  18. RPG游戏-小地图系统(二)
  19. 如何学习3DMAX建模放样?
  20. 常见三维文件格式 STL VRML X3D

热门文章

  1. PAT乙级1025题解
  2. 2016-1-21高博活动
  3. 微信公众平台可以修改微信号了,微信号怎么设置好。
  4. 【96期】盘点那些关于Nginx的常考面试题
  5. C盘左右两边都有恢复分区,如何扩展C盘大小
  6. 【Unity】Unity在运行时崩溃了怎么办?别害怕,还有救!
  7. 双壳层膦酰基修饰二氧化硅磁性微球/氮氧自由基接枝/表面KH-550改性二氧化硅微球的研究
  8. 那些想不断提高自己技术水平的Java程序员们
  9. 关于计算机培训策划案,2019年计算机培训策划书.docx
  10. 解决 i5 6500 安装黑苹果 Sierra 显卡不正常问题