FFmpeg如何读取标准输入管道?

2024-04-27 00:38:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个Python脚本,该脚本基于用户实时远程交互生成图像序列,并使用ffmpeg在网络上压缩和流式传输该图像序列,以便用户观看。 一旦生成一个图像,脚本就会将其写入ffmpeg的stdin中,然后在循环中重复此操作以形成视频。在

我想知道当我写stdin时ffmpeg正忙于处理前一个图像时会发生什么。在

  • 是的。标准写入()命令块执行直到ffmpeg完成对上一个图像的处理?(管道缓冲器填充的后果)
  • 缓冲区大小是多少subprocess.PIPE?在
  • 是否可编辑?在
  • 如果缓冲区已满,是否可以覆盖它,而不是阻止执行?在
  • ffmpeg是否在一个并行进程中连续读取它的输入并缓冲它直到它可以自由处理它?在
  • 如果是这样的话,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时,我在循环中称之为:

^{pr2}$

Tags: 用户图像网络脚本cmd视频远程stdin