Wednesday, August 17, 2011

Transcoding video to H.264 using xuggler mediatool

On tutorial, it use ffmpeg command to transcode videos. Also on Mediatool tutorial, there isn't an example to transcode video to another format. Or it use more primitive API at "How to Grow Some Balls" example.

So I create MediaToolAdapter and override onAddStream to change the codec.
public class SetVideoTranscodeListener extends MediaToolAdapter {
    @Override
    public void onAddStream(IAddStreamEvent event) {
        int streamIndex = event.getStreamIndex();
        IStreamCoder streamCoder = event.getSource().getContainer().getStream(streamIndex).getStreamCoder();
		
        if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO) {
            streamCoder.setCodec(ICodec.findEncodingCodec(ICodec.ID.CODEC_ID_H264));
            int retval = Configuration.configure("/usr/local/xuggler/share/ffmpeg/libx264-superfast.ffpreset", streamCoder);
            if (retval<0)
                throw new RuntimeException("cound not cofigure coder from preset file");
        }
        super.onAddStream(event);
    }
}
And add an instance of this class as a listener to writer
    writer.addListener(new SetVideoTranscodeListener());