Python 自动化办公实战课
尹会生
前游戏公司技术总监,前新浪网研发中心技术经理
21781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
Python 自动化办公实战课
15
15
1.0x
00:00/00:00
登录|注册

05 | 图像处理库:如何实现长图拼接?

Popen类
run()函数
subprocess库
视频合并
视频拆分
索引文件.M3U8
切分为.TS格式
run()函数
subprocess库
composite命令格式
subprocess模块
用Python包装命令行工具
使用命令行工具
Python调用FFmpeg
使用FFmpeg命令
视频拆分原理
Python调用composite
ImageMagick软件
调用外部命令
导入函数库
思考题
视频的拆分与合并
长图拼接
Python调用外部命令
文章:图像处理库:如何实现长图拼接?

该思维导图由 AI 生成,仅供参考

你好,我是尹会生。
我们在工作中,除了和文字、表格打交道之外,还会经常涉及到批量处理图片和视频的工作。比如:媒体从业者在发微博长图文时,需要把多个图片拼接成一幅长图;作为视频剪辑人员,需要从互联网下载多段视频,再进行合并。
这类工作可以用功能强大的商业软件实现,不过这些软件大都操作繁琐,而且还需要付费。为了降低学习成本和购买软件的成本,我们往往还会使用开源软件替代商业软件来实现图片和视频处理功能。但是开源软件通常都是以命令行方式运行的,所以我们不仅要记住命令,还得记住命令的常用参数。
不过,幸运的是,虽然直接使用开源软件不够友好,但如果通过 Python 来调用这些开源软件,那实现长图和视频拼接就轻而易举了,而且还能大批量地处理图片和视频。

Python 是如何调用外部命令的

为了让你了解 Python 是如何操作这些开源软件的,我先来给你介绍一下 Python 调用外部程序的原理。
我们要想使用 Python 语言之外的功能,要依靠两大途径:导入函数库和调用外部命令。
在第一讲我使用的 xlrd 库是通过 import xlrd 命令导入到 Python 语言中的,Python 语言默认是不支持 Excel 的。那么通过导入函数库,Python 就可以获得对 Excel 的操作能力。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何使用Python调用外部命令来实现长图和视频拼接的功能。作者首先解释了Python调用外部程序的原理,介绍了subprocess模块的run()函数和Popen类的使用方法。然后,作者详细讲解了如何使用subprocess库实现长图拼接的功能,以macOS平台上的ImageMagick软件为例,演示了如何通过Python调用composite命令来实现图片拼接。作者强调了使用Python调用外部命令的优势,包括简化命令行参数、提高效率、方便调整参数等。整体而言,本文通过实际示例生动地展示了Python调用外部命令的实现方法,为读者提供了一种简单、高效的图片和视频处理方式。 在文章的后半部分,作者还介绍了如何使用subprocess库调用可执行程序,来进行视频的拆分与合并。通过讲解视频拆分的原理和使用FFmpeg命令的方法,作者展示了如何通过Python实现视频拆分的功能,并强调了使用Python调用FFmpeg命令的优势,包括简化参数、批量处理视频等。最后,作者总结了subprocess库的用法,强调了Python调用可执行程序在多媒体处理、自然科学、AI等领域的重要性,并提供了思考题引导读者思考在工作中是否可以使用Python包装命令行工具,提高工作效率。 总的来说,本文通过生动的示例和清晰的讲解,帮助读者了解了Python调用外部命令的实现方法,以及在多媒体处理领域中的应用,为读者提供了有益的技术指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 自动化办公实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • SWC603
    老師,是否可以利用python 一次過批量更改excel中的公司logo? 因原有excel 檔中公司logo更改了新設計。 謝謝你!

    作者回复: 你好,对于excel中的图片处理,步骤比较多,但是操作不难。 首先你需要将excel文件的扩展名改成zip格式, 然后对zip格式进行解压缩 利于我在后面讲解的遍历文件的方式找到图片,并替换成新的图片 最后,再将文件夹打包回zip并重命名为xlsx

    2021-03-20
    6
  • 小匚
    弱弱的问一句Windows用户可以不?

    作者回复: Windows是不行的哦,这个软件是 Linux和MAC下边实现 photoshop的一个工具,主打的就是通过命令行进行批量处理。在windows下想实现这种功能,可以使用photoshop的“动作”来完成。

    2021-02-20
    3
    3
  • 彭宏豪95
    老师好,长图拼接如果要设置图片拼接的先后顺序,是不是图片命名要规范一些,比如出现数字 1、2、3、4 之类的,然后书写的 python 程序也要添加相应的参数呢?

    作者回复: 你好,要考虑拼接顺序,确实是需要在文件名做文章的。 这也是命令行工具能够批量化但是没有可视化工具人性化的地方,有取有舍

    2021-06-30
    1
  • Geek_d4577b
    老师,课程无代码包里,没有拼接图片的代码,能补充一下吗

    编辑回复: 开篇词、01-03文章底部都有链接 专栏的完整代码位置是https://github.com/wilsonyin123/python_productivity,可点击链接下载查看。 或者通过网盘链接提取后下载,链接是: https://pan.baidu.com/s/1UvEKDCGnU6yb0a7gHLSE4Q?pwd=5wf1,提取码: 5wf1。

    2022-04-04
  • somenzz
    能否提供下不借助 subprocess 调用外部工具合并长图的代码啊,我这里是 Windows 用户。

    作者回复: windows可以使用subprocess但不可使用fork,是不是文章中的描述给你造成了误解? 参考地址 https://docs.python.org/zh-cn/3/library/subprocess.html

    2021-07-08
    2
  • 赤い悪魔
    MacOS cmd1 = ["ls", "."] returncode = run(cmd1) 报错,替换了 returncode = run('ls', '.', shell=True)

    作者回复: 我解释一下报错的原因,是因为ls命令在运行的时候需要环境变量,而环境变量是存在于shell中的。所以需要增加shell=True。

    2021-03-08
  • xiaocao
    另外问一下:外部命令还可以调用哪些?如何查找和学习?

    作者回复: 外部命令功能,可以调用任何命令行执行的命令,最常见的就是文件操作类命令, windows可以通过cmd命令作为关键字搜索,mac可以通过shell脚本作为关键字搜索到

    2021-02-21
  • 梁健
    我客观地说个存在的问题,您使用Mac OS的操作系统下的 ImageMagick进行教学,这给我们这些windows用户带来很多的不方便,命令行执行上这两个系统的命令完全不一样(哭了),我找了好多教程都没找到好的解决办法。希望后面的内容还是能够多在Windows上做。ps:今天这课是学的到现在最烦燥的一节(痛彻心扉)。

    作者回复: 先不要痛彻心扉,我在这节课主要想把调用外部命令的方式交给你,windows下也有很多软件支持命令行的,最常见的就是文件和文件夹的操作命令。你可以通过搜索引擎搜索windows 命令行自带的命令,来找到他们。在我工作的早期,接触的服务器大部分就是windows的操作系统,我需要进行定时任务和各种复杂任务的编排的时候,都会通过cmd命令行的命令来完成。有了Python进行封装之后,这些命令肯定更好用了。你可以去了解一下。

    2021-02-20
  • 文桑
    通过Python脚本解决问题的运用思路应该是私人的,个性化的,如果有软件能支持你想要解决的问题,原则是使用软件,即使是付费,这从时间成本角度来考虑是较优的,当然如果你的Python编码能力较强,对问题处理的解决方案有足够的抽象认知,在时间允许的情况下,通过Python来解决是一个很不错的方式。
    2023-05-08归属地:广东
    1
  • 天国之影
    Windows下的长图拼接代码示例(安装ImageMagick软件,安装参考博客:https://blog.csdn.net/qq_37674858/article/details/80361860): from pathlib import Path, PurePath from subprocess import run jpg_path = 'data/ch04' result_path = 'data/ch04/result.jpg' p = Path(jpg_path) # 使用命令 cmd = ['magick', 'convert', '-append'] # 增加参数 for x in p.iterdir(): if PurePath(x).match('*.jpg'): cmd.append(x) # 增加拼接结果 cmd.append(result_path) run(cmd, shell=True)
    2021-12-08
    1
    1
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部