我试图压制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,来自'/tmp/tmp5DUj0a.wav':
持续时间:00:00:01.32,比特率:1411 kb / s 流#0.0:音频:pcm_s16le,44100 Hz,2个通道,s16,1411 kb / s
当你连接更多音频时很容易丢失关键信息。 有没有办法切断这种输出?
感谢。
答案 0 :(得分:2)
我遇到了同样的问题,这就是我所做的。您只需创建一个名为_play_with_ffplay_suppress的新函数,并在其中包含以下代码。上面的答案与我的答案之间的区别在于,加罗使用了
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)
有关更多信息,您可以在此处阅读Python中子流程模块中的调用函数https://docs.python.org/3/library/subprocess.html。
答案 1 :(得分: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并将其用于播放