ffmpeg如何读取stdin管道?

时间:2017-11-17 14:01:17

标签: python python-2.7 ffmpeg subprocess pipe

我正在研究基于用户实时远程交互生成图像序列的Python脚本,并使用ffmpeg通过网络压缩和流式传输此图像序列,供用户观看。 一旦生成图像,脚本就会将其写入ffmpeg的stdin,并在循环内重复此操作以形成视频。

我想知道当我写入stdin时ffmpeg忙于处理上一张图像时会发生什么。

  • .stdin.write()命令阻止执行,直到ffmpeg完成处理上一个图像? (管道缓冲器填满的后果)
  • subprocess.PIPE的缓冲区大小是多少?
  • 可以编辑吗?
  • 如果缓冲区已满,是否可以覆盖此缓冲区,而不是阻止执行?
  • ffmpeg是否会在并行进程中不断读取它并将其缓冲,直到它可以自由处理它?<​​/ li>
  • 如果是这样的话,ffmpeg输入缓冲区的大小是什么?如何更改?

我之所以这样问是因为我想完全理解数据如何在Python和ffmpeg之间传播以将延迟降低到最小。

以下是我用来启动ffmpeg的代码部分:

cmd = ['ffmpeg',
    '-f', 'rawvideo',
    '-s', '%dx%d'%(width, height),
    '-pix_fmt', 'rgba',
    '-r', '%d'%fps,
    '-i', '-',
    '-an',
    '-vcodec', 'libx264',
    '-tune', 'zerolatency',
    '-preset', 'ultrafast',
    '-bf', '0',
    '-f', 'mpegts',
    'udp://xxx.xxx.xxx.xxx:xxxxx']

proc = subprocess.Popen(cmd, stdin=subprocess.PIPE)

当我想将图像传递给ffmpeg时,这就是我在循环中调用的内容:

proc.stdin.write(image)

0 个答案:

没有答案