Python 如何利用ffmpeg 处理视频素材


Posted in Python onNovember 27, 2021

前言

第一次处理视频素材可以手动用剪映来处理,然后再用代码进行自动化处理,不然连朝哪个方向自动化处理可能都不知道

那清楚处理流程之后,怎么用Python来处理视频素材呢?

ffmpeg!

ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序

使用这个神器,便可以处理各种视频素材内容,极度舒适

下面一行来分享一下如何使用这个神器

一、安装

首先需要在ffmpeg的官网下载最新版本,不然可能会出现各种奇怪的问题

Python 如何利用ffmpeg 处理视频素材

因为ffmpeg是个命令行工具,所以安装时需要注意将ffmpeg加入环境变量中,安装完之后,可以在终端里输入下面命令查看是否安装成功

ffmpeg -version

二、subprocess调用

因为ffmpeg是命令行工具,可以通过subprocess的调用来使用

先查看使用文档,例如拆分视频文件的命令是:

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() 很重要,因为裁剪需要一会儿,而且是另起进程执行的,所以需要等待执行完成再继续执行后面工作,不然可能找不到文件

三、ffmpy3

ffmpy3是ffmpeg的python包装器,以可以用这个包来进行处理视频

需要先用pip进行安装

pip install ffmpy3

例如修改文件格式这种操作就可以使用ffmpy3直接输出

import ffmpy3
ff = ffmpy3.FFmpeg(
     inputs={'input.mp4': None},
     outputs={'output.avi': None}
     )
ff.run()

转码

如果同时我们想使用不同的编解码器重新编码视频和音频,在输出文件同时必须指定额外的输出选项:

ff = FFmpeg(
    inputs={'input.ts': None},
    outputs={'output.mp4': '-c:a mp2 -mpeg2video'}
)
ff.cmd
ff.run()

解复用

还可以将文件的音频和视频输出成两个mp4格式的文件

ff = FFmpeg(
    inputs={'input.ts': None},
    outputs={
         'video.mp4': ['-map', '0:0', '-c:a', 'copy', '-f', 'mp4'],
         'audio.mp4': ['-map', '0:1', '-c:a', 'copy', '-f', 'mp4']
     }
 )
ff.cmd
ff.run()

复用

复用就是将输入的mp4文件和mp3文件合成同一个视频文件

这里使用 OrderedDict 来保留输入的顺序,以便它们与输出选项中的流的顺序相匹配:

from collections import OrderedDict
inputs = OrderedDict([('video.mp4', None), ('audio_1.mp3', None), ('audio_2.mp3', None)])
outputs = {'output.ts', '-map 0 -c:v h264 -map 1 -c:a:0 ac3 -map 2 -c:a:1 mp2'}
ff = FFmpeg(inputs=inputs, outputs=outputs)
ff.cmd
ff.run()

拆分成图片

处理视频素材内容还需要将视频拆成一张张图片,对图片进行处理,然后再合并成视频

在输出的文件类型改成.png结尾即可

import ffmpy3
ff = ffmpy3.FFmpeg(
     inputs={'data.MP4': None},
     outputs={'1/%d.png': None}
     )
ff.run()

四、最后

通过ffmpeg处理视频主要还是要了解它的命令用法,可以在官方文档里进行查看

然后再去了解各种热门视频的模版,自动化生成自己想要的视频指日可待 

到此这篇关于Python 如何利用ffmpeg 处理视频素材的文章就介绍到这了,更多相关Python ffmpeg 视频素材处理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python使用PythonMagick将jpg图片转换成ico图片的方法
Mar 26 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
python通过post提交数据的方法
May 06 Python
python3调用R的示例代码
Feb 23 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Python OpenCV读取png图像转成jpg图像存储的方法
Oct 28 Python
python selenium 弹出框处理的实现
Feb 26 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
python使用百度文字识别功能方法详解
Jul 23 Python
通过实例了解python property属性
Nov 01 Python
python中的错误如何查看
Jul 08 Python
python RSA加密的示例
Dec 09 Python
实操Python爬取觅知网素材图片示例
Python函数中apply、map、applymap的区别
Nov 27 #Python
python字符串拼接.join()和拆分.split()详解
Nov 23 #Python
Python装饰器的练习题
Nov 23 #Python
python人工智能human learn绘图可创建机器学习模型
利用Python实现Picgo图床工具
Nov 23 #Python
python turtle绘图命令及案例
You might like
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
理解Javascript_03_javascript全局观
2010/10/11 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
python创建和使用字典实例详解
2013/11/01 Python
理解Python中的With语句
2016/03/18 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
Python用户自定义异常的实现
2020/12/25 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
接口可以包含哪些成员
2012/09/30 面试题
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
参观考察邀请函范文
2014/01/29 职场文书
汽车广告策划方案
2014/05/31 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
就业意向协议书
2015/01/29 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
年会主持人开场白台词
2015/05/29 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python