读写STEM多流音频文件
stempeg的Python项目详细描述
stempeg=stems+ffmpeg
用于读取和写入STEM文件的python包。 技术上,stems是带有多个音频流和附加metatdata的mp4文件。stempeg是用于ffmpeg的python接口,专门用于读写多流mp4音频文件。
安装
一。ffmpeg库的安装
stempeg依赖于ffmpeg(测试:4.1、4.0.2、3.4和2.8.6)来解码stems文件格式。为了 建议编码ffmpeg>;=3.2。
ffmpeg在不同操作系统中的安装。如果使用Anaconda,可以使用以下命令在windows/mac/linux上安装ffmpeg:
conda install -c conda-forge ffmpeg
任何最新版本的ffmpeg都支持解码。对于编码,建议使用默认ffmpeg生成中不包含的fraunhofer aac编码器(libfdk_aac
)。请注意,conda版本当前不包含notincludefdk-aac
。如果未安装libfdk_aac
,stempeg将使用默认的aac
编解码器,这将导致音频质量稍差。
您可以手动安装支持libfdk-aac
的ffmpeg,如下所示:
- Mac:使用自制:
brew install ffmpeg --with-fdk-aac
- ubuntu linux:请参阅安装脚本here。
- 使用Docker(Mac、Windows、Linux):
docker pull jrottenberg/ffmpeg
2.安装stempeg包
使用pip通过pypi安装
pip install stempeg
用法
几乎没有免费提供的STEM文件。我们包括了一个来自加拿大摇滚乐队the easton ellises的小测试曲目。Creative Commons许可证CC BY-NC-SA 3.0下的乐队released them。
要使用包含的stem示例,可以使用stempeg.example_stem_path()
。
读数杆
importstempegS,rate=stempeg.read_stems(stempeg.example_stem_path())
S
是包含缩放到[-1..1]
的时域信号的茎张量。形状是(stems, samples, channels)
。
读取单个茎ID
通过传递相应的STEM ID(从0开始),可以读取STEM文件的各个子流:
S,rate=stempeg.read_stems(stempeg.example_stem_path(),stem_id=[0,1])
阅读摘录(设置搜索位置)
若要从STEM而不是完整文件中读取摘录,可以提供以秒为单位的开始(start
)和持续时间(duration
)到read_stems
:
S,_=stempeg.read_stems(stempeg.example_stem_path(),start=1,duration=1.5)# read from second 1.0 to second 2.5
提高性能
如果反复调用read_stems
,它总是执行两个系统调用,一个用于获取file info,另一个用于actual reading。若要加快此速度,可以将Info
对象提供给read_stems
如果流的数量、通道的数量和samplerate相同。
file_path=stempeg.example_stem_path()info=stempeg.Info(file_path)S,_=stempeg.read_stems(file_path,info=info)
书写杆
从numpy张量写入stem文件
stempeg.write_stems(S,"output.stem.mp4",rate=44100)
:warning: Warning: Muxing stems using ffmpeg might lead to non-conform stem files. Please use MP4Box, if you need a reliable result.
使用命令行工具
stempeg提供了一个方便的cli工具,可以将一个stem转换为多个wav文件。-s
开关设置开始,-t
开关设置持续时间。
stem2wav The Easton Ellises - Falcon 69.stem.mp4 -s 1.0 -t 2.5