Pydub 和 Aplay:抑制冗长的输出?
Pydub and Aplay: suppress verbose output?
我试图抑制 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 version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2003-2014
the Libav developers built on Mar 16 2015 13:19:10 with gcc 4.8
(Ubuntu 4.8.2-19ubuntu1) Input #0, wav, from '/tmp/tmp5DUj0a.wav':
Duration: 00:00:01.32, bitrate: 1411 kb/s
Stream #0.0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
当你连接更多的音频时,很容易丢失关键信息。
有没有办法切断这种输出?
谢谢。
回放功能非常简单(并且主要包含在交互式 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 打开一个新的 window - 我建议安装 pyaudio 并使用它来播放
我 运行 遇到了同样的问题,这就是我所做的。您可以创建一个名为 _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)
有关详细信息,您可以在 Python 此处 https://docs.python.org/3/library/subprocess.html.
中阅读有关子流程模块中的调用函数的信息
我试图抑制 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 version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2003-2014 the Libav developers built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) Input #0, wav, from '/tmp/tmp5DUj0a.wav':
Duration: 00:00:01.32, bitrate: 1411 kb/s Stream #0.0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
当你连接更多的音频时,很容易丢失关键信息。 有没有办法切断这种输出?
谢谢。
回放功能非常简单(并且主要包含在交互式 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 打开一个新的 window - 我建议安装 pyaudio 并使用它来播放
我 运行 遇到了同样的问题,这就是我所做的。您可以创建一个名为 _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)
有关详细信息,您可以在 Python 此处 https://docs.python.org/3/library/subprocess.html.
中阅读有关子流程模块中的调用函数的信息