Skip to main content

Flash video to Disney MixMax

I'm a sucker for electronic kid gadgets, as long as they're on clearance. In our house we've got several Juice Boxes, a VideoNow PVD, and even a Disney MixMax video player. The MixMax hits the sweet spot in that it uses cheap SD memory and uses WMV as it's video format.

My kids love to watch WordGirl. Unfortunately, there's no DVD of these shorts. The friendly folks over at PBS Kids have (intentionally or otherwise) put all the Flash video clips online in a directory of their web server (http://pbskids.org/wordgirl/content/video).

It took me a couple of days, but I can now share how I converted the files so they work on the MixMax.

My initial experiments centered on using ffmpeg on Linux to convert to a common format. It worked out okay on some of the videos, but not all of them. ffmpeg can encode in WMV/WMA, so then I tried that. Again, it worked for some videos but not all of them. As my Linux box also happens to be my Windows box, rebooting soon became tiresome and I moved to a Win32 port of ffmpeg.

Here's the ffmpeg command line I used to create a "raw" video file.

ffmpeg -i x.flv -b 512k -vcodec huffyuv -acodec pcm_u8 -r 24 x.avi

(Three notes: One, 'huffyuv' requires ffdshow to be installed. Two, this codec was chosen through trial and error, not some intrinsic "goodness" for the task at hand. Three, these files still need to be converted to the correct WMV format.)

Converting video files to the appropriate size, bitrate, etc. for the MixMax is a pain if you use the standard encoder (i.e. what the MixMax instructions recommend.) As I'm more than comfortable on the commandline I use the WSH script that comes with the encoder.

Here's the command line that does the WMV conversion:

cscript "C:\Program Files\Windows Media Components\Encoder\WMCmd.vbs" -input x.avi -output x.wmv -loadprofile "C:\Program Files\Windows Media Components\Encoder\Profiles\mixmax.prx"

(mixmax.prx is not a standard profile -- Google is your friend here)

Comments

Popular posts from this blog

Building Amazon Linux RPMs with Fedora Mock

Fedora's 'mock' tool provides a much more convenient way to build RPMs than using 'rpmbuild'.  It creates a chroot environment for your target OS and will install required dependencies. I've been running into limitations on the version of CollectD that ships with Amazon Linux, so I thought it wouldn't be that difficult to use mock to build an updated version complete with some missing plugins.  I knew that it generally worked, as I was able to use the specfile from the project to build for EPEL6 using Fedora 26.  Man, was I wrong about how easy it would be for Amazon Linux. I won't go into details here, but it's worth mentioning that the CollectD project documentation calls out that the specfile in their contrib directory is generally out of date.  That is 100% correct, so you'll need to budget some time for tweaking it. The first issue is that there are some packages in EPEL that can't be installed in Amazon Linux.  The most aggravatin

Mass updating AWS Lambda Log Group retention

AWS Lambda and I have a love/hate relationship.  There is much about Lambda to like, but there are also some very sharp edges operationally. One of the cool things is that you get a new CloudWatch Log Group for every new Lambda function without any effort on your part.  Less cool is that it has unlimited retention.  If you haven't yet followed Yan Cui's advice , then you can use some Bash/CLI magic to fix retention on your existing Log Groups. First, get a list of all your default Lambda log groups:  aws logs describe-log-groups --log-group-name-prefix "/aws/lambda" | grep logGroupName | cut -d : -f 2 | cut -d \" -f 2 > /tmp/lambda_logs Read that into a Bash array:  readarray -t log_groups < /tmp/lambda_logs Then, add a 7 day retention policy to all those log groups:  for i in "${log_groups[@]}"; do aws logs put-retention-policy --log-group-name $i --retention-in-days 7; done It's a hack, but if you're going to put in th

Python and libpuzzle

As much as I've dogged on Python in the past (significant whitespace, really?), I've got to admit that it's got some cool features too. For example, I'm playing with libpuzzle  (a library for visually comparing images).  It has a command line utility and a C and PHP API.  Unfortunately, the CLI utility doesn't allow one to dump the raw comparison vector, and it's a PITA to write C just to play with a library. Python's native "ctypes" to the rescue! from ctypes import * class PuzzleCvec(Structure): _fields_ = [("sizeof_vec", c_size_t), ("vec", c_char_p)] class PuzzleCompressedCvec(Structure): _fields_ = [("sizeof_compressed_vec", c_size_t), ("vec", c_char_p)] class PuzzleContext(Structure): _fields_ = [("puzzle_max_width", c_uint), ("puzzle_max_height", c_uint), ("puzzle_lambdas", c_uint),