je suis en train de faire un timelapse avec mon RPI en python
Pour effectuer les prises d'images et les ranger dans des dossiers : Zero PB
Mais pour créer une vidéo avec FFMPEG j'ai un soucie.
Au bout de X images, le scripte lance la création d'une video.
il en résulte une vidéo avec uniquement la première image ET il écrase toutes les images du dossier par la première image (?!)
Pas de message d'erreur
Que fais je donc de mal ?
Merci
---
le ligne pour FFMEPG :
Code : Tout sélectionner
system('ffmpeg -f image2 -framerate 1 -pattern_type glob -start_number %d -i /media/julien/USBKEY/capture_%d/%d/*.jpg -r 5 -c:v libx264 -pix_fmt yuv420p /media/julien/USBKEY/capture_%s/%d/out%d.mp4 -y' %( nom_premiere_image, nom_dossier, nom_sous_dossier, nom_dossier, nom_sous_dossier, nom_sous_dossier))
L'ensemble du scripte :
Code : Tout sélectionner
from picamera import PiCamera
from time import sleep
from time import time
from os import system
import RPi.GPIO as GPIO
import os
from PIL import Image # pour visioner
import subprocess # pour permettre de cloturer le viewer
import ffmpeg
camera = PiCamera()
camera.resolution = (720,640)
#variables
temps_entre_photo_voulu = 1 # si <= 4sec : relais tjrs allumé . cette variable est en lien avec le relais et donc ne peut être < à 1
photos_par_dossier = 4 # nbre de photos par dossier
creation_gif = True # pour 100 photos dans un dossier le RPI met +/- 50 sec
vitesse_image_gif = 1 # temps_apparition des images du GIF ou framerate pour FFMPEG
lumiere = True # actionner le relais
viewer = True # montre la photo prise
#constantes
temps_avant_lancement=3# mettre10sec si en boot (laisse le temps de monter le MEDIA si programme au boot du RPI)
relay=17
temps_relais=0.5
#ne pas modifier
temps_calcul= temps_entre_photo_voulu-(2*temps_relais)
photos_prises=0
GPIO.setmode(GPIO.BCM)
GPIO.setup(relay, GPIO.OUT)
GPIO.setwarnings(False)
nom_dossier=int(time())
nom_image=nom_dossier
nom_premiere_image=nom_image+1
nom_sous_dossier=0
#info console
print("Temps entre prise photos :", temps_entre_photo_voulu,"sec")
print("Mode creation GIF : ", creation_gif)
print("Nbre de photos par dossier :", photos_par_dossier)
print("Lancement dans",temps_avant_lancement, "secondes")
#test lumiere
if lumiere :
GPIO.output(relay, GPIO.LOW)
sleep (temps_avant_lancement)#important si programme en boot : le temps de le MEDIA soit monté
os.makedirs('/media/julien/USBKEY/capture_%s' % nom_dossier)#creation du dossier parent
print("La boucle demarre")
while 1:
# si pas de photo prise (== nouveau cycle) alors création d'un dossier pour ce nouveau cycle
if photos_prises == 0 :
nom_sous_dossier += 1
os.makedirs('/media/julien/USBKEY/capture_%s/%d' %(nom_dossier, nom_sous_dossier))
print("creation d'un sous_dossier n°", nom_sous_dossier)
sleep(1)
# si nbre prises < nbre photos par dossier alors prise d'une photo
if photos_prises < photos_par_dossier :
if lumiere :
GPIO.output(relay, GPIO.LOW)
sleep(temps_relais) #lancer meme si relais off car est pris en compte dans l'interlude entre photos
nom_image+=1
camera.capture('/media/julien/USBKEY/capture_%d/%d/%d.jpg' %(nom_dossier, nom_sous_dossier,nom_image))# indiquer image+date
#lance un viewer avec la photo prise
if viewer :
p = subprocess.Popen(['display', '/media/julien/USBKEY/capture_%d/%d/%d.jpg' %(nom_dossier, nom_sous_dossier,nom_image)])
sleep(temps_relais) # idem
#si temps entre photo <= 4 sec alors reste allumé
if temps_entre_photo_voulu > 4 and lumiere :
GPIO.output(relay, GPIO.HIGH)
photos_prises += 1
print("photo prise n°", photos_prises,"/", photos_par_dossier," avant nouveau cycle (+ crea GIF si actionné)")
sleep(temps_entre_photo_voulu)
#ferme le viewer
if viewer :
p.kill()
else:
#si on dépasse le nbre de photo par dossier
photos_prises=0
#creation gif
if creation_gif :
var_temps=int(time())
print("Creation du mp4 n°", nom_sous_dossier)
# system('convert -delay %f -loop 0 /media/julien/USBKEY/capture_%s/%d/image*.jpg /media/julien/USBKEY/capture_%s/%d/animation%d.gif' %(vitesse_image_gif, nom_dossier, nom_sous_dossier, nom_dossier, nom_sous_dossier, nom_sous_dossier))
system('ffmpeg -f image2 -framerate 1 -pattern_type glob -start_number %d -i /media/julien/USBKEY/capture_%d/%d/*.jpg -r 5 -c:v libx264 -pix_fmt yuv420p /media/julien/USBKEY/capture_%s/%d/out%d.mp4 -y' %( nom_premiere_image, nom_dossier, nom_sous_dossier, nom_dossier, nom_sous_dossier, nom_sous_dossier))
var_temps=int(time())-var_temps
print("animation_gif_faite en ",var_temps,"sec")
print("Dossier " , nom_sous_dossier, "terminé")