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