我正在尝试找到一个 Python 库,它可以获取音频文件(例如 .ogg、.wav)并将其转换为 mp3 以在网页上播放。
此外,任何有关设置播放质量的想法都很棒。
谢谢你。
我写了一个库,旨在做到这一点=D
from pydub import AudioSegment
AudioSegment.from_file("/input/file").export("/output/file", format="mp3")
简单!
要指定比特率,只需使用
bitrate
kwarg...
from pydub import AudioSegment
sound = AudioSegment.from_file("/input/file")
sound.export("/output/file", format="mp3", bitrate="128k")
我使用 gstreamer 的 Python 绑定。开始有点难,但一旦开始,几乎一切皆有可能。
从命令行(来自gstreamer的文档):
gst-launch -v filesrc location=music.wav ! decodebin ! audioconvert ! audioresample ! lame bitrate=192 ! id3v2mux ! filesink location=music.mp3
输入
filesrc location=...
可以是 gstreamer 可以播放的任何内容,而不仅仅是 .wav。您可以添加称为 caps 过滤器的东西,以在编码之前重新采样到特定速率。
在 Python 程序中,您将使用
gst.parse_launch(...)
,获取 filesrc 和 filesink 元素,并调用 setter 来更改输入和输出文件名。
看起来 PyMedia 是这样做的:
以及有关转换为各种格式以及设置比特率的更多信息:
http://pymedia.org/tut/recode_audio.html
例如
params= {
'id': acodec.getCodecId('mp3'),
'bitrate': r.bitrate,
'sample_rate': r.sample_rate,
'ext': 'mp3',
'channels': r.channels }
enc= acodec.Encoder( params )
此外,Python 音频工具 应该能够在不需要其他库的情况下完成这项工作,如果您在共享网络托管帐户上执行此操作可能会更容易。 (但不可否认,我还没有尝试过,所以我无法确认它有多有用。)
您可以使用ctypes模块直接从动态库调用函数。它不需要您安装外部Python库,并且比命令行工具具有更好的性能,但通常更难实现(当然还需要提供外部库)。
避免为这个简单任务安装 Python 模块的另一个选择是从 Python 脚本中执行“lame”或其他命令行编码器(使用 popen 模块)
%运行/mnt/data/add_libraries_py 从 ai_song_maker 导入 Song_maker
abc_notation_meta = """ 中号:4/4 长:1/4 问:1/4=100 公斤 ”””
abc_notation_guitar_verse = """V:1 谱号=高音 name="吉他" snm="G" | G2 D2 | Em2 C2 | G2 D2 | Em2 C2 | |:G2 D2 | Em2 C2 :| ”””
abc_notation_piano_verse = """V:2 谱号=高音 name="钢琴" snm="P" | [G、B、D]2 [D、F#、A]2 | [E、G、B]2 [C、E、G]2 | [G、B、D]2 [D、F#、A]2 | [E、G、B]2 [C、E、G]2 | |: [G,B,D]2 [D,F#,A]2 | [E、G、B]2 [C、E、G]2 :| ”””
abc_notation_drum_verse = """V:3 谱号=打击乐器名称=“鼓” snm=“D” | C2 C2 | C2 D2 D2 | C2 C2 | C2 D2 D2 | |: C2 C2 | D2 D2 :| ”””
abc_notation_guitar_chorus = """V:1 谱号=高音 name="吉他" snm="G" | G2 C2 | G2 D2 | G2 C2 | G2 D2 | |:G2 C2 | G2 D2 :| ”””
abc_notation_piano_chorus = """V:2 谱号=高音 name="钢琴" snm="P" | [G、B、D]2 [C、E、G]2 | [G、B、D]2 [D、F#、A]2 | [G、B、D]2 [C、E、G]2 | [G、B、D]2 [D、F#、A]2 | |: [G,B,D]2 [C,E,G]2 | [G、B、D]2 [D、F#、A]2 :| ”””
abc_notation_drum_chorus = """V:3 谱号=打击乐器名称=“鼓” snm=“D” | C2 C2 | C2 D2 D2 | C2 C2 | C2 D2 D2 | |: C2 C2 | D2 D2 :| ”””
abc_notation = abc_notation_meta + abc_notation_guitar_verse + abc_notation_piano_verse + abc_notation_drum_verse + abc_notation_guitar_chorus + abc_notation_piano_chorus + abc_notation_drum_chorus order_part_instrument = {'吉他': '吉他', '钢琴': '钢琴', '鼓': '鼓'}
musicxml_path = '/mnt/data/song_musicxml.xml' midi_path = '/mnt/data/song_midi.mid' parts_data、score_data = Song_maker.process_abc(abc_notation、ordered_part_instrument、musicxml_path、midi_path) musicxml_path,midi_path