【问题标题】:Gstreamer audio capture on file文件上的 Gstreamer 音频捕获
【发布时间】:2015-12-10 14:16:32
【问题描述】:

我是 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()

附:一位教授向我推荐了 gstreamer,但我还没有找到一个好的选择,所以这就是我尝试它的原因,但如果有更好的方法请告诉我,因为我觉得 gstreamer 更适合播放器/播放性质

【问题讨论】:

    标签: audio gstreamer audio-recording


    【解决方案1】:

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

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

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

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

    你可以

    • 如果您使用的是 linux,则每 5 分钟运行一次脚本,这可能是一项 cron 作业
    • 或者只是一个 bash 脚本..
    • 或者您可以在同一脚本中的 python 中对其进行编码,以一次又一次地运行 gstreamer 管道。这会更难但“更好”

    【讨论】:

    • 发现问题,需要重新安装 ubuntu(由于某种原因我无法获得 sudo 访问权限,不知道那里出了什么问题)它现在按原样保存文件,我打算制作一个给文件一个数字(21、2、3、4等)的各种循环将在我完成整个事情时将其发布在这里。
    【解决方案2】:
    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 脚本,从而解决了这个问题(发现如果我在脚本本身中执行此操作,文件将永远无法正确保存)

    【讨论】:

      猜你喜欢
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多