LinHES Forums
http://forums.linhes.org/

Export NUV To KVCD
http://forums.linhes.org/viewtopic.php?f=3&t=1767
Page 1 of 1

Author:  dogboy [ Thu Jun 17, 2004 7:39 pm ]
Post subject:  Export NUV To KVCD

Here's a script that I've modified a bit. I've customized it so it can be used to generate KVCD compatible mpeg files. Using this script you can fit about an hour and a half of really good quality video on ONE CD --which then can be played in most? standalone DVD players.

In order to use this script for NUV files you need to have a patched version of mplayer.
The patched version of mplayer that comes with knoppmyth isn't recent enough so you'll need to apply this patch:

http://dijkstra.csh.rit.edu:8088/~mdz/mythtv/

to a recent version (I used MPlayer 1.0pre4-3.3.3)

Once you have patched (I got a couple of errors when patching --the patch is for an older version of mplayer, but still worked) , compiled and installed mplayer you invoke the script like this:

./movie output movie.nuv (I called it movie, guess you can call it whatever you want...)

or if you install the movie script in /usr/bin just:

movie output movie.nuv


the script does a lot of other stuff --stuff I disabled during testing. If you get it working good you might think about re-enabling some of these things.

anyway, here's the script:
#!/bin/bash
#
# Copyright (C) 2003-2038 russiansexpat
#
# script: mpeg(1,2,3,4) conversion to (S,X)VCD with quantisation matrix
# and auto-splitting into multiple CDs and writing them.
#
# requires: mencoder(1.0pre3) mplayer mplex vcdimager cdrdao
# optional: normalize sox toolame(0.2k)
#
# does not require: microsoft. This script has not been tested on animals.
#
# further modified by dtm (#mplayer)
# and even further modified by DogBoy (#knoppmyth)
#
# use of this script with knoppmyth or mythtv _requires_ a version of mplayer that
# has been patched for .nuv
# patch available here: http://dijkstra.csh.rit.edu:8088/~mdz/mythtv/
# since this script also requires the use of at least mencoder(1.0pre3)
# and the patch was written for an older version of mplayer,
# you will have to apply the patch to the newer version
# this _does_ result in a couple of errors while patching but
# the resulting patched version of mplayer _did_ compile and was able to play .nuv
# it also installed in /usr/local/bin/mplayer so if used with knoppmyth you'll have two versions of mplayer
# and mencoder installed as the normal mplayer for knoppmyth resides at /usr/bin/mplayer
# anyway, the path in this script reflects this
# again... this script will only work with a recent version of mplayer patched for .nuv

for exe in mencoder mplayer mplex vcdimager cdrdao; do
if [ -z "`which $exe`" ]; then
echo "ERROR: $exe must be in your path $PATH"
exit 1
fi
done


## Logobuster added by DogBoy

## Logobuster placement for DogBoy's Box:
#Sundance="273:244:73:20:0"
#AdultSwim="253:244:73:20:0"
#SciFi="350:396:81:37:0"
#IFC="208:250:150:49:0"


#Logobuster placement for 640x480 res (I think...)
Sundance="340:405:92:25:0"
SciFi="350:396:81:37:0"
AdultSwim="371:410:68:23:0"
IFC="371:410:68:23:0"

### Logo filter selection
JackLogo=""
LogoJacker=""
clear
echo
echo
echo "1. Sundance Channel"
echo "2. Scifi Channel"
echo "3. Adult Swim"
echo "4. IFC"
echo
echo -n "Select logo filter [none]:"
read JackLogo
if [ "$JackLogo" = 1 ]
then
LogoJacker=",delogo=$Sundance"
elif [ "$JackLogo" = 2 ]
then
LogoJacker=",delogo=$SciFi"
elif [ "$JackLogo" = 3 ]
then
LogoJacker=",delogo=$AdultSwim"
elif [ "$JackLogo" = 4 ]
then
LogoJacker=",delogo=$IFC"
fi

MATRIX="\
intra_matrix=\
8,9,12,22,26,27,29,34,\
9,10,14,26,27,29,34,37,\
12,14,18,27,29,34,37,38,\
22,26,27,31,36,37,38,40,\
26,27,29,36,39,38,40,48,\
27,29,34,37,38,40,48,58,\
29,34,37,38,40,48,58,69,\
34,37,38,40,48,58,69,79:\
inter_matrix=\
16,18,20,22,24,26,28,30,\
18,20,22,24,26,28,30,32,\
20,22,24,26,28,30,32,34,\
22,24,26,30,32,32,34,36,\
24,26,28,32,34,34,36,38,\
26,28,30,32,34,36,38,40,\
28,30,32,34,36,38,42,42,\
30,32,34,36,38,40,42,44\
"

Q="2" # constant video quality
# best=2 excellent<=4 good<=7 even=11 for mpeg1 VCD resolution
# excellent<=6 good<=9 even=13 for mpeg2 SVCD resolution

#---------- below you can edit parameters ----------

## subtitles added by DogBoy
## if you want to do a subtitled film comment the following line
## and edit and uncomment the one after that...
Subtitle=""
#Subtitle="-sub SomeForeignFilm.sub"

# audio bitrate
# adjust if you need to squeeze a little more onto that cd
#AUDIORATE=128
#AUDIORATE=112
AUDIORATE=96
#AUDIORATE=64
##AUDIORATE=224 # variable with frequency 48kHz in 112-384kbs band

# frame rate conversion (has to be first in processing chain)
## for some reason I was only able to get this script to work _if_ the framerate is converted
## if no framerate conversion, then no video output
## I generally set this to pal (25 fps)
## less frames means more movie fits on cd...

#FRC="-fps 29.97 -ofps 29.97 -vf telecine,lavcdeint," # example to increase fps
##FRC="-fps 29.97 -ofps 29.97 -vf " # NTSC
#FRC="-fps 25 -ofps 25 -vf " # PAL
#FRC="-fps 23.976 -ofps 23.976 -vf " # NTSC pulldowned
#FRC="-fps 29.97 -ofps 23.976 -vf filmdint=fast=3," # example to decrease fps
#FRC="-vf " # fps not changed
#FRC="-fps 29.97 -ofps 25 -vf "
FRC="-fps 23.976 -ofps 25 -vf "

# video filters
#VFILTER="pp=de,denoise3d,"
VFILTER="pp=fd,pp=de,denoise3d$LogoJacker,"

# aspect view of output;
# it should be the same as aspect view of the source mpeg(1,2)
# or equal to width/length if source aspect undefined (example: avi, capture)
# and your player has to be capable to process chosen aspect
#
#ASPECT="1" # 1:1 where have you seen square TV ?!
ASPECT="1.3333" # 4:3 standard TV or monitor (and mythtv...)
#ASPECT="1.7777" # 16:9 wide screen TV
#ASPECT="1.85" # film academy flat
#ASPECT="2.35" # cinema scope

#XcYc="346:282" # crop, cut out black bands
#XcYc="352:195"
#XeYe="376:282" # expand to match aspect view, black bands added
#XeYe="352:240"

# for xvcd
#XY="352:156"
######################XY="352:198"
XY="352:288"
#####XY="352:264"
VCODEC=mpeg1video
VBuffer=376 # Kbits = 46*1024*8/1000
MUXMODE="-f 2 -m 1 -V -b 46"
IMAMODE="-t vcd2"

# for svcd
#XY="480:480"
#XY="480:576"
#VCODEC=mpeg2video
#VBuffer=917 # Kbits = 112*1024*8/1000
#MUXMODE="-f 5 -m 2 -V -b 112"
#IMAMODE="-t svcd"

# scaling algorithm
#SWS=0 # fast bilinear
#SWS=2 # bicubic, for upscaling
SWS=9 # lanczos, quality

# macroblock decision algorithm
#MBD=0 # compare blocks, fast
#MBD=1 # fewest bits
MBD=2 # rate distortion

# group of pictures length - the longer is better compression, but
# it relies on a player decoder and so resulting playback quality
GOP=25 # dvd pal gop <=15, ntsc <=18 but in practice gop can be longer

# various mencoder -lavcopts parameters
ULAVCOPTS1=":vlelim=-4:vcelim=7:vqblur=0.5:vrc_eq=tex:vmax_b_frames=2:vb_strategy=1"
ULAVCOPTS2=":naq:lumi_mask=0.05:dark_mask=0.01:tcplx_mask=0.05:scplx_mask=0.05:preme=1:predia=2:dia=2"

PASS="single"
#PASS="1st 2nd"

# mencoder verbosity
NOTverbose="2> /dev/null"
#NOTverbose="&> /dev/null"

##CDSIZE=735 # 74min CD
CDSIZE=795 # 80min CD
#CDSIZE=895 # 90min CD

# cdrdao parameters
CDOPT="--overburn --reload --eject"
CDDEV="--device 0,0,0" # SCSI id

#---------- above you can edit parameters ----------

function usage() {
echo
echo "Usage: $HOWCALLED <shrunk name> <file or mplayer source> [quality [$Q]]"
echo
echo "quality: best=2 excellent<=4 good<=7 even=11 - XVCD"
echo " excellent<=6 good<=9 even=13 - SVCD"
echo
echo "result: (S,X)VCD and mpeg(1,2) encoded with $HOWCALLED."
echo
exit 1
}

# command line parsing
HOWCALLED=`basename $0`
[ $# -lt 2 ] && usage

case $1 in
-*)
usage
;;
*)
NAME=$1
shift 1
;;
esac

DIR="`pwd`"
FILE=$1
if [ "$1" == "`basename \"$1\"`" ]; then
FILE="$DIR/$1"
fi
shift 1

if [ "$1"x != "x" ]; then
Q=$1
shift 1
fi
COMMAND_LINE_MENCODER=$*

# encoding
rm -f divx2pass.log
rm -f frameno.avi

for word in $PASS ; do
MOVIE=$NAME.mpg
[ "$word" == "single" ] && pass=""
[ "$word" == "1st" ] && pass=":vpass=1"
[ "$word" == "1st" ] && MOVIE="/dev/null"
[ "$word" == "2nd" ] && pass=":vpass=2"

command="/usr/local/bin/mencoder \
-srate 44100 -lavdopts idct=0 \
-af resample=44100 $FRC${VFILTER}crop=$XcYc,scale=$XY,expand=$XeYe -sws $SWS \
-of mpeg -oac lavc -ovc lavc \
-lavcopts acodec=mp2:abitrate=$AUDIORATE:aspect=$ASPECT:vcodec=$VCODEC:$MATRIX:idct=0:mbd=$MBD:vqscale=$Q:vrc_minrate=300:vrc_maxrate=2300:vrc_buf_size=$VBuffer:keyint=$GOP${ULAVCOPTS1}${ULAVCOPTS2}$pass \
$COMMAND_LINE_MENCODER $Subtitle $FILE -o $MOVIE"

echo "$command $NOTverbose"
eval "$command $NOTverbose"
done

### added by john to stop the script from creating those demuxing files...
exit 0

echo -e "\nyou will wait :p\n"

if [ $AUDIORATE != 384 ]; then
# fixed audio rate
eval "mplayer -noframedrop -dumpvideo -dumpfile $NAME.mpv $MOVIE &> /dev/null &"
eval "mplayer -noframedrop -dumpaudio -dumpfile $NAME.mpa $MOVIE &> /dev/null &"
else
# re-encoding into variable audio rate
eval "mplayer -noframedrop -srate 48000 -dumpvideo -dumpfile $NAME.mpv $MOVIE &> /dev/null &"
AUDIO=$NAME.wav
###rm -f $AUDIO
###mkfifo -m 660 $AUDIO
eval "mplayer -noframedrop -vo null -vc dummy -ao pcm -waveheader -af resample=48000 -aofile $AUDIO $MOVIE &> /dev/null"
eval "normalize -v --fractions $AUDIO" # normalize can't work from pipe
command="cat $AUDIO | toolame -s 48 -m s -v -1 - $NAME.mpa &"
echo "$command"
eval "$command"
fi

wait

#rm -f $MOVIE
#rm -f $AUDIO
# end of encoding

### added by john
exit 0

# multiplexing
rm -f $NAME?.mpg
eval "mplex $MUXMODE -S $CDSIZE -o $NAME%d.mpg $NAME.mpa $NAME.mpv"

# imaging
for i in $NAME?.mpg; do
cue="`basename $i .mpg`.cue"
bin="`basename $i .mpg`.bin"
rm -f $cue $bin
eval "vcdimager $IMAMODE -c $cue -b $bin $i"
done

#rm -f $NAME?.mpv $NAME?.mpa $NAME?.mpg
echo -e "\n$HOWCALLED encoding is completed in $SECONDS seconds.\n"

# CD writing
for cue in $NAME?.cue; do
bin="`basename $cue .cue`.bin"
echo "PLEASE INSERT BLANK CD IN CD-WRITER and press any key to begin writing:"
read -n 1 null
eval "cdrdao write $CDOPT $CDDEV $cue"
echo "CD WRITING IS COMPLETED."
done

exit 0
# last line of this script

Page 1 of 1 All times are UTC - 6 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/