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实现的登录和操作开心网脚本分享
Jul 09 Python
深入理解python中的atexit模块
Mar 07 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
Sep 26 Python
Python使用crontab模块设置和清除定时任务操作详解
Apr 09 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
python实现连连看辅助之图像识别延伸
Jul 17 Python
Python 实现自动导入缺失的库
Oct 29 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 Python
Python操作Excel把数据分给sheet
May 20 Python
Python 实现一个计时器
Jul 28 Python
如何利用Matlab制作一款真正的拼图小游戏
May 11 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 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
封装一个PDO数据库操作类代码
2009/09/09 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
Python功能键的读取方法
2015/05/28 Python
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python字典排序的方法
2019/10/12 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
彪马日本官网:PUMA日本
2019/01/31 全球购物
linux下进程间通信的方式
2013/01/23 面试题
社会学专业学生职业规划书
2014/02/07 职场文书
公司总经理任命书
2014/06/05 职场文书
软件测试专业推荐信
2014/09/18 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python