python实现批量视频提取音频

ops/2025/1/17 23:20:36/

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/ops/150947.html

相关文章

使用Dify创建个问卷调查的工作流

为啥要使用Dify创建工作流呢?一个基于流程的智能体的实现,特别是基于业务的实现,使用Dify去实现时,通常都是一个对话工作流,当设计到相对复杂一些的流程时,如果将所有逻辑都放在对话工作流中去实现&#xf…

STM32 FreeRTOS移植

目录 FreeRTOS源码结构介绍 获取源码 1、 官网下载 2、 Github下载 源码结构介绍 源码整体结构 FreeRTOS文件夹结构 Source文件夹结构如下 portable文件夹结构 RVDS文件夹 MemMang文件夹 FreeRTOS在基于寄存器项目中移植步骤 目录添加源码文件 工程添加源码文件 …

B3DM转换成XYZ

3D模型在线转换(https://3dconvert.nsdt.cloud/)是一个可以进行3D模型格式转换的在线工具,支持多种3D模型格式进行在线预览和互相转换。 B3DM与XYZ格式简介 B3DM(Binary 3D Model)是一种用于存储三维模型的二进制格式…

【Linux】进程间通信IPC

目录 进程间通信 IPC 1. 进程间通信方式 2. 无名管道 2.1 特点 2.2 函数接口 2.3 注意事项 3. 有名管道 3.1 特点 3.2 函数接口 3.3 注意事项 3.4 有名管道和无名管道的区别 4. 信号 4.1概念 4.2信号的响应方式 4.3 信号种类 4.4 函数接口 4.4.1 信号发送和挂…

《AI赋能鸿蒙Next,开启智能关卡设计新时代》

在游戏开发领域,关卡设计是至关重要的一环,它直接影响着玩家的游戏体验和沉浸感。而随着人工智能技术的飞速发展,结合鸿蒙Next系统的强大功能,为游戏的智能关卡设计带来了全新的思路和方法。 利用AI学习玩家行为模式 在鸿蒙Next…

昇腾部署onnx模型问题总结

使用ATC转换onnx模型出错 报错信息 ERROR:edge_agent:Run command return fail, COMMAND"atc --framework5 --model/deploy/in/fastsam/FastSAM-x.onnx --soc-versionAscend910B4 --output/deploy/models/modelname/1/model", RET255, STDOUT"ATC start worki…

检验统计量与p值笔记

一、背景 以雨量数据为例,当获得一个站点一年的日雨量数据后,我们需要估计该站点的雨量的概率分布情况,因此我们利用有参估计的方式如极大似然法估计得到了假定该随机变量服从某一分布的参数,从而得到该站点的概率密度函数&#x…

如何在Ubuntu上安装Cmake

前言 ​ 本文主要阐述如何在Ubuntu22.04上面安装cmake,具体可看下面的操作。 正文 一、环境 Ubuntu22.04 cmake-3.31.4.tar.gz 二、步骤 参考这个方案: 【运维】Ubuntu如何安装最新版本的Cmake,编译安装Cmake,直接命令安装…