Zen Vision Video Help


I recently bought a Creative Zen Vision 30GB from newegg. I had a hard time getting video to play on it correctly. I finally got some good results, so I'm documenting the commands I used here in the hopes that it helps out someone else someday.

I had two problems. First, audio and video were out of sync. Second, playback would stop on any video over about 1 hour and 40 minutes long.

The video sync problem turned out to be caused by an old version of XviD on my system. I switched to lavc and did not have the problem. I also upgraded XviD to version 1.1.2, rebuilt mplayer/mencoder, and had much better results. I do not remember which version of XviD I originally had installed.

System setup


Fedora Core 4
AMD Sempron 2200+
mplayer: SVN snapshot 2007-05-07
libxvidcore: 1.1.2

Commands

This is the command I use for converting 16:9 aspect ratio 24fps video for the Zen Vision.

mencoder $infile -ovc lavc -oac mp3lame \
-lameopts vbr=0:cbr:br=128 -lavcopts vcodec=mpeg4:vbitrate=1500 \
-vf pullup,softskip,format=yv12,scale=640:360 -ofps 24000/1001 \
-ffourcc XVID -of avi -noodml -o $outfile


mencoder the command
$infile input file name
-ovc lavc use the lavc codec that comes with mplayer/mencoder to make the MPEG4 video
-oac mp3lame use the mp3lame library to make the mp3 audio
-lameopts vbr=0:cbr:br=128 Setup the audio for constant bitrate, 128 kbps
-lavcopts vcodec=mpeg4:vbitrate=1500 Set the video to 1500 kpbs MPEG4
-vf pullup,softskip,format=yv12,scale=640:360 These are the video filters. "pullup" converts telecined video back to 24fps. "softskip" helps optimize encoding by dropping frames before more cpu intensive filters. "format=yuv12" converts to 12 bit color. "scale=640:360" scales the video to the maximum horizontal resolution of the Zen Vision while preserving the aspect ratio.
-ofps 24000/1001 Output frame rate is about 24fps. This should match the source material.
-ffourcc XVID This forces the codec identity to be XVID. The Zen Vision host software won't let you transfer video unless it sees a codec id that it recognizes. The lavc library doesn't set this value, so you have to do it manually.
-of avi Output an AVI file format
-noodmlDisable Open DML indexing. Open DML allows AVI files to be bigger than 2 GB, but the Zen Vision doesn't seem to support it. If you don't use this option, mencoder will switch from standard AVI indexing to Open DML when the file reaches 1 GB. The result is that after the Zen Vision has played the first 1 GB of file data, it loops back to the beginning.
-o $outfileOutput file name

I'm running MythTV as my DVR and I wanted to be able to transfer some of my recorded TV shows to the Zen Vision. Here's the command I use to convert them. It's pretty similar to the previous command. The main differences are 4:3 aspect ratio, 30fps frame rate, and running the FFMpeg deinterlacing filter.

mencoder $infile -ovc lavc -oac mp3lame \
-lameopts vbr=0:cbr:br=128 -lavcopts vcodec=mpeg4:vbitrate=1500 \
-vf pp=fd,softskip,format=yv12,scale=640:480 -ofps 30000/1001 \
-ffourcc XVID -of avi -noodml -o $outfile

Performance

I can encode 30fps 4:3 video at about 37 fps.
I can encode 24fps 16:9 letterboxed video at about 46 fps.

Alternatives

You can use libxvidcore to do the encoding instead of lavc. For me, lavc is much faster. If you want to try XviD, use "-ovc xvid" instead of "-ovc lavc". Use "-xvidencopts nogmc:bitrate=1500" instead of the "-lavcopts" used above. You don't need the "-ffourcc" option with XviD.

Acknowledgements

This is the Create Zen Vision Video Format FAQ. It's very helpful to know what the device can do.
http://us.creative.com/support/kb/article.asp?l=2&sid=11043

This discussion thread suggested that Open DML might cause problems.
http://forums.creative.com/creativelabs/board/message?board.id=pmc&message.id=13340&query.id=6461#M13340

Here's the source for the options that help to convert telecined video.
http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-telecine.html