Encoding to h264/aac mp4 for N8x0 with Linux
Updated script available since 02.08.2008!
I tried a while and searched through internettablettalk forums but now I have a solution for converting almost any video source to h264/aac mp4 playable with n8x0s default Media Player (OS2008) using linux tools. I have written a little script to make it easier to convert stuff for the Tablet.
Necessary Tools
These are the tools used:
- mplayer
- faac
- x264
- mp4creator
The Script
save this code into a file, e.g. n800-encode.sh and make it executable (do chmod +x n800-encode.sh on a shell).
You can also download the script here: n800-encode_02082008.zip
#!/bin/bash _INFILE="$1" _OUTFILE="$2" _MPOPTS="$3" identifySource() { mplayer -identify -ao null -vo null -endpos 2 ${_MPOPTS} "${_INFILE}" | grep ID_ > /tmp/n800-encode.$$.ident FPS=$(cat /tmp/n800-encode.$$.ident | grep ID_VIDEO_FPS | uniq | cut -d '=' -f 2) ASPECT=$(cat /tmp/n800-encode.$$.ident | grep ID_VIDEO_ASPECT | tail -n 1 | cut -d '=' -f 2 | cut -d ' ' -f 2) WS=`expr $ASPECT \> 1.6 \& $ASPECT \< 1.9` if [[ `expr $ASPECT \> 2.0` -eq 1 ]] then WS=2 fi case ${WS} in 0) SCALE="320:240" echo "encoding for standard" ;; 1) SCALE="400:224" echo "encoding for widescreen" ;; 2) SCALE="400:192" echo "encoding for extra-widescreen" ;; esac } encode() { x264 -o "$PWD/n800-encode.$$/video.264" "$PWD/n800-encode.$$/video.y4m" --threads 3 --no-cabac --bitrate 250 -A i4x4,p4x4,p8x8,b8x8 --level 1.2 >/dev/null 2>/dev/null & faac -b 96 --mpeg-vers 4 -o "$PWD/n800-encode.$$/audio.aac" "$PWD/n800-encode.$$/audio.wav" 2>/dev/null >/dev/null& sleep 1 mplayer -vf scale=${SCALE},unsharp=c4x4:0.3:l5x5:0.5 -ao pcm:file="$PWD/n800-encode.$$/audio.wav" -vo yuv4mpeg:file="$PWD/n800-encode.$$/video.y4m" -ass -embeddedfonts -noframedrop ${_MPOPTS} "${_INFILE}" rm -f "${_OUTFILE}" mp4creator -create "$PWD/n800-encode.$$/audio.aac" "${_OUTFILE}" mp4creator -create "$PWD/n800-encode.$$/video.264" -r ${FPS} "${_OUTFILE}" } prepareTemp() { mkdir -p "$PWD/n800-encode.$$" mkfifo "$PWD/n800-encode.$$/video.y4m" mkfifo "$PWD/n800-encode.$$/audio.wav" } cleanupTemp() { rm -Rf "$PWD/n800-encode.$$" rm -f /tmp/n800-encode.$$.ident } trap cleanupTemp SIGINT SIGTERM identifySource prepareTemp encode cleanupTemp
Using it
Usage is simple, The script accepts 3 options: first the input, second the output and third any additional options for mplayer. Some examples:
- encode test.avi into test.mp4:
n800-encode.sh test.avi test.mp4
- encode test.avi into test.mp4 telling mplayer to render the first subtitle track and the second audio track:
n800-encode.sh test.avi test.mp4 "-sid 0 -aid 1"
Note: all options for mplayer have to be enclosed into one pair of “