Python: Рядък проблем при генериране на .gif с ffmpeg

Имам проблем, когато генерирам анимиран gif от movie.avi с помощта на ffmpeg от python в Win7. Ако отворя cmd прозорец и изпълня този ред:

"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)

Случва се нещо наистина рядко: Моят video.avi губи целия си размер, сега е празен файл с 0 байта, а movie.gif също е празен файл с 0 байта, така че същият код в cmd windows работи добре и в моята програма на python модифицира моя файл movie.avi и изтрива цялото му съдържание (но файлът movie.avi не се изтрива, файлът все още съществува, но сега е празен файл) и генерира празен файл movie.gif. Някой знае ли защо се случва това? Благодаря предварително.


person GerarLM    schedule 03.10.2010    source източник


Отговори (2)


Вашият arglist за spawnv трябва да започва с "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)
person JoshD    schedule 03.10.2010
comment
Благодаря много! Имаше проблем, сега работи добре. Но опитах argList без C:\\ffmpeg\\ffmpeg.exe, защото работи добре, генерирайки проста миниатюра. - person GerarLM; 04.10.2010
comment
+1. Също така обмислете използването на subprocess вместо това, което не изисква това дублиране. - person bobince; 04.10.2010
comment
Какъв би бил правилният синтаксис при използване на подпроцес? Опитах се да използвам подпроцес, но беше невъзможно за мен! - person GerarLM; 04.10.2010

@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)

Това работи добре без "C:\\ffmpeg\\ffmpeg.exe" в началото на spawnv, моето объркване идва от това. Благодаря много.

person GerarLM    schedule 03.10.2010
comment
Да, понякога ще работи, но това е повече късмет, отколкото доказателство за валидно поведение. :) - person JoshD; 04.10.2010