使用Python+FFMPEG实现视频分割与合并
前言 日常中偶尔会遇到需要简单剪辑处理视频的场景,以前我可能会拿出PR来剪辑一下,(别跟我说国产那些软件,剪辑完视频强制加上广告片头片尾恶心的一批),但是PR毕竟太重量级,剪个简单的视频都要花不少时间,直到我发现了FFmpeg…… 这个FFmpeg真的是神器,免费开源功能强大,好像很多软件都是基于这个开发的,它本身提供了命令行接口就已经能满足我们日常的简单视频处理需求,我用来简单处理视频分割、合并
目录7 个章节
前言
日常中偶尔会遇到需要简单剪辑处理视频的场景,以前我可能会拿出PR来剪辑一下,(别跟我说国产那些软件,剪辑完视频强制加上广告片头片尾恶心的一批),但是PR毕竟太重量级,剪个简单的视频都要花不少时间,直到我发现了FFmpeg……
这个FFmpeg真的是神器,免费开源功能强大,好像很多软件都是基于这个开发的,它本身提供了命令行接口就已经能满足我们日常的简单视频处理需求,我用来简单处理视频分割、合并,真的很香。
不过命令行用来处理一两个还行,如果是要处理多个视频,或者是服务端有视频处理的需求(如转码、加水印这类),就需要有一种方便的方法在代码里运用FFmpeg,于是本文打算介绍python和FFmpeg间的无缝接入调用~
ffmpy
首先FFmpeg是一个可执行文件,要在Python中调用FFmpeg并且监控它的状态,需要使用类似os.system()或者是subprocess模块来创建子进程,需要自己处理很多工作,比较麻烦……
ffmpy库就是帮我们解决这个问题的,完美整合FFmpeg,把子进程管理封装好了,我们直接输入好参数调用就完事了
代码
本文只是简单介绍python中调用ffmpeg的方法,FFmpeg的功能很强大,限于篇幅本文不能一一介绍FFmpeg的功能,想深入了解FFmpeg的同学可以查看最后的参考资料~
视频分割
例子是最简单的从一个视频中分割出一个片段的用法,并且使用了-vcodec copy -acodec copy参数,表示音频和视频都不转码提高处理视频的速度。
操作看下面的代码就知道了,输入输出,安排得明明白白,输入和输出都是字典类型,文件名是key,参数是value。
import ffmpy
ff = ffmpy.FFmpeg(
inputs={'input.mp4': None},
outputs={'output.mp4': [
'-ss', '00:01:20',
'-t', '02:00:00',
'-vcodec', 'copy',
'-acodec', 'copy'
]}
)
ff.run()
在执行ff.run()之前,可以先用print(ff.cmd)把命令打印出来看看。
上述的视频分割操作,对应的FFmpeg命令是:
ffmpeg -i input.mp4 -ss 00:01:20 -t 02:00:00 -vcodec copy -acodec copy output.mp4
视频合并
视频合并就比较麻烦了,如果直接用FFmpeg命令输入多个视频文件,输出一个的话,需要转码过程,这样速度就很慢了,失去了合并的意义。
我找了资料,只有使用文件列表的方式来合并视频是可以直接合并不转码的,不过这要求先创建一个文件用来保存视频列表,在Python中,我们可以通过创建临时文件来实现。
代码如下:
import os
import tempfile
import ffmpy
# 创建临时文件
temp_dir = tempfile.mktemp()
os.mkdir(temp_dir)
concat_file = os.path.join(temp_dir, 'concat_list.txt')
with open(concat_file, 'w', encoding='utf-8') as f:
f.write('\n'.join([
'file C:/1.mp4',
'file C:/2.mp4',
'file C:/3.mp4',
]))
ff = ffmpy.FFmpeg(
global_options=['-f', 'concat'],
inputs={concat_file: None},
outputs={'output.mp4': ['-c', 'copy']}
)
ff.run()
搞定!
参考资料
- ffmpy官方文档:https://ffmpy-zh.readthedocs.io/zh/latest/ffmpy.html
- 用 Python 代码生成视频的缩略图:https://blog.csdn.net/fei347795790/article/details/102068777
- FFMPEG 视频分割和合并:https://www.jianshu.com/p/cf1e61eb6fc8
- FFmpeg 视频处理入门教程:https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html
欢迎交流
程序设计实验室专注于互联网热门新技术探索与团队敏捷开发实践,在公众号「程序设计实验室」后台回复 linux、flutter、c#、netcore、android、kotlin、java、python 等可获取相关技术文章和资料,同时有任何问题都可以在公众号后台留言~
_EOF_
使用Python+FFMPEG实现视频分割与合并
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
编写爬虫自动下载王者荣耀官网上好看的壁纸
前言 偶然间发现王者荣耀的官网上发布了这么多好看的壁纸。 地址:http://pvp.qq.com/web201605/wallpaper.shtml 看了一下,每一张都挺喜欢的,而且还有十多页,一张一张去慢慢下载肯定不是作为一个Geeker的正确姿势。 由于最近python用得比较多,所以看到什么好玩的就想爬虫下载下来,所以看到这么多好看图片,我又“熟练”地掏出了python。 分析 这个网站长
2021-12-18 · Python · 约 1 分钟
现代 Python 程序优雅处理日期时间的避坑指南
Python 时间处理还是得踩坑?`datetime`、`time`、`calendar` 搞得人头大,Naive vs Aware 时区陷阱更是坑爹。2026 年了还用 `pytz`?标准库 `ZoneInfo` 加上 `Pendulum`、`Arrow` 才叫现代化,至少不用再写反人类的时间字符串解析。数据库存 UTC,前端传 ISO 8601,简单点行不行?
2026-03-25 · Python · 约 1 分钟
Python踩坑:类与类对象类型参数传递与使用
前言 对初学者来说,Python确实简单好用,毕竟动态类型语言,不用定义就可以拿来用,类型之间随意转换简直不要太方便,因此Python用来写写小脚本,爬虫程序什么的,没什么问题。 不过,一旦用来开发稍微大型一点的项目,例如搭建一个Web应用,就会遇到一些问题,一般缺乏经验的人都会陷入某些坑中。= =... 坑 先说坑,函数参数类型是一坑,类与类的对象这又是一坑。 虽然之前用其他静态类型语言(例如C
2022-05-27 · Python · 约 1 分钟
我用Qt和Python开发了一个视频合并工具
想合并视频,但是却找不到比较好用的工具,很多都要收费,我想着「这破功能还得收费?」,于是决定自己搞一个,一开始用Python做了一个,效果还不错,完美完成了我的视频合并任务,不过没有图形界面,想分享给朋友一起用也没办法,于是昨天用Qt写了个图形界面套上去,中间还是遇到一些问题的,通过这篇文章记录一下。 软件的界面就是这样啦,用Qt Designer随便拖出来的,和VS拖控件也差不了多少。 用起来挺
2021-12-18 · Python · 约 1 分钟
讨论
共 0 条加载评论中…