python实现批量视频提取音频

news/2025/1/20 11:25:19/

1、安装依赖库

首先需要安装依赖库moviepy

python">pip install moviepy

2、找到对应目录

利用listdir列出目标文件夹以下文件,利用os.path.join进行路径拼接,os.path.splitext()[0]扣掉。MP4后缀,加入所需形式,(这里用的是‘.wav’)得到对应音频文件名。

python">import os
from moviepy import VideoFileClip
if __name__ == "__main__":dataset_dir = "/data"output_dir = "/data/audio"tvt_dirs = ['train', 'dev','test']for tvt_dir in tvt_dirs:cate_dir=os.listdir(os.path.join(dataset_dir,tvt_dir))for cate in cate_dir:video_dirs=os.listdir(os.path.join(dataset_dir,tvt_dir,cate))for video_dir in video_dirs:video_dir_path=os.path.join(dataset_dir,tvt_dir,cate,video_dir)video_name = os.path.splitext(video_dir)[0]output_dir_path = os.path.join(output_dir, tvt_dir, cate, f"{video_name}.wav")os.makedirs(os.path.dirname(output_dir_path), exist_ok=True)video=VideoFileClip(video_dir_path)audio=video.audioaudio.write_audiofile(output_dir_path, codec="pcm_s16le")  # 设置采样率为 16000 Hz

3、创建对应文件名,实现转换

这里要利用os.makedirs()确定文件路径存在

python">os.makedirs(os.path.dirname(output_dir_path), exist_ok=True)

然后根据需要的音频格式和采样帧率进行设置,下面附上write_audiofile 的具体使用方法

python">video=VideoFileClip(video_dir_path)
audio=video.audio
audio.write_audiofile(output_dir_path, codec="pcm_s16le")  # 设置采样率为 16000 Hz

1. write_audiofile 方法

write_audiofile 是 moviepy 中用于将音频保存为文件的方法。它的基本语法如下:

audio.write_audiofile(filename, codec=None, bitrate=None, fps=None, nbytes=2, buffersize=2000, verbose=True, logger='bar')
参数说明:
  • filename:输出文件的路径和名称(包括扩展名,如 .wav.mp3 等)。

  • codec:音频编码器(如 pcm_s16lelibmp3lame 等)。如果不指定,moviepy 会根据文件扩展名自动选择编码器。

  • bitrate:音频比特率(如 128k192k 等),影响音频质量。

  • fps:音频采样率(如 4410016000 等)。

  • nbytes:音频样本的字节数(如 2 表示 16 位音频)。

  • buffersize:缓冲区大小。

  • verbose:是否显示进度条。

  • logger:日志输出方式(如 'bar' 显示进度条)。


2. 常见音频文件格式与编码格式

以下是常见的音频文件格式及其对应的编码格式:

文件格式扩展名常用编码格式说明
WAV.wavpcm_s16le无损音频格式,常用于高质量音频存储。
MP3.mp3libmp3lame有损压缩格式,文件小,适合存储和传输。
AAC.m4aaac有损压缩格式,常用于苹果设备和流媒体。
OGG.ogglibvorbis开源有损压缩格式,适合网络传输。
FLAC.flacflac无损压缩格式,文件比 WAV 小,适合高质量音频存储。
AIFF.aiffpcm_s16be无损音频格式,常用于专业音频处理。

3. 示例代码

(1)保存为 WAV 文件
audio.write_audiofile("output.wav", codec="pcm_s16le", fps=44100)
  • 编码格式pcm_s16le(16 位 PCM 编码)。

  • 采样率44100 Hz(CD 质量)。

(2)保存为 MP3 文件
audio.write_audiofile("output.mp3", codec="libmp3lame", bitrate="192k")
  • 编码格式libmp3lame(MP3 编码)。

  • 比特率192k(高质量 MP3)。

(3)保存为 AAC 文件
audio.write_audiofile("output.m4a", codec="aac", bitrate="128k")
  • 编码格式aac(AAC 编码)。

  • 比特率128k(标准质量)。

(4)保存为 OGG 文件
audio.write_audiofile("output.ogg", codec="libvorbis", bitrate="128k")
  • 编码格式libvorbis(OGG 编码)。

  • 比特率128k(标准质量)。

(5)保存为 FLAC 文件
audio.write_audiofile("output.flac", codec="flac")
  • 编码格式flac(无损压缩)。

(6)保存为 AIFF 文件
audio.write_audiofile("output.aiff", codec="pcm_s16be")
  • 编码格式pcm_s16be(16 位 PCM 编码,大端序)。


4. 注意事项

(1)编码器支持
  • 确保 FFMPEG 支持指定的编码器。可以通过以下命令查看 FFMPEG 支持的编码器:

    ffmpeg -codecs
  • 如果编码器不支持,write_audiofile 会抛出错误。

(2)文件扩展名与编码器匹配
  • 如果未指定 codec 参数,moviepy 会根据文件扩展名自动选择编码器。

  • 例如,保存为 .wav 文件时,默认使用 pcm_s16le 编码器。

(3)比特率与质量
  • 比特率越高,音频质量越好,但文件大小也越大。

  • 常用比特率:

    • MP3:128k(标准)、192k(高质量)、320k(极高)。

    • AAC:128k(标准)、192k(高质量)。

(4)采样率
  • 采样率越高,音频质量越好,但文件大小也越大。

  • 常用采样率:

    • 44100 Hz(CD 质量)。

    • 48000 Hz(DVD 质量)。

    • 16000 Hz(语音质量)。


5. 总结

文件格式扩展名编码格式适用场景
WAV.wavpcm_s16le高质量音频存储
MP3.mp3libmp3lame通用音频存储和传输
AAC.m4aaac苹果设备和流媒体
OGG.ogglibvorbis开源格式,适合网络传输
FLAC.flacflac无损压缩,适合高质量音频存储
AIFF.aiffpcm_s16be专业音频处理

通过正确选择文件格式和编码格式,可以满足不同的音频存储和处理需求。如果还有其他问题,请随时告知!


http://www.ppmy.cn/news/1564646.html

相关文章

浅谈云计算16 | 存储虚拟化技术

存储虚拟化技术 一、块级存储虚拟化基础2.1 LUN 解析2.1.1 LUN 概念阐释2.1.2 LUN 功能特性 2.2 Thick LUN与Thin LUN2.2.1 Thick LUN特性剖析2.2.2 Thin LUN特性剖析 三、块级存储虚拟化技术实现3.1 基于主机的实现方式3.1.1 原理阐述3.1.2 优缺点评估 3.2 基于存储设备的实现…

使用 Python 开发一个 AI Agent 自媒体助手示例

1. 项目背景 随着自媒体行业的快速发展,内容创作者需要处理大量重复性任务,例如撰写文章、生成标题、优化关键词、分析数据等。通过开发一个 AI Agent 自媒体助手,可以帮助创作者高效完成这些任务,节省时间并提升内容质量。 本文…

使用 ChatGPT 生成和改进你的论文

文章目录 零、前言一、操作引导二、 生成段落或文章片段三、重写段落四、扩展内容五、生成大纲内容六、提高清晰度和精准度七、解决特定的写作挑战八、感受 零、前言 我是虚竹哥,目标是带十万人玩转ChatGPT。 ChatGPT 是一个非常有用的工具,可以帮助你…

【机器学习】机器学习引领数学难题攻克:迈向未知数学领域的新突破

我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 一、引言 在数学的浩瀚领域中,存在着诸多长期未解的难题,这些难题犹如高耸的山峰,吸引着无数数…

多线程中的上下文切换

多线程中的上下文切换 上下文切换是指 CPU 从一个线程转到另一个线程时,需要保存当前线程的上下文状态,恢复另一个线程的上下文状态,以便于下一次恢复执行该线程时能够正确地运行。在多线程中,上下文切换的开销比直接用单线程大&…

reverse学习总结-查表代换

一.easygui-查表代换-整体循环位移 是exe文件,先运行一下 猜测是输入flag让后验证的, 查壳是64位的,ida直接打开 int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {HWND Window; // rbxWNDCLASSW WndClass; // [rsp60…

13-1类与对象

&#xff08;一&#xff09;封装-属性和行为作为 定义语法&#xff1a;class 类名{访问权限:属性/行为}; 类中的属性和行为统称为成员 属性称成员属性、成员变量 行为称为成员函数、成员方法 #include <iostream> using namespace std; const double pai3.14; cl…

Tesla Free - Fall attack:特斯拉汽车网络安全攻击事件分析

文章目录 一、Tesla Free - Fall attack&#xff1a;特斯拉汽车网络安全事件纪要1. 引言2. 攻击流程2.1 攻击切入点2.2 系统入侵2.3 CAN 总线操控 3. 影响后果4. 特斯拉应对措施5. 研究意义二、安全攻击事件技术分析以及相应的检测和缓解措施 一、Tesla Free - Fall attack&…