详解如何使用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

相关文章

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下: