ffmpeg在“流模式”下突然停止写输出文件,并在几分钟后恢复

Eli*_*liA 5 python streaming subprocess ffmpeg webm

我正在使用ffmpeg以“连续流”模式将webm格式的媒体块转换为wav文件。

使用python包装器,我向ffmpeg提供了一个webm块(假设每秒1个块),并且ffmpeg不断写入输出wav(然后,在一个单独的线程中,我正在读取该wav文件并将新数据向前传递)。

在大多数情况下,这种方法效果很好,但是有时候,我会得到以下奇怪的行为:

  • 在处理了一些块并将其输出到wav文件之后,ffmpeg停止写入输出文件(文件停止增长,但ffmpeg不断获取webm块)
  • 这样可以持续几分钟,然后ffmpeg继续写入wav文件
  • 最终,完整的wav文件被成功写入,但这会导致流处理过程中的巨大延迟。

查看CPU和内存使用情况,这似乎不是问题。

关于什么可能导致ffmpeg停止流播几分钟然后恢复的任何想法?这可能会在30秒后,3分钟后或一个小时的流媒体块发生之后发生,并且ffmpeg恢复的时间也有所不同。

在我的python代码中,我基本上是打开一个subprocess.Popen()进程并写入该进程stdin以馈送ffmpeg媒体块。

所以我的代码看起来像:

ffmpeg_proc = subprocess.Popen('ffmpeg -y -f webm -i - -ac 1 -ar 16000  -f wav /tmp/out.wav', shell=True, stdin=subprocess.PIPE)

for chunk in chunks:
    ffmpeg_proc.stdin.write(chunk)
Run Code Online (Sandbox Code Playgroud)

我正在使用python 3.6ffmpeg version 2.8.14-0ubuntu0.16.04.1

提前致谢!