如何在After Effects脚本中获取音频层的采样率与波形数据?
获取音频采样率与波形数据的实现方案
完全可行,以下是几种主流脚本实现方式:
Python 脚本实现
方法1:使用标准库 wave(无额外依赖)
适合处理WAV格式音频,无需安装第三方包,代码轻量:
import wave import numpy as np # 打开音频文件 with wave.open("your_audio.wav", "rb") as wf: # 获取采样率 sample_rate = wf.getframerate() print(f"采样率: {sample_rate} Hz") # 获取声道数、量化位数 num_channels = wf.getnchannels() sample_width = wf.getsampwidth() # 读取所有波形帧数据 frames = wf.readframes(wf.getnframes()) # 将二进制帧转换为数值数组 if sample_width == 2: # 16位量化 wave_data = np.frombuffer(frames, dtype=np.int16) elif sample_width == 4: # 32位量化 wave_data = np.frombuffer(frames, dtype=np.int32) else: # 8位量化 wave_data = np.frombuffer(frames, dtype=np.uint8) # 如果是多声道,拆分数据 if num_channels > 1: wave_data = np.reshape(wave_data, (-1, num_channels)) print(f"波形数据形状: {wave_data.shape}")
方法2:使用 librosa(支持更多音频格式)
适合MP3、FLAC等非WAV格式,需要先安装:pip install librosa
import librosa # 加载音频,返回波形数据和采样率 wave_data, sample_rate = librosa.load("your_audio.mp3", sr=None) # sr=None 表示保留原始采样率,若指定数值则会重采样 print(f"采样率: {sample_rate} Hz") print(f"波形数据形状: {wave_data.shape}") # wave_data是归一化后的浮点数组(范围[-1, 1])
Shell 脚本实现(使用FFmpeg)
如果是shell脚本场景,FFmpeg可以快速提取采样率和导出波形数据:
# 获取采样率 sample_rate=$(ffprobe -v error -select_streams a:0 -show_entries stream=sample_rate -of default=noprint_wrappers=1:nokey=1 your_audio.mp3) echo "采样率: ${sample_rate} Hz" # 导出波形数据到文本文件(每行一个采样值,16位有符号整数) ffmpeg -i your_audio.mp3 -f s16le -acodec pcm_s16le - | hexdump -v -e '/1 "%d\n"' > wave_data.txt
关键说明
- 采样率是音频的核心参数,所有音频处理库/工具都能直接获取;
- 波形数据本质是音频的采样点数值集合,不同格式的音频会有不同的量化位数(8/16/32位),转换时需注意对应的数据类型;
- 多声道音频的波形数据通常是交错存储,需要按声道拆分处理。
内容的提问来源于stack exchange,提问作者noahship
相关产品推荐
相关产品推荐

