Capture périodique flux vidéo avec QuickTime

aCLR

Bisounours
Modérateur
Club iGen
7 Mars 2008
11 672
6 551
Rouen
Bonjour,

je cherche le moyen de capturer le flux vidéo de ma caméra à intervalle donné. Cette capture doit être automatisée. Je souhaite faire cela avec QuickTime.

J'ai bien vu Copernicus, mais je dois lancer et stopper la capture via une touche de fonction. De plus la capture via une zone de l'écran empêche de poser une fenêtre dessus voire le curseur.

…………

Je cherche donc un Applescript ou un processus Automator qui me permettrais de régler la durée d'enregistrement et l'intervalle entre deux captures afin de capturer avec QTP.
À moins qu'une application puisse faire cela de façon automatique.

…………

J'ai fais une recherche dans les archives qui me donne en résultat une discussion sans suite…


:)
 
Bonjour

Je remonte ce vieux fil sur lequel je suis retombé par hasard en faisant des recherches, parce qu'ayant trouvé en grande partie la réponse, je n'arrive pas à régler un point de détail qui se dérange.

Tout d'abord, voici la solution qui me permet de capturer des séquences : il s'agit d'un script en AppleScript utilisant QuickTime Player (chez moi actuellement en version 7.6.4). Ma caméra est branchée sur la prise Firewire de mon Mac et est en fonctionnement lorsque le script démarre.
Bloc de code:
[COLOR="Blue"][COLOR="DimGray"]-- Dossier de sauvegarde des captures vidéo : ~/Séquences/MesCaptures/[/COLOR]
[B]property[/B] [COLOR="DarkGreen"]_NomDossier[/COLOR] [COLOR="Black"]: "Movies:MesCaptures:"[/COLOR]
[COLOR="DimGray"]-- Durée d'une capture vidéo : 10 secondes[/COLOR]
[B]property[/B] [COLOR="DarkGreen"]_Duree[/COLOR] [COLOR="Black"]: 10[/COLOR]

[B]try[/B]
   [B]tell[/B] application [COLOR="Black"]"QuickTime Player"[/COLOR]
      [COLOR="DimGray"]-- Nouvelle séquence QuickTime[/COLOR]
      new movie recording
      [COLOR="DimGray"]-- Nom du prochain fichier vidéo[/COLOR]
      [B]set[/B] [COLOR="DarkGreen"]_DossierDestination[/COLOR] [B]to[/B] [COLOR="Black"](([/COLOR]path [B]to[/B] home folder) [B]as[/B] string[COLOR="Black"][COLOR="Black"])[/COLOR] &[/COLOR] [COLOR="DarkGreen"]_NomDossier[/COLOR]
      [B]set[/B] [COLOR="DarkGreen"]_Date_Heure[/COLOR] [B]to[/B] do shell script[COLOR="Black"] "/bin/date +%Y%m%d-%H%M%S"[/COLOR]
      [B]set[/B] [COLOR="DarkGreen"]_FichierDestination[/COLOR] [B]to[/B] [COLOR="Black"]([/COLOR]quoted form [B]of[/B] POSIX path [B]of[/B] ([COLOR="DarkGreen"]_DossierDestination[/COLOR] [COLOR="Black"]&[/COLOR] [COLOR="DarkGreen"]_Date_Heure[/COLOR] [COLOR="Black"]& ".mov"))[/COLOR] [B]as[/B] string
      [COLOR="DimGray"]-- Début de l'enregistrement[/COLOR]
      start recording [COLOR="Black"]1[/COLOR]
      [COLOR="DimGray"]-- Attente[/COLOR]
      delay [COLOR="DarkGreen"]_Duree[/COLOR]
      [COLOR="DimGray"]-- Fin de l'enregistrement[/COLOR]
      stop recording [COLOR="Black"]1[/COLOR]
      
      [COLOR="DimGray"]-- Récupération du nom de la séquence créée[/COLOR]
      [B]set[/B] [COLOR="DarkGreen"]_FichierSequence[/COLOR] [B]to[/B] [COLOR="Black"]([/COLOR]quoted form [B]of[/B] POSIX path [B]of[/B] [COLOR="Black"](([/COLOR]original file [B]of[/B] document [COLOR="Black"]1)[/COLOR] [B]as[/B] string[COLOR="Black"]))[/COLOR]
      [COLOR="DimGray"]-- Fermeture de la fenêtre de la séquence enregistrée[/COLOR]
      close document [COLOR="Black"]1[/COLOR]
      [COLOR="DimGray"]-- Sauvegarde de la séquence dans le dossier des captures vidéo[/COLOR]
      do shell script [COLOR="Black"]"mv " &[/COLOR] [COLOR="DarkGreen"]_FichierSequence[/COLOR] [COLOR="Black"]& " " &[/COLOR] [COLOR="DarkGreen"]_FichierDestination[/COLOR]
   [B]end tell[/B]
   
   [COLOR="DimGray"]-- En cas d'erreur[/COLOR]
[B]on error[/B] [COLOR="DarkGreen"]_MessageErreur[/COLOR] number [COLOR="DarkGreen"]_NumeroErreur[/COLOR]
   [COLOR="DimGray"]-- Enregistre l'erreur dans le fichier de log situé dans le dossier "maison"[/COLOR]
   do shell script [COLOR="Black"]"/bin/date +\"%Y-%m-%d %H:%M:%S [" &[/COLOR] [COLOR="DarkGreen"]_NumeroErreur[/COLOR] [COLOR="Black"]& "] - " &[/COLOR] [COLOR="DarkGreen"] _MessageErreur[/COLOR] [COLOR="Black"]& "\" >> ~/MesCaptures.log"[/COLOR]
[B]end try[/B][/COLOR]
Ce script est lancé de façon périodique à l'aide d'un autre moyen (iCal, cron, un autre script, etc. - je ne m'étendrai pas là-dessus, compte tenu que ce type de question a déjà été traité plusieurs fois sur les forums).


Mon problème tient au fait que je n'arrive pas à contrôler précisément la durée de l'enregistrement.

Il y a en effet un délai entre l'envoi de la commande de mise en route de l'enregistrement dans QuickTime (« start recording ») et son démarrage effectif. Au final, la séquence est plus courte que prévu de plusieurs secondes, et surtout la réduction de la durée est aléatoire.

Or, j'aurais souhaité obtenir des séquences d'une durée sinon exacte, au moins constante.

Notez que je n'utilise pour le moment que la commande « delay » pour fixer la durée. J'ai tenté d'utiliser la propriété « state » de l'élément « recording » pour connaître le moment du démarrage de l'enregistrement, mais je n'y suis pas parvenu (je n'ai pas trouvé la syntaxe correcte pour en tirer parti).

Alors si vous aviez une idée sur la question... merci d'avance.
 
  • J’aime
Réactions: aCLR
N'ayant pas eu de réponse à l'époque du post, je suis allé remonté une discussion dans développement sur mac, et voilà le script qu'un membre a donné

Bloc de code:
property dossierdestination : "/Users/monNOM/Movies/mondossier" -- le chemin du dossier doit être un dossier existant.

on run
	tell application "System Events" to exists process "QuickTime Player"
	if the result then tell application "QuickTime Player"
		close documents saving no
		quit
	end tell
	if (do shell script "/usr/bin/defaults read com.apple.quicktimeplayer CapturePreferenceDefaultSaveToLocation") is not dossierdestination then
		do shell script "/usr/bin/defaults write com.apple.quicktimeplayer CapturePreferenceDefaultSaveToLocation " & quoted form of dossierdestination
	end if
end run

on idle
	tell application "QuickTime Player"
		if not (exists recording 1) then
			new movie recording
			start first recording
			set duree to 60 -- durée de l'enregistrement en secondes, modifie le temps  selon vos besoins.
		else
			stop first recording
			close front document saving no
			set duree to 600 -- =10 minutes, temps d'attente en secondes avant de lancer un nouvel enregistrement, modifie le temps  selon vos besoins.
		end if
	end tell
	return duree
end idle

"set duree to" remplace "delay".
Seulement, je rencontrais le même problème que toi quant à la durée inégales des séquences. Je n'ai pas poussé plus en avant (dans l'autre discussion), pensant que ma petite configuration était la cause de ce problème de durée inconstante des séquences.

Si cela peut t'aider…
 
  • J’aime
Réactions: teo et PA5CAL
Merci pour ta réponse.

Je vais continuer à chercher le moyen de contrôler la durée exacte d'enregistrement... en espérant que ce soit possible sans faire appel à un logiciel spécifique.