Gstreamer音频捕获文件

时间:2015-12-10 14:16:32

标签: audio gstreamer audio-recording

我是Gstreamer的新手,现在基本上已经阅读了一天的文档了。我需要一个程序,每5分钟从音频输入中捕获音频10-15秒并将其存储到文件中。 我唯一不知道怎么做的是捕获本身,因为我之前没有使用输入。现在我在网上发现了这个代码,但不知道它是否会对我有所帮助(我理解大部分内容但不知道它保存文件的位置,如果它可以保存它们)任何帮助都会非常感激

import gi
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst, Gtk
GObject.threads_init()
Gst.init(None)

pipeline = Gst.Pipeline()

autoaudiosrc = Gst.ElementFactory.make("autoaudiosrc", "autoaudiosrc")
audioconvert = Gst.ElementFactory.make("audioconvert", "audioconvert")
vorbisenc = Gst.ElementFactory.make("vorbisenc", "vorbisenc")
oggmux = Gst.ElementFactory.make("oggmux", "oggmux")
filesink = Gst.ElementFactory.make("filesink", "filesink")
url = "1.ogg"
filesink.set_property("location",url)
pipeline.add( autoaudiosrc)
pipeline.add( audioconvert)
pipeline.add( vorbisenc)
pipeline.add( oggmux)
pipeline.add( filesink)

autoaudiosrc.link( audioconvert)
audioconvert.link( vorbisenc)
vorbisenc.link( oggmux)
oggmux.link( filesink)

pipeline.set_state(Gst.State.PLAYING)
Gtk.main()

P.S。一位教授向我建议gstreamer,我还没有找到一个好的选择,所以这就是为什么我要尝试它,但如果有更好的方法请告诉我,因为我觉得gstreamer更像是一个玩家/播放性质

2 个答案:

答案 0 :(得分:0)

问题写得很好,但是你可以在问之前尝试更多的调查..你也可以添加标签python,代码会突出显示..

无论如何,gstreamer完全可以保存到文件..

该示例将输出保存到运行脚本的当前目录中名为1.ogg的文件中。 你已经运行了脚本吗?找你运行它的文件..

filesink元素执行实际的文件保存。如果要将每个捕获保存在另一个文件中,可以生成一些格式的文件名,例如YYYY-MM-DD_HH_mm_ss.ogg(这是典型的日期时间格式,其中YYYY表示年份,MM月份等)。

你可以

  • 每5分钟运行一次脚本,如果你在linux上,那可能是一个cron工作
  • 或只是一个bash脚本..
  • 或者你可以在同一个脚本中用python编写代码来一次又一次地运行gstreamer管道......这样会更难但是更好

答案 1 :(得分:-1)

import gi
import datetime, time
import sys
import signal  
signal.alarm(15)
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst, Gtk
GObject.threads_init()
Gst.init(None)

pipeline = Gst.Pipeline()

autoaudiosrc = Gst.ElementFactory.make("autoaudiosrc", "autoaudiosrc")
audioconvert = Gst.ElementFactory.make("audioconvert", "audioconv")
audioresample= Gst.ElementFactory.make("audioresample","audioresample")
vorbisenc = Gst.ElementFactory.make("vorbisenc", "vorbisenc")
oggmux = Gst.ElementFactory.make("oggmux", "oggmux")
filesink = Gst.ElementFactory.make("filesink", "filesink")
url = datetime.datetime.now()

audioresample.set_property("quality", 10) 
vorbisenc.set_property("quality", 1)

filesink.set_property("location",url)
pipeline.add( autoaudiosrc)
pipeline.add( audioconvert)
pipeline.add( vorbisenc)
pipeline.add( oggmux)
pipeline.add( filesink)
pipeline.add( audioresample)

autoaudiosrc.link( audioconvert)
audioconvert.link( audioresample)
audioresample.link(vorbisenc)
vorbisenc.link( oggmux)
oggmux.link( filesink)

pipeline.set_state(Gst.State.PLAYING)

Gtk.main()

按照承诺,完整的代码。您可以拥有的最佳音频质量,以及现在将文件保存为日期和角钱。 至于存储,我做了一个完美的bash脚本,所以解决了(发现如果我在脚本本身,文件永远不会正确保存)