做者 | pk 哥来源公众号 | Python知识圈(ID:PythonCircle)微信
最近,有读者微信上私聊我,想让我写一篇视频批量转换成音频的文章,我答应了,周末宅家里把这个小工具作出来了。异步
这样,对于有些视频学习文件,咱们能够批量转换成音频文件,学习方式更多样化了。async
以前也用过 ffmpeg 处理视频文件。ffmpeg 这个程序处理视频是好用,可是有没有更轻便的呢?能够不下载这个程序吗?工具
还真有,Python 里有 ffmpeg 相关的库:ffmpy3。学习
ffmpy3 是 ffmpy 的一个分支,它是一个简单的 FFmpeg 命令行包装程序。ffmpy 实现了一个 Pythonic 接口,用于经过命令行执行 FFmpeg,并使用 Python 的子进程模块进行同步执行。使用 Python 的 asyncio.subprocess 模块也支持异步执行。测试
用 pip 命令快速安装。ui
pip install ffmpy3 复制代码
导入刚才安装好的 ffmpy3 库,等下须要读取视频存放的目录和音频存放的目录,因此咱们须要导入 os 模块。spa
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复制代码
存放路径咱们做为参数,等下调用时给出存放路径便可。code
咱们把须要转换为音频的视频文件放在一个文件夹下面,用 os 模块把视频的文件名称读取出来,放在列表中。
filepath = r"/Users/brucepk/test" # 待转换视频存放的路径
os.chdir(filepath) # 切换到改路径下
filename = os.listdir(filepath) # 获得文件夹下的全部文件名称复制代码
而后咱们把全部视频文件后缀替换成音频的格式,视频文件格式较多,我把常见的基本都列出来了。
把相应目录下全部视频文件转换成 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 格式的一部电影。
运行代码后,会自动建立一个 output 文件夹,里面就是转换好的音频文件。
用支持音频的软件打开,能够清晰听到音频。
一、当你运行代码时,Windows 系统可能会出现 ffmpeg 没法找到之类的报错,以下图所示。
这时,咱们须要下载 FFmpeg,访问下面的地址,根据自身电脑版本下载相应安装包。
https://ffmpeg.zeranoe.com/builds/复制代码
解压 ffmpeg 文件,打开 ffmpy3.py 文件(按住Ctrl键,点击ffmpy3,快速跳转到该模块),将下面代码中参数 executable 的值改成 ffmpeg.exe 可执行文件的绝对路径。
__init__(self, executable='ffmpeg', global_options=None, inputs=None, outputs=None)复制代码
解压后的 ffmpeg.exe 文件在 bin 目录下,把路径替换掉。
修改后,再次运行,就能够顺利转换了。
二、路径拼接的问题个人代码是在 Mac 系统中完成的,Mac 中路径是用 / 隔开,而 Windows 中是用 ,为了防止收到转义字符的影响,路径前面最好加上 r。
filepath = r"/Users/brucepk/test"复制代码
因此在路径拼接时,Windows 电脑记得 "/" 换成 "\"。
changefile = filepath+"/"+filename[i]复制代码
以上时 Mac 系统的写法,Windows 中改为:
changefile = filepath+"\\"+filename[i]复制代码
源码放在 GitHub 上了,公众号后台回复「视频转换」获取源码地址,以为不错,GitHub 上给个 star
ps:文中开头说以前用过 ffmpeg 处理视频文件,当时是把 MJ 的舞蹈视频转换为字符,让字符跟随 MJ 一块儿舞动,感兴趣的能够看看:让代码和迈克杰克逊一块儿跳舞
本文由博客一文多发平台 OpenWrite 发布!