使用ffmpeg从图像创建视频 - Python

时间:2017-03-24 11:15:13

标签: python image video ffmpeg python-imaging-library

我在python(using this tutorial)中使用FFMPEG,我的主要目标是截取屏幕截图并将其附加到现有的mp4视频中(使用编码器附加它,而不是原始追加)。

这就是我现在正在使用的代码,这个脚本只会写一帧的视频(第一个截图),并且不会对所有其他截图做任何事情。

command = [ FFMPEG_BIN,
    '-f', 'rawvideo',
    '-codec', 'rawvideo',
    '-s', '1920x1080', # size of one frame
    '-pix_fmt', 'rgb24',
    '-r', '24', # frames per second
    '-i', '-', # The input comes from a pipe
    '-an', # Tells FFMPEG not to expect any audio
    '-vcodec', 'mpeg4',
    'my_output_videofile.mp4' ]

for x in range(30):
    pipe = sp.Popen(command, stdin = sp.PIPE, stderr = sp.PIPE)
    im = np.array(ImageGrab.grab()).tostring()
    pipe.communicate(input = im)
    pipe.stdin.close()
    if pipe.stderr is not None:
        pipe.stderr.close()
    pipe.wait()

编辑: 显然使用Popen.communicate打破了管道(感谢Peter Wood!)。

在修复了管道破坏的情况后,我遇到了另一个问题,在向视频写入~235帧之后程序崩溃了。

新编辑的脚本:

command = [ FFMPEG_BIN,
    '-y',
    '-f', 'rawvideo',
    '-codec', 'rawvideo',
    '-s', '1920x1080', # size of one frame
    '-pix_fmt', 'rgb24',
    '-r', '24', # frames per second
    '-i', '-', # The input comes from a pipe
    '-an', # Tells FFMPEG not to expect any audio
    '-vcodec', 'mpeg4',
    'my_output_videofile.mp4' ]

pipe = sp.Popen(command, stdin = sp.PIPE, stderr = sp.PIPE)

for x in range(300):
    print x

    im = np.array(ImageGrab.grab()).tostring()
    pipe.stdin.write(im)
    pipe.stdin.flush()

0 个答案:

没有答案