详解如何使用Python提取视频文件中的音频

 更新时间:2025年03月17日 10:53:29   作者:力江  
在多媒体处理中,有时我们需要从视频文件中提取音频,本文为大家整理了几种使用Python编程语言提取视频文件中的音频的方法,大家可以根据需要进行选择

引言

在多媒体处理中,有时我们需要从视频文件中提取音频,以便进一步处理或分析。本文将介绍如何使用Python编程语言提取视频文件中的音频,并提供了一个简单的GUI界面来方便用户操作。

1.引言部分:介绍音频提取的背景和重要性,以及使用Python编程进行提取的优势。

2.环境准备:提醒读者在运行代码之前需要安装FFmpeg工具,并将其路径添加到系统环境变量中。

3.代码解析:

  • 介绍主要的库和模块:Tkinter、messagebox、filedialog、subprocess和os。
  • 解释代码的主要功能和逻辑:包括单文件模式和多文件模式,以及每个模式下的具体操作步骤。
  • 对关键代码进行注释和说明,帮助读者理解代码的实现原理。

4.单文件模式详解:

  • 介绍单文件模式的操作流程和界面布局。
  • 解释选择视频文件和音频输出路径的方式。
  • 说明如何使用FFmpeg命令提取视频文件中的音频,并保存到指定路径。
  • 演示单文件模式的运行效果。

5.多文件模式详解:

  • 介绍多文件模式的操作流程和界面布局。
  • 解释选择视频文件夹和音频输出路径的方式。
  • 说明如何遍历文件夹中的视频文件,并使用FFmpeg命令逐个提取音频。
  • 演示多文件模式的运行效果

6.总结和展望:

总结本文介绍了如何使用Python编程语言提取视频文件中的音频。

提醒读者可以根据自己的需求对代码进行扩展和优化,例如添加进度条、处理异常情况等。

展望未来可能的改进和应用领域。

代码部分

import tkinter as tk
from tkinter import messagebox
from tkinter import filedialog
import subprocess
import os


# 单文件
def single_video_mode():
    def choose_single_video():
        video_path = filedialog.askopenfilename()
        video_input.delete(0, tk.END)
        video_input.insert(0, video_path)

    def choose_audio_output():
        audio_output_path = filedialog.asksaveasfilename(defaultextension='.wav')
        audio_output_input.delete(0, tk.END)
        audio_output_input.insert(0, audio_output_path)

    def extract_audio():
        video_path = video_input.get()
        audio_output_path = audio_output_input.get()
        command = ['ffmpeg', '-i', video_path, '-vn', '-acodec', 'pcm_s16le', audio_output_path]
        subprocess.call(command)
        messagebox.showinfo('提取完成', '音频提取完成!')

    root.withdraw()

    single_video_window = tk.Toplevel()
    single_video_window.title('单视频')
    single_video_window.geometry('350x200')

    video_label = tk.Label(single_video_window, text='视频路径:')
    video_label.place(x=32, y=3.5)

    video_input = tk.Entry(single_video_window)
    video_input.place(x=95, y=3.5)

    video_button = tk.Button(single_video_window, text='选择视频', command=choose_single_video, bg="#FFD45E")
    video_button.place(x=248, y=0)

    audio_output_label = tk.Label(single_video_window, text='音频输出路径:')
    audio_output_label.place(x=10, y=53.5)

    audio_output_input = tk.Entry(single_video_window)
    audio_output_input.place(x=95, y=53.5)

    audio_output_button = tk.Button(single_video_window, text='选择路径', command=choose_audio_output, bg="#FFCCBE")
    audio_output_button.place(x=248, y=50)

    start_button = tk.Button(single_video_window, text='开始程序', command=extract_audio, bg="#499C54")
    start_button.place(x=70, y=130)

    exit_button = tk.Button(single_video_window, text='退出程序', command=root.quit, bg="#C75450")
    exit_button.place(x=220, y=130)


# 多文件
def multi_video_mode():
    def choose_videos_path():
        videos_path = filedialog.askdirectory()
        videos_path_input.delete(0, tk.END)
        videos_path_input.insert(0, videos_path)

    def choose_audio_output():
        audio_output_path = filedialog.asksaveasfilename()
        audio_output_input.delete(0, tk.END)
        audio_output_input.insert(0, audio_output_path)

    def extract_audio():
        videos_path = videos_path_input.get()
        audio_output_path = audio_output_input.get()
        for file in os.listdir(videos_path):
            if file.endswith('.mp4'):
                video_path = os.path.join(videos_path, file)
                base_name = os.path.splitext(file)[0]
                audio_path = os.path.join(audio_output_path, base_name + '.wav')
                command = ['ffmpeg', '-i', video_path, '-vn', '-acodec', 'pcm_s16le', audio_path]
                subprocess.call(command)

    root.withdraw()

    multi_video_window = tk.Toplevel()
    multi_video_window.title('多视频')
    multi_video_window.geometry('350x200')

    videos_path_label = tk.Label(multi_video_window, text='视频文件夹路径:')
    videos_path_label.place(x=10, y=3.5)

    videos_path_input = tk.Entry(multi_video_window)
    videos_path_input.place(x=105, y=3.5)

    videos_path_button = tk.Button(multi_video_window, text='选择文件夹', command=choose_videos_path, bg="#FFD45E")
    videos_path_button.place(x=255, y=0)

    audio_output_label = tk.Label(multi_video_window, text='音频保存路径:')
    audio_output_label.place(x=20, y=53.5)

    audio_output_input = tk.Entry(multi_video_window)
    audio_output_input.place(x=105, y=53.5)

    audio_output_button = tk.Button(multi_video_window, text='选择路径', command=choose_audio_output, bg="#FFCCBE")
    audio_output_button.place(x=255, y=50)

    start_button = tk.Button(multi_video_window, text='开始程序', command=extract_audio, bg="#499C54")
    start_button.place(x=70, y=130)

    exit_button = tk.Button(multi_video_window, text='退出程序', command=root.quit, bg="#C75450")
    exit_button.place(x=220, y=130)


root = tk.Tk()
root.title('欢迎使用力江视频中提取音频的工具')
root.geometry('200x100')
label = tk.Label(root, text="欢饮使用力江视频提取音频工具", fg="red")
label.place(x=10, y=10)
single_video_button = tk.Button(root, text='单视频', command=single_video_mode, bg="#857022")
single_video_button.place(x=25, y=50)

multi_video_button = tk.Button(root, text='多视频', command=multi_video_mode, bg="#D3F899")
multi_video_button.place(x=125, y=50)

root.mainloop()

方法扩展

方法一:

安装第三方库

首先,通过第三方库ffmpegMoviePy对视频文件进行操作。

pip install ffmpeg moviepy

具体代码

import moviepy.editor as mp

def extract_audio(videos_file_path):
    my_clip = mp.VideoFileClip(videos_file_path)
    return my_clip

if __name__ == "__main__":
    file_path = r'./Greatest_art.flv'
    my_clip = extract_audio(file_path)
    my_clip.audio.write_audiofile(f'最伟大的作品.mp3')

通过修改文件路径file_path,提取视频文件,这里视频文件的默认路径为代码所在目录,并对所提取到的音频文件进行命名。代码与数据路径如下:

方法二:

利用python库moviepy或者ffmpeg处理

# 这是一个示例 Python 脚本。
from moviepy.editor import *
import tkinter as tk
from tkinter import filedialog
 
# 打开视频地址文件,选择提取的存储地址,从视频中提取音频
if __name__ == '__main__':
    # 实例化
    root = tk.Tk()
    root.withdraw()
 
    # 获取文件夹路径
    f_path = filedialog.askopenfilename()
    print('\n获取的文件地址:', f_path)
    v_name = f_path.split('/')[-1].split('.')[0]
    print("\n生成的音频名称:", v_name)
 
    video = VideoFileClip(f_path)
    audio = video.audio
 
    f_path_save = filedialog.askdirectory()
    print('\n存储地址:', f_path_save)
 
    audio.write_audiofile(f_path_save+'/'+v_name+'.mp3')

方法三:

使用Python的moviepy库来提取视频文件中的音频

安装必要的第三方库:moviepy

安装方法:

pip install moviepy
#或者用清华的镜像进行安装(快)
pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple

代码

import os
import moviepy.editor as mp
 
def extract_audio(videos_file_path,audio_file_path):
    my_clip = mp.VideoFileClip(videos_file_path)
    my_clip.audio.write_audiofile(f'{audio_file_path}.mp3')
 
if __name__ == '__main__':
    # 视频路径
    MV_Path = "***"
    # 音频存储路径
    store_path = "***"
    mv_list = os.listdir(MV_Path)
    print(mv_list)
    for name in mv_list:
        para1 = MV_Path+ "\\" + name
        para2 = store_path + "\\" + name[:-4]
        extract_audio(para1,para2)
        print(f"{name}转换完毕!")

以上就是详解如何使用Python提取视频文件中的音频的详细内容,更多关于Python提取视频中的音频的资料请关注脚本之家其它相关文章!

相关文章

  • Python NumPy数组利器之np.zeros函数详解与应用实例

    Python NumPy数组利器之np.zeros函数详解与应用实例

    在Python的科学计算库NumPy中,numpy.zeros()是一个非常重要的函数,它用于创建一个指定形状和数据类型的全零数组,这篇文章主要给大家介绍了关于Python NumPy数组利器之np.zeros函数详解与应用实例的相关资料,需要的朋友可以参考下
    2024-06-06
  • Python内置库之webbrowser模块用法详解

    Python内置库之webbrowser模块用法详解

    webbrowser模块是Python自带的标准库,无需安装,可以直接在Python中使用该模块来打开网页、PDF文件等,本文给大家详细介绍了Python webbrowser模块用法,需要的朋友可以参考下
    2023-08-08
  • Python获取时光网电影数据的实例代码

    Python获取时光网电影数据的实例代码

    这篇文章主要介绍了Python获取时光网电影数据,基本原理是先通过requests库,通过时光网自带的电影数据API接口,获取到指定的电影数据,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • python列表推导式入门学习解析

    python列表推导式入门学习解析

    这篇文章主要介绍了python列表推导式入门学习解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Python3 操作符重载方法示例

    Python3 操作符重载方法示例

    这篇文章主要介绍了Python3 操作符重载方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Python切割图片成九宫格的示例代码

    Python切割图片成九宫格的示例代码

    这篇文章主要介绍了Python切割图片成九宫格的相关知识,本文通过截图实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • 一步真实解决AttributeError:‘Upsample‘ object has no attribute‘recompute_scale_factor‘的问题

    一步真实解决AttributeError:‘Upsample‘ object has no attribute‘

    这篇文章主要介绍了解决解决AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘的问题,本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • python实现可逆简单的加密算法

    python实现可逆简单的加密算法

    这篇文章主要为大家详细介绍了python实现可逆简单的加密算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Python ArgumentParse的subparser用法说明

    Python ArgumentParse的subparser用法说明

    这篇文章主要介绍了Python ArgumentParse的subparser用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python selenium 三种等待方式详解(必会)

    Python selenium 三种等待方式详解(必会)

    这篇文章主要介绍了Python selenium 三种等待方式详解(必会)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09

最新评论