使用python实现将视频中的音频分离出来
作者:Mabel-mql 发布时间:2021-10-20 21:26:07
标签:python,视频,音频,分离
将视频中的音频分离出来
简单介绍
使用python将音频从视频当中分离出来,形成一个mp3格式的音乐。
使用环境和模块
1.python 3.7
2.moviepy----用于视频编辑的Python模块,可用于基本操作(如剪切、连接、标题插入以及视频合成、视频处理或创建高级效果。它可以读写最常见的视频格式,包括GIF。
可直接使用如下命令进行安装:
pip install moviepy -i https://pypi.douban.com/simple
相关代码
‘''
##从视频中获取音频
from moviepy.editor import VideoFileClip,AudioFileClip,afx
video = VideoFileClip(“Why Don't We-What Am I.mp4”)
audio = video.audio
audio.write_audiofile(‘what am I.mp3')
‘''
运行上述代码后,自动生成一个mp3格式音频
效果图如下
批量提取视频中的音频
1. python 提取视频中的音频
将视频中的音频分离出来,另存为MP3
方法1:FFmpeg
方法2:moviepy
2. 批量提取【目录】
提取单个文件、提取目录下所有视频的音频
1. python 提取视频中的音频
1.1 方法1:
使用 FFmpeg 方法提取音频
提取代码如下:
import os
from ffmpy import FFmpeg
# 获取文件名称
def getName(video_path):
return os.path.basename(video_path).split('.')[0]
# 提取并另存为
def run_ffmpeg(video_path: str, audio_path: str, format: str):
ff = FFmpeg(inputs={video_path: None},
outputs={audio_path: '-f {} -vn'.format(format)})
ff.run()
return audio_path
# 参数接受处理
def extract(video_path: str, tmp_dir: str, ext: str):
file_name = '.'.join(os.path.basename(video_path).split('.')[0:-1])
return run_ffmpeg(video_path, os.path.join(tmp_dir, '{}.{}'.format(getName(video_path), ext)), ext)
if __name__ == '__main__':
root = "D:\\study\\project\\python\\技巧\\提取视频音频\\"
print(extract(root + '我是不是该安静的走开.mp4', root, 'mp3'))
1.2 方法2:
moviepy
from moviepy.editor import *
root = "D:\\study\\project\\python\\技巧\\提取视频音频\\"
audio = VideoFileClip(root + "我是不是该安静的走开.mp4").audio
audio.write_audiofile(root + "我是不是该安静的走开.mp3")
2. 批量提取【目录】
提取目录下所有视频中的音频,将所有音频保存在新的目录中,文件相对目录对应
from moviepy.editor import *
import os
import filetype
import argparse
# 修改这里啊
root = "C:\\Users\\26590\\Videos\\智慧城市\\"
rootVoice = "C:\\Users\\26590\\Videos\\智慧城市voice\\"
voiceType = "mp3"
videoType = "video/mp4"
# 获取文件名称
def getName(video_name):
return os.path.basename(video_name).split('.')[0]
# 修改文件后缀例如: C:/dir/a/b.png 需要转为 C:/dir/a/b.jpg 调用函数:trAffter('C:/dir/a/b.png', 'jpg')
def trAffter(path, type):
a = path.split('/')
b = a[-1].split('.')
b[-1] = voiceType
a[-1] = '.'.join(b)
return '/'.join(a)
# 提取音频
def extractMp3(video_path):
print("提取文件:", video_path)
audio = VideoFileClip(video_path).audio
# 音频保存的路径
voice_path = video_path.replace(root, rootVoice)
print("\t音频保存至:", trAffter(voice_path, voiceType))
audio.write_audiofile(trAffter(voice_path, voiceType))
# 遍历目录下的所有文件
def getVideoList(path):
# 是否为文件
if not os.path.isdir(path):
ft = filetype.guess(path)
if ft is not None and ft.mime == videoType:
extractMp3(path)
else:
print(f"跳过文件{path}")
return
# 递归遍历
for dir in os.listdir(path):
# 音频保存的路径目录不存在新建
voice_path = path.replace(root, rootVoice)
if not os.path.exists(voice_path):
os.makedirs(voice_path)
getVideoList(os.path.join(path, dir))
# 开始
getVideoList(root)
来源:https://blog.csdn.net/Rebacca122222/article/details/125051753


猜你喜欢
- 前言相信大家都知道当声明一个变量,并且没有给赋值的情况下,它的初始值是undefined。但是在javascript中,怎么检查一个值是否为
- 获取航线信息并且制作成图航线信息航线信息查询网站本次实例使用的航班号为 CES5496查询后在network中可以寻找到如下内容https:
- 背景在微信分享开发的时候我们通常的流程是 <?php require_once "jssdk.php"; $jss
- 那么,现在如果给出一个权限编号,要去检索出用后这个权限的用户集合,就会需要在逗号分隔的多个权限编号中去匹配给出的这个权限编号。如果使用lik
- 一、安装redis:1.下载:wget http://download.redis.io/releases/redis-3.2.8.tar.
- 一、面相对象继承机制 这个实例使用UML很好的解释了继承机制。 &nb
- 我不知道没有他们我该如何生活我编写Python已有5年以上了,我的工具集通常变得越来越小,而不是越来越大。 许多工具不是必需的或无用的,而其
- 0.背景在游戏的UI中,往往会出现这样的情况:在某个战斗副本中获得了某个道具A,那么当进入主界面的时候,你会看到你的背包UI上有个小红点(意
- 简介XSStrike 是一款用于探测并利用XSS漏洞的脚本XSStrike目前所提供的产品特性:对参数进行模糊测试之后构建合适的payloa
- 在Python中,split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法
- 目录一、背景二、自动化的方案三、思路和知识点四、操作步骤4.1 初识 PyAutoGUI4.2 坐标系4.3 点击4.4 输入4.5 汉字输
- python的思维就是让我们用尽可能少的代码来解决问题。对于词频的统计,就代码层面而言,实现的方式也是有很多种的。之所以单独谈到统计词频这个
- 本文主要解决两个问题,第一个,在element-ui中,直接设置参数排序,达不到预期效果,预期是按照数字的大小进行排序;第二个,想对表格中某
- 一、异步的“并行”同时处理,相互之间没啥依赖// 执行FN1返回一个promise实例,实例中管理了
- 如下所示:# -*- coding=utf-8 -*- import urllib2import socketimport timeurls
- dbutils封装文件传送门DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来
- 傅立叶级数的介绍我就不说了,自己也是应用为主,之前一直觉得很难懂,但最近通过自己编程实现了一些函数的傅立叶级数展开之后对傅立叶 级数展开的概
- 一,问题背景作者在用tensorflow做实验时,import tensorflow忽然报错:cannot import name '
- 继承与threading.Thread实现有返回值的子类MyThread,废话不多说,大家直接看代码import threadingclas
- 一、Python变量在大多数语言中,为一个值起一个名字时,把这种行为称为“给变量赋值”或“把值存储在变量中”。不过,Python与许多其它计