基于Python使用ffmpeg批量缩放图片
基于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”**,各位读者自行安装吧。
使用本文脚本的步骤是:
安装Python(已安装可忽略)
安装ffmpeg(已安装可忽略)
将脚本拷贝到图片所在的根目录,修改脚本代码以下宏定义内容:ffmpeg路径,长宽参数,需要处理的图片扩展名。
在该目录下通过以下命令调用脚本:
python '.\Picture Process.py'
脚本运行结束后会在源文件目录的上一级目录新建**“NewPicture”**文件夹,并将缩放完成后的图片存入其中。
四、脚本运行效果
源图片分辨率 1718*636
处理后图片分辨率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批量缩放图片相关推荐
- Python Opencv等比例缩放图片
Python Opencv等比例缩放图片 前言 前提条件 相关介绍 实验环境 等比例缩放图片 代码实现 输出结果 前言 本文是个人使用Python Opencv处理图片的笔记,由于水平有限,难免出现错 ...
- python空间数据处理_基于Python的空间数据批量处理方法
第 34 卷 第 4 期 2011 年 8 月 测绘与空间地理信息 GEOMATICS & SPATIAL INFORMATION TECHNOLOGY Vol. 34,No. 4 Aug. ...
- 基于Python的文件批量重命名(附详细过程解读)
基于Python的文件批量重命名(附详细过程解读) 0.闲言碎语 hi ~ 欢迎关注公众号"壹贰叁言"! 啥都写,图一乐哈哈! 1.前因后果 前几日,我在用arcgis处理一些数据 ...
- python 用PIL库缩放图片并保存
python 用PIL库缩放图片并保存 PIL库安装 pip install pillow 单个图片缩放 from PIL import Imageimagepath = r'.\img\number ...
- python应用如何实现升级_一种基于Python实现BMC批量升级的方法与流程
本发明涉及BMC批量升级,尤其涉及一种基于Python实现BMC批量升级的方法. 背景技术: 随着现代服务器主板技术的发展,主板设计形态复杂多变.无论是设计成本还是后期使用过程中的维护成本都很高.如何 ...
- python爬虫+ffmpeg批量下载ts文件,解密合并成mp4
标题 python爬虫+ffmpeg批量下载ts文件,解密合并成mp4 文章目录 标题 前言 一.分析目标 二.寻找url规律 三.写代码 总结 前言 (第一次写博客,写的不好请见谅哈~~) 目标是大 ...
- 10 行 Python 代码,批量压缩图片 500 张,简直太强大了
这几天,我在用 Github page + hexo 搭建个人网站,为了延续风格,就想把配图与文章一起迁移过去.这时候就出现了一个难题:我所用的图片都是高清大图,放到网站上会严重拖慢加载速度.因此,需 ...
- python画超长图-python实现按长宽比缩放图片
使用python按图片固定长宽比缩放图片到指定图片大小,空白部分填充为黑色. 代码 # -*- coding: utf-8 -*- from PIL import Image class image_ ...
- Python学习:批量转换图片格式-PNG转JPG
个人微信公众号:AI研习图书馆,欢迎关注~ 深度学习知识及资源分享,学习交流,共同进步~ 1. 介绍 Python代码:批量将PNG格式图片转换为JPG图片格式,即PNG转JPG格式. 2. Pyth ...
最新文章
- 模块隐藏(LDR_MODULE链 与 PE特征)
- 在Win上做Python开发?当然是用官方的MS Terminal和VS Code了
- E. Sign on Fence(整体二分 + 线段树维护区间最大连续 1 的个数)
- 王者荣耀8月15日服务器维护,王者荣耀8月15日更新维护到什么时候 王者荣耀8月15日更新时间分享...
- 第二章--电商设计表订单实体-电商项目
- [翻译]Real-Time Correlative Scan Matching
- 第三季-第20课-多线程程序设计
- ArcGIS笔记1_如何为shapefile要素定义坐标系
- qq说说时间轴php实现,qq空间时间轴PHP实现时间轴函数代码
- linux usr目录权限不够,linux-mkdir:无法创建目录“ /usr/local/n / versions”:权限被拒绝...
- 适合学计算机学生喝的茶,学生喝什么茶能够提高记忆力
- 字体凹陷效果html,在PS中,想做凹进去的效果,怎么做?例如文字凹进木板中?...
- HB 7066机舱内部非金属材料毒性测定
- 深入计算机组成原理(二十)面向流水线的指令设计(上):一心多用的现代CPU
- easyUI右侧搜索面板下拉列表框样例
- MySQL之初识MySQL
- [cx32] jlink烧录脚本使用
- RPG游戏-小地图系统(二)
- 如何学习3DMAX建模放样?
- 常见三维文件格式 STL VRML X3D