使用管道协议 ffmpy可以从STDIN读取输入,也可以将输出写入STDOUT。这可以通过使用FFmpeg管道协议来实现。
以下示例从包含RGB格式的原始视频帧的文件中读取数据,并将其传递给STDIN上的ffmpy; ffmpy会依次使用H.264编码原始帧数据,并将其打包在MP4容器中,然后将输出传递到STDOUT(请注意,您必须使用subprocess.PIPE
作为stdout值将流程的STDOUT重定向到管道。输出将会丢失):
>>> import subprocess
>>> ff = FFmpeg(
... inputs={'pipe:0': '-f rawvideo -pix_fmt rgb24 -s:v 640x480'},
... outputs={'pipe:1': '-c:v h264 -f mp4'}
... )
>>> ff.cmd
'ffmpeg -f rawvideo -pix_fmt rgb24 -s:v 640x480 -i pipe:0 -c:v h264 -f mp4 pipe:1'
>>> stdout, stderr = ff.run(input_data=open('rawvideo', 'rb').read(), stdout=subprocess.PIPE)
但是上面的代码对我不起作用。