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实现多线程网页爬虫
Sep 06 Python
Python实现的桶排序算法示例
Nov 29 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
利用python实现对web服务器的目录探测的方法
Feb 26 Python
python分割一个文本为多个文本的方法
Jul 22 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
python3 深浅copy对比详解
Aug 12 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 Python
pycharm无法安装cv2模块问题
May 20 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
拼音码表的生成
2006/10/09 PHP
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
PHP 一个页面执行时间类代码
2010/03/05 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
vue filters的使用详解
2018/06/11 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
电信营业员自我评价分享
2014/01/17 职场文书
师范学院教师自荐书
2014/01/31 职场文书
中层干部培训方案
2014/06/16 职场文书
民主生活会剖析材料
2014/09/30 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
教师师德表现自我评价
2015/03/05 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
安全教育主题班会总结
2015/08/14 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书