I had to create a looping VCD today.
You would think that would be easy. But NO. VCD is ancient, and you can’t easily find current day tools that deal with it.
After a lot of messing around, this is what I (thought I) had to do:
- convert the original .mp4 file to AVI with SUPER (keeping frame size, frame rate, audio sampling)
- cut out the portion needed with virtualdub
- download VirtualBox and create a virtual machine
- dig up old install CD and install Windows XP
(VCDEasy make use of Windows Media Player 6, which doesn’t exist for WIndows 7)
- install VCDEasy
- Author and burn
But no no, that would be too easy. I got pretty far but I couldn’t get the shared folder to work for the guest OS.
After almost ripping my hair off and pissing the missus with my tantrum, I finally did it, after 4 hours, using GNU VCDImager.
This command line tool dates back to 2002, very fitting for the task at hand. But the direct command line vcdimager only does simple stuffs and not infinite looping. For that, I need the XML driven vcdxbuild
- first, run vcdxgen to generate simple XML input as starting point
- edit the generated XML file. Section (play back control) is what I wanted.
- The simple XML uses <playlist> to create 1-play disc. I replaced this with <selection> to get the looping.
- run vcdxbuild and feed it the edited XML, this create .bin and .cue image files
- burn with MagicISO
Rusty, I am. But hey, got it to work in the end.
Final XML uses, in case I had to do this again anytime in the future.
<?xml version="1.0"?> <!DOCTYPE videocd PUBLIC "-//GNU//DTD VideoCD//EN" "http://www.gnu.org/software/vcdimager/videocd.dtd"> <!-- commandline used: vcdxgen -=iso-volume-label=video -=type=svcd video.mpg --> <videocd > <info> <album-id></album-id> <volume-count>1</volume-count> <volume-number>1</volume-number> <restriction>0</restriction> </info> <pvd> <volume-id>video</volume-id> <system-id>CD-RTOS CD-BRIDGE</system-id> <application-id></application-id> <preparer-id/> <publisher-id/> </pvd> <sequence-items> <sequence-item src="video.mpg" id="sequence-00"/> </sequence-items> <pbc> <selection id="select-loop"> <bsn>1</bsn> <prev ref="select-loop"/> <next ref="select-loop"/> <return ref="select-loop"/> <timeout ref="select-loop" /> <wait>0</wait> <loop jump-timing="immediate">0</loop> <play-item ref="sequence-00" /> <select ref="select-loop" /> </selection> <endlist id="lid-end" rejected="true"/> </pbc> </videocd>