这篇教程python调用ffmpeg命令行工具便捷操作视频示例实现过程写得很实用,希望能帮到您。 文 | 李晓飞 来源:Python 技术「ID: pythonall」 最近有了一个新任务,需要将赛事视频,拆分成两分钟以内的小段,用于发布到短视频平台上。 本以为是个一次性的工作,结果赛事视频数据巨大,视频文件长短不一,完全没法手工处理,于是 Python 又一次拯救了我。 还等什么,开始干吧!
最重要的事无论做什么事情,都要去分析一下最重要的是什么,然后集中精力攻克,再继续找最重要的事。 对我们这个任务来说,不算是个大项目,不过呢,还是要找最重要的事开始,步步为营,最终将整个问题解决了。 整体来来看,我们需要从一个目录中读取视频文件,然后,对每个视频文件进行裁剪,最后将处理好的文件保存好。 在这个过程中,最重要的是什么呢?我觉得,是视频裁剪,如果不能方便的裁剪视频,其他的一切工作都是白费的,是吧。
裁剪视频现在短视频很流行,有很多视频编辑软件,功能丰富,而我们需要的只是裁剪功能,而且需要用编程的方式调用,那么最合适的莫过于 ffmpeg[1] 了。 ffmpeg 是一个命令行工具,功能强大,可以编程调用。 从 ffmpeg 官网上下载对应操作系统的版本,我下的是 Windows 版[2]。 下载后解压到一个目录,然后将目录下的 bin,配置到环境变量里。然后打开一个命令行,输入: > ffmpeg -versionffmpeg version 2021-10-07-git-b6aeee2d8b-full_build- ... 测试一下,能显示出版本信息,说明配置好了。 现在读一下文档,发现拆分视频文件的命令是: ffmpeg -i [filename] -ss [starttime] -t [length] -c copy [newfilename] ]
i 为需要裁剪的文件
ss 为裁剪开始时间
t 为裁剪结束时间或者长度
c 为裁剪好的文件存放
好了,用 Python 写一个调用: import subprocess as sp def cut_video(filename, outfile, start, length=90): cmd = "ffmpeg -i %s -ss %d -t %d -c copy %s" % (filename, start, length, outfile) p = sp.Popen(cmd, shell=True) p.wait() return - 定义了一个函数,通过参数传入
ffmpeg 需要的信息 - 将裁剪命令写成一个字符串模板,将参数替换到其中
- 用
subprocess 的 Popen 执行命令,其中参数 shell=True 表示将命令作为一个整体执行 p.wait() 很重要,因为裁剪需要一会儿,而且是另起进程执行的,所以需要等执行完成再做后续工作,否则可能找不到裁剪好的文件 这样视频裁剪工作就完成了,然后再看看什么是最重要的。
计算分段视频裁剪时,需要一些参数,特别是开始时间,如何确定呢?如果这件事做不好,裁剪工作就很麻烦。 所以看看如何计算裁剪分段。 我需要将视频裁剪成一分半的小段,那么将需要知道目标视频文件的时间长度。
获取视频长度如何获得长度呢?ffmpeg 提供了另一个命令 Python字典的基础操作 python编程实现清理微信重复缓存文件 |