首页 > 编程语言 > 详细

Python小工具:3秒钟将视频转换为音频

时间:2019-12-02 17:03:27      阅读:90      评论:0      收藏:0      [点我收藏+]

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: pk 哥

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

安装导入

用 pip 命令快速安装。

pip install ffmpy3 

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

import os
from ffmpy3 import FFmpeg

创建保存音频的目录

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

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

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

文件格式处理

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

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

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

技术分享图片

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

音频文件属性

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

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

效果

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

技术分享图片

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

技术分享图片

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

运行报错处理

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

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

技术分享图片

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

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

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

技术分享图片

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

2、路径拼接的问题

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

filepath = r"/Users/brucepk/test"

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

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

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

changefile = filepath+"\\"+filename[i]
完整代码
 1 import os
 2 from ffmpy3 import FFmpeg
 3 ?
 4 def mkdir_output(output_dir):
 5     existence = os.path.exists(output_dir)
 6     if not existence:
 7         print(创建音频存放目录)
 8         os.makedirs(output_dir)    # 创建目录
 9         os.chdir(output_dir)       # 切换到创建的文件夹
10         return True
11     else:
12         print(目录已存在,即将保存!)
13         return False
14 ?
15 ?
16 if __name__ == __main__:
17     filepath = r"/Users/brucepk/test"   # 待转换视频存放的路径
18     os.chdir(filepath)                  # 切换到改路径下
19     filename = os.listdir(filepath)     # 得到文件夹下的所有文件名称
20 ?
21     output_dir = r/Users/brucepk/output    # 转换后音频文件存放的路径
22     mkdir_output(output_dir)
23     for i in range(len(filename)):
24         # windows电脑记得把下面两处的 "/" 换成 "\\"
25         changefile = filepath+"/"+filename[i]
26         outputfile = output_dir+"/"+filename[i].replace(mp4, wav).replace(mkv, wav)27             .replace(rmvb, wav).replace(3gp, wav).replace(avi, wav)28             .replace(mpeg, wav).replace(mpg, wav).replace(dat, asf)29             .replace(wmv, wav).replace(flv, wav).replace(mov, wav)30             .replace(mp4, wav).replace(ogg, wav).replace(ogm, wav)31             .replace(rm, wav)
32 ?
33         ff = FFmpeg(
34             inputs={changefile: None},
35             outputs={outputfile: -vn -ar 44100 -ac 2 -ab 192 -f wav}
36             )
37         print(ff.cmd)
38         ff.run()

 

Python小工具:3秒钟将视频转换为音频

原文:https://www.cnblogs.com/Qqun821460695/p/11971703.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!