Python小工具:3秒钟将视频转换为音频
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者: pk 哥
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef
安装导入
用 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) # 得到文件夹下的所有文件名称
然后我们把所有视频文件后缀替换成音频的格式,视频文件格式较多,我把常见的基本都列出来了。

把相应目录下所有视频文件转换成 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 文件夹,里面就是转换好的音频文件。

用支持音频的软件打开,可以清晰听到音频。
运行报错处理
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]
完整代码
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
if __name__ == '__main__':
filepath = r"/Users/brucepk/test" # 待转换视频存放的路径
os.chdir(filepath) # 切换到改路径下
filename = os.listdir(filepath) # 得到文件夹下的所有文件名称
output_dir = r'/Users/brucepk/output' # 转换后音频文件存放的路径
mkdir_output(output_dir)
for i in range(len(filename)):
# windows电脑记得把下面两处的 "/" 换成 "\\"
changefile = filepath+"/"+filename[i]
outputfile = output_dir+"/"+filename[i].replace('mp4', 'wav').replace('mkv', 'wav')\
.replace('rmvb', 'wav').replace('3gp', 'wav').replace('avi', 'wav')\
.replace('mpeg', 'wav').replace('mpg', 'wav').replace('dat', 'asf')\
.replace('wmv', 'wav').replace('flv', 'wav').replace('mov', 'wav')\
.replace('mp4', 'wav').replace('ogg', 'wav').replace('ogm', 'wav')\
.replace('rm', 'wav')
ff = FFmpeg(
inputs={changefile: None},
outputs={outputfile: '-vn -ar 44100 -ac 2 -ab 192 -f wav'}
)
print(ff.cmd)
ff.run()
Python小工具:3秒钟将视频转换为音频的更多相关文章
- Python小工具:利用ffmpy3库3秒钟将视频转换为音频
作者 | pk 哥 来源公众号 | Python知识圈(ID:PythonCircle) 最近,有读者微信上私聊我,想让我写一篇视频批量转换成音频的文章,我答应了,周末宅家里把这个小工具做出来了. 这 ...
- Python小工具--删除svn文件
有的时候我们需要删除项目下的svn相关文件,但是SVN会在所有的目录下都创建隐藏文件.svn,手工一个个目录查找然后删除显然比较麻烦.所以这里提供了一个Python小工具用于批量删除svn的相关文件: ...
- python小工具myqr生成动态二维码
python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...
- python小工具:用python操作HP的Quality Center (二)----- 用异步方式提高速度
上接第一篇 http://www.cnblogs.com/sdet/p/6874631.html 在python中,很简单地能把http请求通过异步的方式发送,以下代码在python 3.6.0上运行 ...
- 自制 Python小工具 将markdown文件转换成Html文件
今天看到了一个Python库,名为markdown.瞬间就给了我一个灵感,那就是制作一个将markdown文件转换成html文件的小工具. 我的实验环境 操作系统: Windows 7 64位 旗舰版 ...
- 一个Json结构对比的Python小工具兼谈编程求解问题
先上代码. jsondiff.py #!/usr/bin/python #_*_encoding:utf-8_*_ import argparse import json import sys rel ...
- 有哪些你不知道的python小工具
python作为越来越流行的一种编程语言,不仅仅是因为它语言简单,有许多现成的包可以直接调用. python中还有大量的小工具,让你的python工作更有效率. 1.- 快速共享 - HTTP服务器 ...
- 分享一个 Linux 环境下,强力的Python 小工具
场景 Linux 用户,经常需要在终端查看一些数据,从文件里看 或者网络协议获取数据并查看. 比如,查看文件里的json数据:比如,查看etcd里存下的数据. 如果直接看cat 或者 curl 得到的 ...
- 周报?谁还写周报啊?不都用Python小工具: 发个周报邮件给老板就行还写周报啊?不都用Python小工具: 发个周报邮件给老板就行
缘起: 新跳槽到一家公司, 没想到第一个挑战居然是每周都要发周报. 告诉老板这周都干了些什么和下周准备干什么. 我记性不好, 常常忘事儿.所以很多时候周报都会忘记发送. 于是, 就决定写一个小工具好了 ...
随机推荐
- 第一个月.day1
1. 编辑器下载 推荐的是hbulider 开发环境 2. 浏览器 推荐chrome 谷歌浏览器学习 3. 建立技术笔记 推荐博客园 Web 本月任务 搭建静态网页. 静态页面:不需要网络请求 ...
- jvm虚拟机笔记<二> 垃圾回收与内存分配
确定对象已废弃需要两步: 利用可达性分析算法(与GC roots有关联——虚拟机栈中的对象,方法区静态对象,方法区常量对象,本地方法引用的对象)判断是否需要回收. 是否覆盖过finalize方法并执行 ...
- git合并多次commit提交
在开发项目工程中经常会遇到为了一个需求产生多次提交记录.有些是可以接受的,比如按照功能点不同进行的提交.但往往会存在这种,只为了一个小东西进行改动,比如多余文件的提交.书写不规范而不得不提交的情况.多 ...
- 松软科技带你学开发:SQL--FIRST() 函数
FIRST() 函数(原文链接 松软科技:www.sysoft.net.cn/Article.aspx?ID=3731) FIRST() 函数返回指定的字段中第一个记录的值. 提示:可使用 ORDER ...
- AI-Web1靶机渗透
先上一张图: 靶机信息及地址:https://www.vulnhub.com/entry/ai-web-1,353/ 下载到靶机后,在VMware里打开,kali使用arp-scan -l 扫到 在浏 ...
- 一文解读MVC/MVP/MVVM (转)
这篇文章对目前 GUI 应用中的 MVC.MVP 和 MVVM 架构模式进行详细地介绍. MVC 在整个 GUI 编程领域,MVC 已经拥有将近 50 年的历史了.早在几十年前,Smalltalk-7 ...
- python中字典
字典中key:不可改变的数据类型 #fromkeys 快速定义一个空字典 res = {}.fromkeys([']) print(res) 定义字典: dict1 = { 'name1':'天明', ...
- MySQL基础之数据管理【4】
外键约束的使用(只有InnoDB存储引擎支持外键) create table news_cate( id tinyint unsigned auto_increment key comment '编号 ...
- android binder 进程间通信机制2 - Binder进程间通信库实现原理
1.Service组件 使用模板类BnInterface描述,称为Binder本地对象,对应于Binder驱动程序中的Binder实体对象 实现原理图如下:
- idea安装以及使用
1. 简介1.1 IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构. J2EE ...