gpt4 book ai didi

python - 使用 GStreamer + Python 将 FLAC 转换为 MP3?

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:39 27 4
gpt4 key购买 nike

这是我要复制的命令:

gst-launch filesrc location=test.flac ! flacdec ! lame ! filesink location=test.mp3

当我运行这个命令时,它运行得很漂亮。我尝试使用 Pythong 绑定(bind)来复制它,但一点运气都没有。这些脚本中的任何一个都没有出现任何错误,但它们没有按预期工作:

当我运行这个脚本时,我只得到一个空的 MP3 文件:

import gst
pipeline = gst.parse_launch('filesrc location="test.flac" ! flacdec ! lame ! filesink location="test.mp3"')
pipeline.set_state(gst.STATE_PLAYING)

当我运行这个脚本时,我得到了一个损坏的 MP3 文件:

import gst

converter = gst.Pipeline('converter')

source = gst.element_factory_make('filesrc', 'file-source')
source.set_property('location', 'test.flac')

decoder = gst.element_factory_make('flacdec', 'decoder')

encoder = gst.element_factory_make('lame', 'encoder')

sink = gst.element_factory_make('filesink', 'sink')
sink.set_property('location', 'test.mp3')

converter.add(source, decoder, encoder, sink)

source.link(sink)

converter.set_state(gst.STATE_PLAYING)

有人知道我做错了什么吗?

最佳答案

Gstreamer 使用 GObject 作为框架,所以你需要运行 gobject.MainLoop() 来启动管道中的消息流:

import gobject
import gst
pipeline = gst.parse_launch('filesrc location="test.flac" ! flacdec ! lame ! filesink location="test.mp3"')
pipeline.set_state(gst.STATE_PLAYING)

gobject.threads_init()
gobject.MainLoop().run()

在第二个示例中,您还需要运行 MainLoop 并链接所有管道元素(例如使用 element_link_many)。您仅将源连接到接收器,因此您的实际管道只是 filesrc !文件接收器

修改后的代码:

import gobject
import gst

converter = gst.Pipeline('converter')

source = gst.element_factory_make('filesrc', 'file-source')
source.set_property('location', 'test.flac')

decoder = gst.element_factory_make('flacdec', 'decoder')
encoder = gst.element_factory_make('lame', 'encoder')

sink = gst.element_factory_make('filesink', 'sink')
sink.set_property('location', 'test.mp3')

converter.add(source, decoder, encoder, sink)
gst.element_link_many(source, decoder, encoder, sink)

converter.set_state(gst.STATE_PLAYING)

gobject.threads_init()
gobject.MainLoop().run()

关于python - 使用 GStreamer + Python 将 FLAC 转换为 MP3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7459295/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com