利用Python小工具实现3秒钟将视频转换为音频


Posted in Python onOctober 29, 2019

最近,有读者微信上私聊我,想让我写一篇视频批量转换成音频的文章,我答应了,周末宅家里把这个小工具做出来了。

利用Python小工具实现3秒钟将视频转换为音频 

这样,对于有些视频学习文件,我们可以批量转换成音频文件,学习方式更多样化了。

之前也用过 ffmpeg 处理视频文件。ffmpeg 这个程序处理视频是好用,但是有没有更轻便的呢?可以不下载这个程序吗?还真有,Python 里有 ffmpeg 相关的库:ffmpy3。

ffmpy3 是 ffmpy 的一个分支,它是一个简单的 FFmpeg 命令行包装程序。ffmpy 实现了一个 Pythonic 接口,用于通过命令行执行 FFmpeg,并使用 Python 的子进程模块进行同步执行。使用 Python 的 asyncio.subprocess 模块也支持异步执行。

安装导入

用 pip 命令快速安装。

pip install ffmpy3 

导入刚才安装好的 ffmpy3 库,等下需要读取视频存放的目录和音频存放的目录,所以我们需要导入 os 模块。

import os 
from ffmpy3 import FFmpeg

创建保存音频的目录

我们需要把转换后的音频文件存放在指定的文件夹里,为了更智能,我们做一个判断,如果不存在这个目录,我们就创建,存在的话就保持不变。

def mkdir_output(output_dir): 
  existence = os.path.exists(output_dir) 
  if not existence: 
    print('创建音频存放目录') 
    os.makedirs(output_dir)  # 创建目录 
    os.chdir(output_dir)    # 切换到创建的文件夹 
    return True 
  else: 
    print('目录已存在,即将保存!') 
    return False

存放路径我们作为参数,等下调用时给出存放路径即可。

文件格式处理

我们把需要转换为音频的视频文件放在一个文件夹下面,用 os 模块把视频的文件名称读取出来,放在列表中。

filepath = r"/Users/brucepk/test"  # 待转换视频存放的路径 
os.chdir(filepath)         # 切换到改路径下 
filename = os.listdir(filepath) # 得到文件夹下的所有文件名称

然后我们把所有视频文件后缀替换成音频的格式,视频文件格式较多,我把常见的基本都列出来了。

利用Python小工具实现3秒钟将视频转换为音频 

把相应目录下所有视频文件转换成 wav 音频文件储存在指定目录下。

音频文件属性

只改文件后缀当然是不行,文件属性没有转变,这样的文件是无法读取的,我们需要用 FFmpeg 方法对转换后的音频文件赋予它音频的属性。

ff = FFmpeg( 
      inputs={changefile: None}, 
      outputs={outputfile: '-vn -ar 44100 -ac 2 -ab 192 -f wav'} 
      ) 
    print(ff.cmd) 
    ff.run()

效果

我在 test 目录下放在两个视频文件,一个是我用手机拍摄的 mp4 格式的视频,为了测试出效果,录了一段语音,另一个视频是 mkv 格式的一部电影。

利用Python小工具实现3秒钟将视频转换为音频 

运行代码后,会自动创建一个 output 文件夹,里面就是转换好的音频文件。

利用Python小工具实现3秒钟将视频转换为音频 

用支持音频的软件打开,可以清晰听到音频。

运行报错处理

1、当你运行代码时,Windows 系统可能会出现 ffmpeg 无法找到之类的报错,如下图所示。

利用Python小工具实现3秒钟将视频转换为音频 

这时,我们需要下载 FFmpeg,访问下面的地址,根据自身电脑版本下载相应安装包。

https://ffmpeg.zeranoe.com/builds/

利用Python小工具实现3秒钟将视频转换为音频 

解压 ffmpeg 文件,打开 ffmpy3.py 文件(按住Ctrl键,点击ffmpy3,快速跳转到该模块),将下面代码中参数 executable 的值改为 ffmpeg.exe 可执行文件的绝对路径。

__init__(self, executable='ffmpeg', global_options=None, inputs=None, outputs=None)

解压后的 ffmpeg.exe 文件在 bin 目录下,把路径替换掉。

利用Python小工具实现3秒钟将视频转换为音频 

修改后,再次运行,就可以顺利转换了。

2、路径拼接的问题

我的代码是在 Mac 系统中完成的,Mac 中路径是用 / 隔开,而 Windows 中是用 \,为了防止收到转义字符的影响,路径前面最好加上 r。

filepath = r"/Users/brucepk/test"

所以在路径拼接时,Windows 电脑记得 "/" 换成 "\"。

changefile = filepath+"/"+filename[i]

以上时 Mac 系统的写法,Windows 中改成:

changefile = filepath+"\\"+filename[i]

总结

以上所述是小编给大家介绍的利用Python 3秒钟将视频转换为音频,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python获取标准北京时间的方法
Mar 24 Python
Python中设置变量作为默认值时容易遇到的错误
Apr 03 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
利用Python过滤相似文本的简单方法示例
Feb 03 Python
Python绘制词云图之可视化神器pyecharts的方法
Feb 23 Python
python tqdm用法及实例详解
Jun 16 Python
pygame实现打字游戏
Feb 19 #Python
Python 实现自动导入缺失的库
Oct 29 #Python
python实现的读取网页并分词功能示例
Oct 29 #Python
python实现LRU热点缓存及原理
Oct 29 #Python
Python 中的 import 机制之实现远程导入模块
Oct 29 #Python
Centos7 下安装最新的python3.8
Oct 28 #Python
Python any()函数的使用方法
Oct 28 #Python
You might like
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
Python中使用SAX解析xml实例
2014/11/21 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Django实现文件上传和下载功能
2019/10/06 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
体育教育专业自荐信范文
2013/12/20 职场文书
中秋晚会活动方案
2014/08/31 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
MySQL分区表管理命令汇总
2022/03/21 MySQL