【问题标题】:Pydub and Aplay: suppress verbose output?Pydub 和 Aplay:抑制详细输出?
【发布时间】:2016-08-29 22:43:50
【问题描述】:

我试图抑制 aplay 的输出,但没有成功。 我知道如何使用 stdout 抑制打印语句,但我不知道如何使用 pydub 模块归档相同的结果。 例如,当我使用此代码播放声音时

from pydub import AudioSegment
from pydub.playback import play

next_kot = AudioSegment.from_ogg('/home/effe/Voz/Hello.ogg')
play(next_kot)

生成的输出(红色!)是

avplay 版本 9.18-6:9.18-0ubuntu0.14.04.1,版权所有 (c) 2003-2014 Libav 开发人员于 2015 年 3 月 16 日 13:19:10 使用 gcc 4.8 构建 (Ubuntu 4.8.2-19ubuntu1) 输入 #0, wav, from '/tmp/tmp5DUj0a.wav':
时长:00:00:01.32,比特率:1411 kb/s 流 #0.0:音频:pcm_s16le,44100 Hz,2 通道,s16,1411 kb/s

当您连接更多音频时,很容易丢失关键信息。 有没有办法切断这种输出?

谢谢。

【问题讨论】:

  • @Jiaaro:有什么线索吗?

标签: python-2.7 audio pydub


【解决方案1】:

播放功能非常简单(并且大部分都包含在交互式 python shell 中以便于使用) - 您最好的选择可能是制作一个更适合您需要的 playback code 的副本:

如果您使用的是 ffplay,这应该可以:

import os
from pydub.utils import get_player_name

PLAYER = get_player_name()

def play_with_ffplay(seg):
    with NamedTemporaryFile("w+b", suffix=".wav") as f:
        seg.export(f.name, "wav")
        subprocess.call(
            [PLAYER, "-nodisp", "-autoexit", f.name],
            stdout=open(os.devnull, 'w'), 
            stderr=os.stdout
        )

注意:ffmpeg 总是会为 ffplay 打开一个新窗口 - 我建议安装 pyaudio 并将其用于播放

【讨论】:

  • stderr=os.stdout AttributeError: 'module' 对象没有属性 'stdout'
【解决方案2】:

我遇到了同样的问题,这就是我所做的。您可以创建一个名为 _play_with_ffplay_suppress 的新函数,并在其中包含以下代码。上面的答案和我的不同之处在于Jiaaro使用了

stdout=open(os.devnull, 'w')
stderr=os.stdout

我在创建同名变量后使用了“devnull”。差别很小,但我希望它能解决您在评论中提到的错误。

stderr=devnull
stdout=devnull

这是我的代码:

#rhp - additional import added
import os

#rhp-custom function to supress output while playing mp3 files
def _play_with_ffplay_suppress(seg):
    with NamedTemporaryFile("w+b", suffix=".wav") as f:
        seg.export(f.name, "wav")
        devnull = open(os.devnull, 'w')
        subprocess.call([PLAYER,"-nodisp", "-autoexit", "-hide_banner", f.name],stdout=devnull, stderr=devnull)

有关更多信息,您可以在此处https://docs.python.org/3/library/subprocess.html 阅读 Python 中子流程模块中的调用函数。

【讨论】:

  • 简单有效。我不知道为什么我没想到。
猜你喜欢
  • 1970-01-01
  • 2015-08-23
  • 2020-02-02
  • 2014-03-31
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 2016-10-30
  • 2016-03-07
相关资源
最近更新 更多