【问题标题】:Piping PCM data from FFMPEG to another process with Python subprocess使用 Python 子进程将 PCM 数据从 FFMPEG 管道传输到另一个进程
【发布时间】:2017-02-07 11:09:36
【问题描述】:

我正在尝试转录播客。为此,我使用 FFMPEG 解码 mp3 流,并将生成的 PCM 输出通过管道传输到语音识别组件。我的代码如下所示。

mp3=subprocess.Popen(['ffmpeg','-i',audio_url,
                              '-f','s16le','-ac','1','-ar','16000','pipe:0'],
                              stdout=subprocess.PIPE)
sphinx=subprocess.Popen(['java','-jar','transcriber.jar'],
                                stdin=mp3.stdout,
                                stdout=subprocess.PIPE)

audio_url 是 mp3 文件的 url。

当我尝试运行它时,它挂起。似乎通过管道提供解码的 PCM 数据已陷入僵局。我能做些什么来解决这个问题?输出数据的大小可能对于subprocess.Popen.communicate 来说太大而无法选择,并且显式调用mp3.stdout.close() 没有任何效果。

【问题讨论】:

    标签: python ffmpeg subprocess


    【解决方案1】:

    您的pipe 号码不正确。正确的值是:

    • pipe:0 - 标准输入
    • pipe:1 - 标准输出
    • pipe:2 - 标准错误

    你可以使用:

    • pipe:1,或
    • 只需pipe:,因为输出的默认值是标准输出,或者
    • 只需使用-

    FFmpeg Documentation: pipe protocol

    【讨论】:

      【解决方案2】:

      原来pipe:0 不会连接到mp3.stdout。我改用-,现在它可以工作了。

      【讨论】:

        猜你喜欢
        • 2019-03-28
        • 2018-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 2010-11-20
        • 2017-12-26
        • 1970-01-01
        相关资源
        最近更新 更多