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

2025-03-17 13:50

本文主要是介绍详解如何使用Python提取视频文件中的音频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《详解如何使用Python提取视频文件中的音频》在多媒体处理中,有时我们需要从视频文件中提取音频,本文为大家整理了几种使用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('单视频')China编程
    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(phpsingle_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.dewww.chinasem.cnlete(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提取视频文件中的音频

方法二:

利用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('/')China编程[-1].split('.')[0]
    print("\n生成的音频名称:", v_name)
 
    video = VideoFileClip(f_path)
    audio = video.audio
 
    f_path_save = filedialog.askdirectory()
    print('\n存储地址:', f_path_save)
 
    audiChina编程o.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提取视频中的音频的资料请关注China编程(www.chinasem.cn)其它相关文章!

这篇关于详解如何使用Python提取视频文件中的音频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153792

相关文章

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

VSCode配置Anaconda Python环境的实现

《VSCode配置AnacondaPython环境的实现》VisualStudioCode中可以使用Anaconda环境进行Python开发,本文主要介绍了VSCode配置AnacondaPytho... 目录前言一、安装 Visual Studio Code 和 Anaconda二、创建或激活 conda

使用mvn deploy命令上传jar包的实现

《使用mvndeploy命令上传jar包的实现》本文介绍了使用mvndeploy:deploy-file命令将本地仓库中的JAR包重新发布到Maven私服,文中通过示例代码介绍的非常详细,对大家的学... 目录一、背景二、环境三、配置nexus上传账号四、执行deploy命令上传包1. 首先需要把本地仓中要

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

SpringIoC与SpringDI详解

《SpringIoC与SpringDI详解》本文介绍了Spring框架中的IoC(控制反转)和DI(依赖注入)概念,以及如何在Spring中使用这些概念来管理对象和依赖关系,感兴趣的朋友一起看看吧... 目录一、IoC与DI1.1 IoC1.2 DI二、IoC与DI的使用三、IoC详解3.1 Bean的存储

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

Java springBoot初步使用websocket的代码示例

《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协... 目录一、什么是websocket二、依赖坐标地址1.springBoot父级依赖2.springBoot依赖

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点