(and how to convert MPEG video to animated GIF)
I gave an
Ignite talk
this week at
Ignite Silicon Valley.
It was a great event! Lots of entertaining talks about all sorts of topics.
I'd always wanted to do an Ignite speech.
I always suspected the kicker would be format:
O'Reilly's guidelines specified PowerPoint format.
Of course, as a Linux user, my only option for creating PowerPoint
slides is OpenOffice. Historically, OpenOffice and I haven't gotten
along very well, and this slide show was no exception. Happily,
Ignite needs only 20 slides ... how hard can that be, right?
Most of my slides were very simple (a few words, or one picture),
with one exception: I had one simulation I wanted to show as a
video. (When I give this presentation on my own machine, I run
the simulation live, but that's not an option on someone else's machine.
Impress woes
First I wrestled with Open Office to create the non-animated slides.
It was harder than I'd expected.
I just loved having to go back and un-capitalize words that
OO kept helpfully re-capitalizing for me.
And the way it wouldn't let me change text format on any word that
triggered the spellchecker, because it needed to show me the spellcheck
context menu instead. And the guessing game clicking around trying to
find a place where OO would let me drag to move the text to somewhere
where it was approximately centered.
And when I finally thought I had everything, I saved as .ppt, re-loaded
and discovered that it had lost all my formatting, so instead of yellow
96 point centered text I had white 14-point left-aligned, and I had to
go in and select the text on each slide and change three or
four properties on each one.
And I couldn't use it for an actual presentation.
In slideshow mode, it only showed the first slide about one time out
of six. The other times, it showed a blank slide for the first 15
seconds before auto-advancing to the second one.
The auto-advance timing was off anyway (see below).
Fortunately, I didn't need use OpenOffice for this presentation;
I only needed it to create the PPT file.
I ended up making a separate version of the slides in HTML to practice with.
Inserting a movie
But I did eventually have all my static slides ready.
It was time to insert my movie, which I had converted to MPEG1
on the theory that it works everywhere. With the mpeg added,
I saved one copy to OpenOffice's native format of .odp,
plus the .ppt copy I would need for the actual presentation.
Then I quit and opened the .ppt -- and the video slide was blank.
A bit of searching revealed that this was a long-known issue,
bug 90272,
but there seems to be no interest in fixing it.
So I was out of luck if I wanted to attach an MPEG,
unless I could find someone with a real copy of PowerPoint.
Plan B: Animated GIF
Next idea: convert my 15-second video to an animated GIF.
But how to do that? Google found me quite a few web pages that claimed
to give the recipe, but they all led to the same error message:
ERROR: gif only handles the rgb24 pixel format. Use -pix_fmt rgb24.
So what? Just add -pix_fmt rgb24 to the commandline,
right? But the trick turns out to be where to add it, since
ffmpeg turns out to be highly picky about its argument order.
Here's the working formula to convert a movie to animated GIF:
$ ffmpeg -i foo.mpeg -pix_fmt rgb24 foo.gif
This produced a huge file, though, and it didn't really need to be
1024x768, so I scaled it down with ImageMagick:
convert -depth 8 -scale 800x600 flock-mpeg.gif flock-mpeg-800.gif
which brought the file size from 278M down to a much more reasonable
1.9M.
Happily, OpenOffice does seem to be able to import and save animated
GIFs, even to .ppt format. It has trouble displaying them -- that's
bug 90272
-- so you wouldn't want to use this format for a presentation you were
actually going to give in OpenOffice. But as I mentioned, OpenOffice
was already out for that.
If you do this, make sure all your static slides are finished first.
Once I loaded the animated GIF,
OpenOffice slowed to a crawl and it was hard to do anything at all.
Moving text on a slide turned into an ordeal of "hover the mouse where
you think a move cursor might show up, and wait 45 seconds ... cursor
change? No? Okay, move a few pixels and wait again." Nothing happened
in real time. A single mouse click wouldn't register for 30 seconds or
more. And this was on my fast dual-core desktop with 4G RAM;
I don't even want to think what it would be like on my laptop.
I don't know if OOo is running the animations continuously, or what --
but be sure you have everything else finished before you load any animations.
The moment of truth
I never found out whether my presentation worked in real Microsoft Powerpoint.
As it turned out, at the real event, the display machine was a Mac
running Keynote. Keynote was able to import the .ppt from OpenOffice,
and to display the animation. Whew!
One curiosity about the display: the 15 seconds per slide auto-advance
failed on the animated slide. The slide showed for 30 seconds rather
than 15. I had written this off as another OpenOffice bug, so I wasn't
prepared when Keynote did the same thing in the live presentation,
and I had to extemporize for 15 seconds.
My theory, thinking about it afterward, is that the presentation
programs don't start the counter until the animation has finished
playing. So for an Ignite presentation, you might need to set the
animation to play for exactly 15 seconds, then set that slide to
advance after 0 seconds. If that's even possible.
Or just use HTML. The great irony of this whole story is that some of
the other presenters used their own laptops, so I probably could have
used my HTML version (which had none of these problems) had I asked.
I will definitely remember that for the next Ignite!
Meanwhile, I suppose it's good for me to try OO Impress every few
years and remind myself why I avoid it the rest of the time.