使用Python+FFMPEG实现视频分割与合并
前言
日常中偶尔会遇到需要简单剪辑处理视频的场景,以前我可能会拿出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 等可获取相关技术文章和资料,同时有任何问题都可以在公众号后台留言~

- 博客园:https://www.cnblogs.com/deali/
- 打代码直播间:https://live.bilibili.com/11883038
- 知乎:https://www.zhihu.com/people/dealiaxy
使用Python+FFMPEG实现视频分割与合并的更多相关文章
- python+ffmpeg切割视频
什么是ffmpeg 1.1 简介 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包 ...
- 分享macOS平台好用的视频分割、合并视频、提取音频、分离音频、音频转码的工具CCVideo
CCVideo 是一款运行在macOS上可分割视频(可多段分割).合并视频.提取音频.分离音频.音频转码的工具,操作方便,只需简单几步,便可轻松完成. 下载地址
- python学习——大文件分割与合并
在平常的生活中,我们会遇到下面这样的情况: 你下载了一个比较大型的游戏(假设有10G),现在想跟你的同学一起玩,你需要把这个游戏拷贝给他. 然后现在有一个问题是文件太大(我们不考虑你有移动硬盘什么的情 ...
- python实现大文件分割与合并
小U盘传大电影时可以免去用winrar分割文件时的压缩和解压缩过程. file.py import sys from os.path import exists fileCount = 0 def s ...
- 【C++程序员学 python】python split and join 分割与合并
感觉这名字有点不对,但不知道用什么好,就将就吧. 坑爹啊,居然要把符号放在前面.
- ffmpeg显示视频
项目最近需要实现播放视频功能,这个在上家公司就做过.虽然跟之前的场景不一样,有以前的功底还是很快可以解决,事实也确实如此.在使用DShow处理完视频分割与合并后,继续使用DShow显示视频,很快即完成 ...
- 基于opencv+ffmpeg的镜头分割
镜头分割常常被用于视频智能剪辑.视频关键帧提取等场景. 本文给出一种解决镜头分割问题的思路,可分为两个步骤: 1.根据镜头分割算法对视频进行分割标记 核心在于镜头分割算法,这里简单描述一种算法思路:r ...
- FFmpeg:视频转码、剪切、合并、播放速调整
原文:https://fzheng.me/2016/01/08/ffmpeg/ FFmpeg:视频转码.剪切.合并.播放速调整 2016-01-08 前阵子帮导师处理项目 ppt,因为插入视频的格式问 ...
- ffmpeg实现视频文件合并/截取预览视频/抽取音频/crop(裁剪)(ffmpeg4.2.2)
一,ffmpeg的安装 请参见: https://www.cnblogs.com/architectforest/p/12807683.html 说明:刘宏缔的架构森林是一个专注架构的博客,地址:ht ...
- NET 2.0(C#)调用ffmpeg处理视频的方法
另外:ffmpeg的net封装库 http://www.intuitive.sk/fflib/ NET 2.0 调用FFMPEG,并异步读取输出信息的代码...public void ConvertV ...
随机推荐
- --{module_name}_binary_host_mirror和--{module_name}_binary_site
--{module_name}_binary_host_mirror和--{module_name}_binary_site demo // .npmrc文件 sass_binary_site=htt ...
- IIS通过ARR实现负载均衡
一.实现整体方式介绍 项目中部署在windows服务器上的项目,需要部署负载均衡,本来想用nginx来配置的,奈何iis上有几个项目,把80端口和443端口占用了,nginx就用不了了(因为通过域名访 ...
- 7.elasticsearch重建索引
什么时候需要重建索引 索引的mappings发生变更 索引的setting发生变更 集群内,集群间,需要做数据迁移 update by query 在现有索引重建 比如需要给一个text新增一个子字段 ...
- 文心一言 VS 讯飞星火 VS chatgpt (173)-- 算法导论13.3 2题
二.用go语言,将关键字41.38.31.12.19.8连续地插入一棵初始为空的红黑树之后,试画出该结果树. 文心一言: 首先,我们需要了解红黑树的性质.红黑树是一种自平衡二叉查找树,其中每个节点要么 ...
- JavaFx设置图标(二)
JavaFx设置图标(二) JavaFX 从入门入门到入土系列 JavaFx设置图标,需要注意,我这里是Maven管理项目 需要将图片放到resources/img/avatar.jpg下 impor ...
- ChatGPT 同类工具推荐
原文: https://openaigptguide.com/chatgpt-similar%20software/ ChatGPT是一款由美国OpenAI公司开发的人工智能语言模型,类似的软件有: ...
- 如何强制SQL走性能更优的hash join
本文分享自华为云社区<[SQL优化]为什么有时候无法走执行性能更优的hashjoin>,作者: leapdb. 1. hash join通常优于nestloop join 通常nestlo ...
- 云小课|RDS for MySQL参数模板一键导入导出,参数配置轻松搞定
摘要:云数据库RDS for MySQL支持参数模板的导入和导出功能. 本文分享自华为云社区<[云小课][第56课]RDS for MySQL参数模板一键导入导出,参数配置轻松搞定>,作者 ...
- 来喽,来喽,Python 3.9正式版发布了~~~
摘要:2020年10月5日,在全国人员欢度国庆节和中秋节时,Python 3.9 悄摸摸地正式发布了. 2020年10月5日,在全国人员欢度国庆节和中秋节时,Python 3.9 悄摸摸地正式发布了. ...
- 解读革命性容器集群CCE Turbo:计算、网络、调度全方位加速
摘要:CCE Turbo是华为云推出的一款革命性容器集群. 5月31日,在华为云Techwave云基础设施技术专题日上,华为云容器批量计算首席架构师马达对CCE Turbo的技术内幕进行了深度解读,C ...