文件中的 Gstreamer 音频捕获

Gstreamer audio capture on file

我是 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 更适合播放器/播放性质

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

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

该示例将输出保存到名为 1.ogg 的文件中,该文件位于您 运行 脚本所在的当前目录中。 您已经 运行 脚本了吗?在 运行 所在的位置查找该文件..

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

你可以

  • 运行 如果你在 linux 每 5 分钟执行一次脚本,这可能是一个 cron 作业
  • 或者只是一个 bash 脚本..
  • 或者您可以在 python 中用同一个脚本将其编码到 运行 gstreamer 管道一次又一次。这会更难,但是 'nicer'
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 脚本,因此解决了这个问题(发现如果我在脚本本身中执行此操作,文件将永远无法正确保存)