Saturday, April 16, 2011

Converting mkv to mp4 without reencoding

I use my Xbox for watching movies and listening to music, and it works really well. Unfortunately Xbox does not yet support the MKV video container format which means that I have a lot of cool movies that need converting. So I surfed the net to find a solution and of course, someone had written a script. I rewrote parts of it to suit my own needs. So here it is.

#!/bin/sh

# converts mkv to mp4
[ ! -r "$1" ] && echo "Error! Cannot read $1 !" && exit 1
#[ ! -x "./neroAacEnc" ] && echo "Error! neroAacEnc does not exist or is not executable!" && exit 1
bname=`basename $1`
dname=`dirname $1`
mkvinfo "$1" | grep -i track
echo "Which track is video? (generally 1 or 2)"
read vidtrack
echo "Which track is audio? (generally 1 or 2)"
read audtrack
echo "Which track is subtitles? (generally 3 or 4)"
read subtrack
echo "What is the video frames per second (fps)?"
read vidfps
mkvextract tracks $1 ${vidtrack}:video.h264 ${audtrack}:audio.ac3
#mkvextract tracks $1 ${vidtrack}:video.h264 ${audtrack}:audio.ac3 ${subtrack}:subtitles.srt
xxd -g4 video.h264 | sed '0,/RE/s/67640033/67640029/' | xxd -r > video2.h264
mv video2.h264 video.h264
mkfifo audiodump.wav
#neroAacEnc -ignorelength -q 0.20 -if audiodump.wav -of audio.m4a & mplayer audio.ac3 -vc null -vo null -ao pcm:fast
faac -q 0.20 -o audio.m4a audiodump.wav & mplayer audio.ac3 -vc null -vo null -ao pcm:fast
rm audiodump.wav
MP4Box -fps $vidfps -add video.h264 -add audio.m4a ${dname}/${bname}.mp4
rm audio.m4a audio.ac3 video.h264


Cheers,
Dr. Mike

No comments:

Post a Comment