我目前有一些我希望以电影形式展示的图像。所以,我喋喋不休地发现了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”,“Image1.jpeg”,......,“Image499.jpeg”,“Image500.jpeg”)。任何帮助将不胜感激!
P.S。教程中的人还说有些编解码器需要比特率;我试过了,它也没用。
答案 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程序这样做(但我不会在你的代码中看到它)。