ffmpeg不会从我的图像制作视频

时间:2014-10-21 14:19:40

标签: ffmpeg

我目前有一些我希望以电影形式展示的图像。所以,我喋喋不休地发现了ffmpeg。这是我一直在使用的教程:

http://zulko.github.io/blog/2013/09/27/read-and-write-video-frames-in-python-using-ffmpeg/

由于我不在乎阅读,所以我跳到写作部分。据我所知,这是我的计划应该说的:

import subprocess as sp
FFMPEG_BIN = "ffmpeg" #I'm on Ubuntu
command = [ FFMPEG_BIN,
            '-y',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '1000x1000',
            '-pix_fmt', 'rgb24',
            '-r', '24',
            '-i', '-',
            '-an',
            '-vcodec', 'mpeg',
            'my_output_videofile.mp4' ]


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

但是,当我在spyder中运行时,我收到错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 540, in runfile
    execfile(filename, namespace)
  File "/home/xander/Downloads/python-meep/makeVideo.py", line 15, in <module>
    pipe = sp.Popen( command, stdin = sp.PIPE, stderr = sp.PIPE )
  File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
  OSError: [Errno 2] No such file or directory

为什么会这样?我真的很怀疑:我从不提及我的照片名称(“Image0.jpeg”,“I​​mage1.jpeg”,......,“Image499.jpeg”,“I​​mage500.jpeg”)。任何帮助将不胜感激!

P.S。教程中的人还说有些编解码器需要比特率;我试过了,它也没用。

2 个答案:

答案 0 :(得分:2)

对于-i参数,您只需指定'-',脚本正在查找名为此类的图像。

尝试:

from subprocess import call
command = [ FFMPEG_BIN,
        '-i', './image%d.jpg',
        '-y',
        '-f', 'rawvideo',
        '-vcodec', 'rawvideo',
        '-s', '1000x1000',
        '-pix_fmt', 'rgb24',
        '-r', '24',
        '-an',
        '-vcodec', 'mpeg',
        'my_output_videofile.mp4' ]
call(command)

这将寻找图像名称image0.jpg,image1.jpg等。

更多信息:https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images

答案 1 :(得分:1)

指定ffmpeg的完整路径:

FFMPEG_BIN = "/usr/local/bin/ffmpeg"

或无论在哪里。通过运行chmod ugo+x确保其可执行。

另外,正如另一篇文章中所提到的,您的输入被声明为-,这意味着ffmpeg期望您将原始RGB24帧传输给它。可能不是你想要的,除非你的Python程序这样做(但我不会在你的代码中看到它)。