2010-10-03 45 views
1

當我從Win7中的python使用ffmpeg從movie.avi生成動畫gif時,出現問題。 如果我打開一個cmd窗口,執行這條線:Python:與ffmpeg生成.gif的罕見問題

"C:\ffmpeg\ffmpeg.exe" -i "C:\ffmpeg\video.avi" -pix_fmt rgb24 -r 10.0 -loop_output 0 -ss 5 -t 10 -s 352x288 -f gif "C:\ffmpeg\video.gif" 

ffmpeg.exe從視頻完美生成GIF。我想用ffmpeg.exe從我的代碼的Python爲做相同的,但,當我從我的Python程序執行此代碼:

argList = ["-i", "C:\\ffmpeg\\video.avi", "-pix_fmt", "rgb24", "-r", "10.0", "-loop_output", "0", "-ss", "5", "-t", "10", "-s", "352x288", "-f", "gif", "C:\\ffmpeg\\video.gif"] 
os.spawnv(os.P_DETACH, "C:\\ffmpeg\\ffmpeg.exe", argList) 

東西真是難得happends:我video.avi失去其所有的大小,現在是一個0字節的空白文件,而movie.gif也是一個0字節的空白文件,所以,在cmd窗口中的相同代碼工作正常,並進入我的python程序modifiques我的movie.avi文件並擦除其所有內容(但文件movie.avi不dessapear,該文件仍然存在,但現在是一個空白文件)並生成一個空白的movie.gif文件。有人知道爲什麼發生這種情況?提前致謝。

回答

1

您的spawnv的arglist需要以"C:\\ffmpeg\\ffmpeg.exe"開頭。試試看看它是如何發展的。

argList = ["C:\\ffmpeg\\ffmpeg.exe", "-i", "C:\\ffmpeg\\video.avi", "-pix_fmt", "rgb24", "-r", "10.0", "-loop_output", "0", "-ss", "5", "-t", "10", "-s", "352x288", "-f", "gif", "C:\\ffmpeg\\video.gif"] 
os.spawnv(os.P_DETACH, "C:\\ffmpeg\\ffmpeg.exe", argList) 
+0

非常感謝!問題在那裏,現在工作正常。但我嘗試argList沒有「C:\\ ffmpeg \\ ffmpeg.exe」,因爲工作正常,生成一個簡單的縮略圖。 – GerarLM 2010-10-03 23:28:22

+0

+1。另外考慮使用'subprocess',而不需要這種重複。 – bobince 2010-10-03 23:34:26

+0

使用子進程的正確語法是什麼?我嘗試使用子進程,但對我來說這是不可能的! – GerarLM 2010-10-03 23:42:54

0

@JoshD

argList = ["-y", "-ss", "750", "-i", "C:\\ffmpeg\\video.avi", "-f", "mjpeg", "-vframes", "1", "-s", "1280x720", "-an", "C:\\ffmpeg\\thumbnail.jpg"] 
os.spawnv(os.P_DETACH, "C:\\ffmpeg\\ffmpeg.exe", argList) 

這spawnv開始正常工作沒有"C:\\ffmpeg\\ffmpeg.exe",我的困惑來自於這一點。非常感謝。

+0

是的,有時它會起作用,但那是更有利於證明有效行爲的運氣。 :) – JoshD 2010-10-03 23:44:01