QuickTime makes it easy to import an image sequence. However, there’s no way to modify the timing of the slides. So, I’ve been working on a script that turns an image sequence (PowerPoint slide export) into a custom timed slideshow.
The main idea behind this is to create an image sequence movie that will be timed to an audio narration; allowing someone to easily create a narrated slideshow that will retain the custom timing for each slide in the presentation - and as a bonus get synchronized chapter markers!
It works by creating a standard image sequence movie, then importing chapter markers into another movie. From there, it iterates through the image sequence, copying each image and adding them to the chapter marker movie according to the duration of each chapter (text frame).
The script works great on small test sequences (10 slides), but as soon as I tried it on a real presentation (77 slides) I encountered what seems to be random memory corruption during “add with scaled”, usually occurring 20-40 slides into the process. From what I’ve read online so far, there doesn’t seem to be much I can do about this.
Anyone have any thoughts or suggestions about what I can do at this point?
Thanks!
global slideMovie
global textMovie
global duration1
tell application "Finder"
my openImageSequence(choose file with prompt "Select the first image in your image sequence.")
my openTextSequence(choose file with prompt "Select the QuickTime Text file with your chapters.")
my makeSlideShow()
tell application id "com.apple.quicktimeplayer"
close slideMovie saving no
tell textMovie
select none
--set chapterlist of track "Audio Track" to track "Text Track"
--set enabled of track "Text Track" to false
save self contained in (path to desktop as string) & "SlideShow.mov"
end tell
end tell
end tell
on makeSlideShow()
tell application id "com.apple.quicktimeplayer"
activate
tell slideMovie
activate
repeat with i from 1 to (number of frames in track 1)
tell slideMovie
activate
set inPoint to time of (frame i) in (track 1)
if (i + 1) is not greater than (number of frames in track 1) then
set outPoint to time of (frame (i + 1)) in (track 1)
else
set outPoint to duration of track 1
end if
select at inPoint to outPoint
copy
--delay 1
end tell
my setSlidesInChapters(i as number)
end repeat
end tell
end tell
end makeSlideShow
on setSlidesInChapters(chpt)
tell application id "com.apple.quicktimeplayer"
tell textMovie
activate
set inPoint to time of (text frame chpt) in (track 1)
if (chpt + 1) is not greater than (number of frames in track 1) then
set outPoint to time of (frame (chpt + 1)) in (track 1)
else
set outPoint to duration of track 1
end if
select at inPoint to outPoint
add with scaled
--Debug. This tests to see if add with scaled changes the movie duration (this shouldn't happen)
if duration of textMovie is greater than duration1 then
display dialog (("While adding --> slide " & (chpt as string) & "<-- the movie duration changed. New durration is " & duration of textMovie as string) & ". Used startPoint " & inPoint as string) & " and endpoint " & outPoint as string
set duration1 to duration of textMovie
end if
--end Debug
end tell
end tell
end setSlidesInChapters
on openTextSequence(textFile)
tell application id "com.apple.quicktimeplayer"
open textFile
set textMovie to a reference to document (name of document 1)
set duration1 to duration of textMovie
end tell
end openTextSequence
on openImageSequence(firstSlide)
tell application id "com.apple.quicktimeplayer"
close every window
open image sequence firstSlide seconds per frame 1
set slideMovie to a reference to document (name of document 1)
tell slideMovie
set numberOfSlides to number of frames in track 1 as string
end tell
end tell
end openImageSequence