Bonjour,
start ou
stop ne fera rien, si vous ne spécifiez pas un document ou tous les documents.
EX:
Bloc de code:
stop document 1
play documents
tell document 2
start
end tell
Oui, la commande start ou play ne synchronise pas les séquences, idem avec le menu "Lire toutes les séquences".
Voici un script qui synchronise deux séquences avec un décalage de moins d'un dixième de seconde, je l'ai testé ici avec moins de cinq centièmes de secondes.
Bloc de code:
property firstTime : false
property times_scale1 : 0
property times_scale2 : 0
property latence : 0
property t_movies : {}
on run
set firstTime to true
end run
on idle
if firstTime then
openFilms()
else
tell application "QuickTime Player" to if exists document 2 then
tell t_movies
if not playing of item 1 then -- film 1 ne joue pas
pause item 2 -- pause film 2
set p to 0
else
set p to 1
if not playing of item 2 then play item 2 -- film 1 joue et film 2 ne joue pas --> joue film 2
end if
end tell
set t_pos to current time of documents -- position des lecteurs
set The_diff to (my milliieme((item 1 of t_pos) / times_scale1)) - (my milliieme((item 2 of t_pos) / times_scale2))
if The_diff > 0.1 or The_diff < -0.1 then -- décalage de plus d'un dixième de seconde --> synchronise
if p = 0 then -- les lecteurs sont en pause
if times_scale2 = times_scale1 then
set current time of item 2 of t_movies to (current time of item 1 of t_movies)
else
set current time of item 2 of t_movies to ((current time of item 1 of t_movies) / times_scale1) * times_scale2
end if
else if p = 1 then -- les lecteurs jouent
repeat with i from 1 to 10 -- synchronise pendant la lecture
set current time of item 2 of t_movies to (current time of item 1 of t_movies) + (latence * i)
delay 3
set t_pos to current time of documents
set The_diff to (my milliieme((item 1 of t_pos) / times_scale1)) - (my milliieme((item 2 of t_pos) / times_scale2))
if The_diff < 0.1 and The_diff > -0.1 then exit repeat -- synchro OK, moins d'un dixième de seconde , sort de la boucle
end repeat
end if
end if
end if
end if
return 5 -- vérification aux 5 secondes
end idle
on openFilms()
set film1 to "/Volumes/VolumeRaid/ENCODAGE/EXPO/MILES DAVIS/MOV/MilesDavisCS1.mov"
set film2 to "/Volumes/VolumeRaid/ENCODAGE/EXPO/MILES DAVIS/MOV/MilesDavisCS1 - copie.mov"
tell application "QuickTime Player"
close documents saving no
set t_movies to open {film1, film2}
activate
tell documents
repeat until load state of item 1 is complete and load state of item 2 is complete
delay 3
end repeat
set looping to true
present item 1 scale screen display 2
present item 2 scale screen display 1
pause
set {times_scale1, times_scale2} to time scale
set current time to 0 -- met les lecteurs au début
play
delay 1
set t_pos to current time -- position des lecteurs
pause
-- vérifie la diffférence de temps entre les deux films et ajuste la position du deuxième lecteur selon le temps de latence.
set n to (my milliieme((item 1 of t_pos) / times_scale1)) - (my milliieme((item 2 of t_pos) / times_scale2))
set latence to (n * times_scale2) div 1.3
set current time of item 1 to 0
set current time of item 2 to latence
delay 1
play
end tell
end tell
set firstTime to false
end openFilms
on quit
continue quit
end quit
on milliieme(n) -- retourne le nombre avec trois décimale
return ((n * 1000) div 1) / 1000
end milliieme
Le script fait une vérification à toutes les cinq secondes, vous pouvez l'ajuster selon vos préférences.
La séquence maître est le film de la variable
film1 dans le script
Donc, si l'utilisateur met en pause la séquence maître, le script pausera l'autre séquence après sa prochaine vérification, même chose pour la lecture
Si l'utilisateur (avance ou recule) la position d'un des deux films, le script synchronisera après sa prochaine vérification des temps des lecteurs.
Ce script fonctionne avec un
idle, donc il faut l'enregistrer au format "Progiciel" et cocher l'option "
Rester en arrière-plan".
Ajouter l'application (le script) dans l'ouverture automatique à l'ouverture de votre session. (Préférences -->comptes )
Editer : Le script ne prend seulement que 1% sur le processeur ici.