自学内容网 自学内容网

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专业音频处理

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


原文地址:https://blog.csdn.net/m0_65079225/article/details/145175547

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!