Python:如何使用os.spawnv和很多参数?

时间:2010-09-26 19:52:32

标签: python ffmpeg thumbnails

我在XBMC(xbmc.org)的Python插件中工作,我想从我的插件执行程序(ffmpeg.exe)而不显示cmd窗口。 如果我使用os.system()来调用ffmpeg.exe工作正常,但xbmc最小化,因为os.system打开一个cmd窗口几秒钟。 所以,我尝试使用os.spawnv(),我认为它可能允许我调用ffmpeg.exe而不显示cmd窗口。 问题是我知道如何使用os.system但我不知道如何使用os.spawnv。 我试着这个,但不起作用:

os.spawnv(os.P_DETACH,'"C:\Program Files (x86)\XBMC\scripts\Base De Datos\ffmpeg.exe" -y -ss 30 -i "C:\Program Files (x86)\XBMC\scripts\Base De Datos\Movie.avi" -f mjpeg -vframes 1 -s 720x400 -an  "C:\Program Files (x86)\XBMC\scripts\Base De Datos\thumbnail.jpg"')

"C:\Program Files (x86)\XBMC\scripts\Base De Datos\ffmpeg.exe" = The path of the ffmpeg.exe
-y -ss 30 -i = Arguments for ffmpeg.exe
"C:\Program Files (x86)\XBMC\scripts\Base De Datos\Movie.avi" = The path of the movie I want to use with ffmpeg.exe to make a thumbnail (argument for ffmpeg.exe)
-f mjpeg -vframes 1 -s 720x400 = More arguments for ffmpeg.exe
"C:\Program Files (x86)\XBMC\scripts\Base De Datos\thumbnail.jpg" = The path for save the thumbnail.

我尝试了很多制作缩略图的方法,但在我看来,在xbmc插件中确实很复杂,我不能使用pyffmpeg,因为我无法在不将其安装到de S.O.的情况下从我的插件导入模块。我的插件必须是便携式的,我可以使用PIL,但只能制作图片的缩略图,我需要制作视频的缩略图。 我知道python中的一些模块允许我在没有cmd窗口的情况下调用进程,但依赖于其他模块,如win32api,我无法导入,原因与我无法使用/导入pyffmpeg相同...所以我使用这个来欺骗“坏方法”使用os.system工作的方法,但我放松了对我的插件窗口的控制。 如果有人知道使用python制作视频缩略图的其他方法,请告诉我。 另一个问题是我的插件必须是多平台(至少是Win和Linux)所以这种方式并不好,但对我来说这可能是一大步。

非常感谢。

2 个答案:

答案 0 :(得分:0)

根据http://docs.python.org/library/os.html#os.spawnv,传递列表中的参数:

os.spawnv(os.P_DETACH, "path\to\program.exe", ["arg1", "arg2", "arg3"])

答案 1 :(得分:-1)

这样:

os.system(""C:\\Program Files (x86)\\XBMC\\scripts\\Base De Datos\\ffmpeg.exe" -y -ss 423 -i "C:\Program Files (x86)\XBMC\scripts\Base De Datos\Movie.avi" -f mjpeg -vframes 1 -s 720x320 -an "C:/Program Files (x86)/XBMC/scripts/Base De Datos/thumbnail.jpg"")

工作正常,但最小化xbmc,因为弹出一个cmd窗口,所以我试图使用os.spawnv做同样的但是给我一个错误。