Python自动化办公--长图拼接,视频合并

Python自动化办公–长图拼接,视频合并

点击访问我的博客系统,了解更多有趣内容哦😘

Python调用外部程序的原理

导入函数库[对应的Python外部功能已经开发为库]

例如:Python语言默认是不支持Excel的。那么通过导入函数库xlrd,Python就可以获得对Excel的操作能力。

需要操作Python语言之外的功能,但这个功能没有人将它开发成函数库, 那如果我们想要使用这些功能,使用的途径就是调用外部命令了,而调用外部命令就需要 Python内部函数库的subprocess模块来实现。

  • 实现机制

    它的run()函数的参数可以指定一个可以运行的程序的路径,而 Python会根据这个路径来运行可执行文件,然后再根据运行结果,以及Python的逻辑判断去进行后续的自动化处理工作。

  • 举例

    from subprocess import run,Popen,PIPE
    
    cmd = ["dir"]
    returncode = run(cmd)
    # returncode是dir命令的退出状态码,通常来说, 一个为 0 的退出码表示进程运行正常
    print(returncode)
    
    with Popen(cmd,shell=True,stdout=PIPE,stderr=PIPE,encoding="utf-8") as fs:
        fs.wait(2)
    
        files = fs.communicate()[0]
    print(files)
    
    

    这段代码中最核心的函数是run()函数和Popen类。subprocess模块就是通过这两个函数实现 的外部程序调用。

在这里插入图片描述

和import方式导入函数库的区别是,这种形式可以让你直接使用模块中的类和方法。 如果你使用 “import subprocess”方式导入subprocess库的话,在调用run()函数的时候, 就需要用 “库.函数”的形式在Python中使用库当中的函数,即“subprocess.run()”。在你 多次调用run()函数时,代码会较长,那么使用“from import”方式导入,就可以在当前代 码文件中直接使用run()函数,为代码的阅读带来更好的体验。
在这里插入图片描述在这里插入图片描述
以上就是用subprocess库实现Python调用可执行程序的方法。Python之所以被我们称作最佳的“胶水语言”,就是因为它能轻易“粘合”可执行程序。利用Python灵活的逻辑判 断、循环语法可以实现程序的批量执行和流程管理。

长图拼接

拼接图片的功能Python本身是不具备的,因此就需要引入外部命令来实现图片拼接功能。

以MacOS平台图像处理软件ImageMagick,它能对图片进行编辑、合并、切割、旋转等90多种操作, ImageMagick软件实现图片拼接的命令格式是这样的:

在这里插入图片描述

在这段命令格式中,composite命令的参数包含了多个图片文件,每个图片需要对照着文件 将图片的路径和文件名写在参数中。如果手工输入图片名称,不仅效率低,而且容易遗漏。 另外,如果需要大量重复使用composite,还需要精细调整合并结果,给composite程序增加很多参数。

p = Path(jpg_path)

# 增加图片命令
cmd = ["composite"]

#增加参数
for x in p.iterdir() if PurePath.match('*.jpg'):
    cmd.append(x)
  
# 增加结果
cmd.append(result_path)

run(cmd)

视频的拆分与合并

如何使用 subprocess库调用可执行程序,来进行视频的拆分与合并。

视频拆分的原理

你在电脑本地经常见到的视频格式是MP4,但如果要把视频放在互联网上,为了减少首次播放的加载时间,你就必须把一个MP4切分成多个文件,而且切分之后还需要把格式转换为.TS 格式的视频文件。

为什么不直接使用MP4格式,而是要把MP4格式改成.TS格式呢?这是因为.TS格式可以保证 多个文件之间的视频无缝播放,而且还会保证视频不会在播放下一个文件的时候,出现破音 或画面中断等影响用户体验的情况。

当我们将一个视频切分成多个文件的时候,就要考虑文件的播放顺序问题了。为了记录顺序,我们需要在切分之后引入一个索引文件,这个索引文件不用手动编写,我们直接使 FFmpeg命令就行了,它可以实现视频格式的转换、合并和拆分。FFmpeg命令会在切分之 后,自动产生一个以.M3U8结尾的索引文件。

我来解释一下这个索引文件。M3U8文件是指UDF-8编码格式下的M3U视频索引,播放器通 过这个索引文件就可以找到视频下所有的分段,并依次播放视频。

所以,想要使用Python进行视频拆分,我们首先需要FFmpeg命令, 然后通过Python设置FFmpeg的参数,最后再指定MP4文件和.TS文件的路径,这样就能实现拆分视频的功能了。

首先需要下载ffmpeg命令,用于把MP4切分成多段TS文件。

为了实现MP4文件格式的分割,需要使用ffmpeg非常多的参数。不过使用Python进行调用 的好处,就是你不用记住复杂的参数。我们把输入文件路径、切分大小、输出的M3U8和TS 文件指定为四个变量,这样只修改这四个变量,就可以实现拆分功能了。

相比直接使用FFmpeg,subprocess调用FFmpeg的优势就在于两点,一是不用 记住复杂参数,二是对批量转换视频非常有利

from subprocess import run
# 拆分文件的路径
input_video = "/Users/edz/Desktop/05/xxx.mp4"

# 10秒分为一个文件
segment_time = 10

# m3u8文件保存位置
# m3u8_list = "/Users/edz/Desktop/05/xxx.m3u8"

# ts文件保存位置
output_video = "/Users/edz/Desktop/05/video-%04d.ts"

cmd1 = ["ffmpeg", "-i", input_video, "-f", "segment", "-segment_time", str(segment_time), "-segment_format",
    "mpegts", "-segment_list", m3u8_list, "-c", "copy", "-bsf:v", "h264_mp4toannexb", "-map", "0", output_video]

run(cmd1)

# 合并
# ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp,https" -i index.m3u8 -c copy out.mp4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值