views:

1625

answers:

3

Part of a new product I have been assigned to work on involves server-side conversion of the 'common' video formats to something that Flash can play.

As far as I know, my only option is to convert to FLV. I have been giving ffmpeg a go around, but I'm finding a few WMV files that come out with garbled sound (I've tried playing with the audio rates).

Are there any other 'good' CLI converters for Linux? Or are there other video formats that Flash can play?

+11  A: 

Flash can play the following formats:

FLV with AAC or MP3 audio, and FLV1 (Sorenson Spark H.263), VP6, or H.264 video.
MP4 with AAC or MP3 audio, and H.264 video (mp4s must be hinted with qt-faststart or mp4box).

ffmpeg is an overall good conversion utility; mencoder works better with obscure and proprietary formats (due to the w32codecs binary decoder package) but its muxing is rather suboptimal (read: often totally broken). One solution might be to encode H.264 with x264 through mencoder, and then mux separately with mp4box.

As a developer of x264 (and avid user of flash for online video playback), I've had quite a bit of experience in this kind of stuff, so if you want more assistance I'm also available on Freenode IRC on #x264, #ffmpeg, and #mplayer.

Dark Shikari
+2  A: 

Thanks for that info!

What does 'mp4s must be hinted with qt-faststart or mp4box' mean? Is this some additional metadata that is required for Flash to accept the file for playback?

Our current command is:

ffmpeg -i *INPUT* -s 320x240 -r 25 -b 256k -ar 22050 -ab 48k *OUTPUT*.flv 2>&1
Tom R
+2  A: 

Most encoders, by default (ffmpeg included) put the header atom of the mp4 (the "moov atom") at the end of the video, since they can't place the header until they're done encoding. However, in order for the file to start playback before its done downloading, the moov atom has to be moved to the front.

To do this, you have to (re)mux using mp4box (which does it by default) or use qt-faststart, a script for ffmpeg that simply moves the atom to the front. Its quite simple.

Note that for FLV, by default, ffmpeg will use the FLV1 video format, which is pretty terrible; its over a decade old by this point and its efficiency is rather awful given modern standards. You're much better off using a more modern format like H.264.

Dark Shikari
What's the benefit in putting the atom at the end?
sheepsimulator