2010-10-03 6 views
1

J'ai un problème lorsque je génère un gif animé à partir d'un fichier movie.avi en utilisant ffmpeg de python dans Win7. Si j'ouvre une fenêtre cmd et exécuter cette ligne:Python: Problème rare générant .gif avec ffmpeg

"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 génère un gif parfaitement de la vidéo. Je veux utiliser mon code de ffmpeg.exe en python pour faire la même chose mais, quand j'exécute ce code de mon programme 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) 

Quelque chose happends vraiment rare: Mes video.avi perdent toute sa taille, maintenant est un fichier vide avec 0 octets et le film.gif est un fichier vide avec 0 octets aussi, le même code dans Windows cmd fonctionne très bien et dans mon programme python modifie mon fichier movie.avi et efface tout son contenu (mais le fichier movie.avi ne désapaise pas, le fichier existe toujours mais est maintenant un fichier vide) et génère un fichier movie.gif vide. Quelqu'un sait pourquoi cela arrive? Merci d'avance.

Répondre

1

Votre arglist pour spawnv doit commencer par "C:\\ffmpeg\\ffmpeg.exe". Essayez cela et voyez comment ça se passe.

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

Merci beaucoup! Le problème était là, maintenant fonctionne bien. Mais j'ai essayé argList sans "C: \\ ffmpeg \\ ffmpeg.exe" parce que cela fonctionne bien en générant une simple vignette. – GerarLM

+0

+1. Envisagez également d'utiliser 'subprocess' à la place, ce qui ne nécessite pas cette duplication. – bobince

+0

Quelle serait la syntaxe correcte en utilisant le sous-processus? J'ai essayé d'utiliser le sous-processus mais c'était impossible pour moi! – GerarLM

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) 

Cela fonctionne très bien sans "C:\\ffmpeg\\ffmpeg.exe" au début de spawnv, ma confusion est venu de là. Merci beaucoup.

+0

Oui, parfois cela va fonctionner, mais c'est plus de chance que la preuve d'un comportement valide. :) – JoshD