当前位置: 首页 > article >正文

python实现批量视频提取音频

1、安装依赖库

首先需要安装依赖库moviepy

pip install moviepy

2、找到对应目录

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

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.audio
                audio.write_audiofile(output_dir_path, codec="pcm_s16le")  # 设置采样率为 16000 Hz

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

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

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

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

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.kler.cn/a/508781.html

相关文章:

  • 算法(蓝桥杯)贪心算法7——过河的最短时间问题解析
  • 每打开一个chrome页面都会【自动打开F12开发者模式】,原因是 使用HBuilderX会影响谷歌浏览器的浏览模式
  • 设计一个流程来生成测试模型安全性的问题以及验证模型是否安全
  • YOLOv5训练长方形图像详解
  • 无公网IP 实现外网访问本地 Docker 部署 Navidrome
  • Linux 进程前篇(冯诺依曼体系结构和操作系统)
  • 深度学习 Pytorch 张量的广播和科学运算
  • RV1126+FFMPEG推流项目(8)AENC音频编码模块
  • 《Opencv》多对象模板匹配
  • Golang—— new() 、 make() 和简短声明符
  • 【万字详细教程】Linux to go——装在移动硬盘里的Linux系统(Ubuntu22.04)制作流程;一口气解决系统安装引导文件迁移显卡驱动安装等问题
  • Linux查看日志命令
  • StyleGaussian: Instant 3D Style Transferwith Gaussian Splatting 论文解读
  • 如何将本地电脑上的文件夹设置为和服务器的共享文件夹
  • 基于Flutter的物联网后台系统
  • C++ ——— string类oj题:字符串中的第一个唯一字符
  • 从零开始,掌握Django Web开发
  • 软件测试 —— Selenium常用函数
  • 软件测试—接口测试面试题及jmeter面试题
  • 【UE5.3】UnrealLink 安装:fix Detected compiler newer than Visual Studio 2022
  • 如何使用策略模式并让spring管理
  • MySQL无限极分类表设计:实战项目中的高效解决方案
  • npm介绍
  • 汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮
  • JSON数据格式转换
  • 使用C语言实现栈的插入、删除和排序操作