python实现批量视频提取音频

embedded/2025/1/19 3:31:10/

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/embedded/155124.html

相关文章

Hooks扩展

Hooks,即钩子函数,用于在某些内核代码中插入一个占位。当执行到该位置时,执行自定义的功能代码,避免直接修改原始的内核代码。 在内核外部,填充该函数的实现,不必修改空闲任务的代码。 tHooks.c #include &…

剑指Offer|LCR 031. LRU 缓存

LCR 031. LRU 缓存 运用所掌握的数据结构,设计和实现一个 LRU (Least Recently Used,最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存…

Redis延迟队列详解

以下是对 Redis 延迟队列的详细解释: 一、什么是 Redis 延迟队列 Redis 延迟队列是一种使用 Redis 实现的消息队列,其中的消息在被消费之前会等待一段时间,这段时间就是延迟时间。延迟队列常用于一些需要延迟处理的任务场景,例如订…

2025年01月17日Github流行趋势

项目名称:MiniCPM-o 项目地址url:https://github.com/OpenBMB/MiniCPM-o 项目语言:Python 历史star数:14181 今日star数:371 项目维护者:yiranyyu, iceflame89, yaoyuanTHU, LDLINGLINGLING, tc-mb 项目简介…

商城系统中的常见 BUG

以下是商城系统中一些常见的 BUG: 功能与操作类 支付问题:如无法成功完成支付,支付过程中出现延迟、错误或订单重复支付等,还可能因网络问题导致支付失败或数据不一致。 登录 / 注册问题:用户在注册或登录时可能遇到…

【MySQL】复合查询+表的内外连接

复合查询表的内外连接 1.基本查询回顾2.多表查询3.自连接4.子查询4.1单列子查询4.2多列子查询 5.在from子句中使用子查询6.合并查询7.表的内连和外连7.1内连接7.2外连接7.2.1左外连接7.2.2右外连接 点赞👍👍收藏🌟🌟关注&#x1f…

第八章、python的类及其应用(8.1.1-8.2.1.2)------类的常见概念、类的构造器概述、空间化构造方法__new__()

目录 8.1 python类的常见概念 8.1.1面向过程与面向对象编程 8.1.2类、类地址、类实例对象地址、封装、继承、多态的概念 8.2 python类的构成详解及其性质 8.2.1类中的构造方法 8.2.1.1类的构造器概述 8.2.1.2空间化构造方法__new__() 第八章 python的类及其应用 本章主要讲述类…

React 中hooks之useLayoutEffect 用法总结以及与useEffect的区别

React useLayoutEffect 1. useLayoutEffect 基本概念 useLayoutEffect 是 React 的一个 Hook,它的函数签名与 useEffect 完全相同,但它会在所有的 DOM 变更之后同步调用 effect。它可以用来读取 DOM 布局并同步触发重渲染。 2. useLayoutEffect vs us…