Mercurial > mplayer.hg
view TOOLS/qepdvcd.sh @ 17149:9a0a376a54b1
Move audio packets reordering from codec interface to demuxers for real
files (old and new format), pass only real extradata to the codec
Enable cook codec from lavc, prefer lavc codecs for 14_4 and 28_8
formats. Disable internal 28_8, it's broken now and will be removed soon
author | rtognimp |
---|---|
date | Fri, 09 Dec 2005 16:25:37 +0000 |
parents | c1a271b1cfb3 |
children | 01695abe8666 |
line wrap: on
line source
#!/bin/bash # # QEPDVCD # # Most of this stuff comes straight from MPlayer documentation. # Options are limited only to a small useful subset, if you # want more control, RTFM and DIY. # # Version: 0.1 # # Licence: GPL # # Author: Reynaldo H. Verdejo Pinochet <reynaldo@opendot.cl> # # Script: MPlayer Sources. Anything supported to vcd/svcd pal/ntsc # # requires: mencoder # # sugests: vcdimager / cdrecord # # Thanks to: Carlos Navarro Salas - name author ;) # # # Defaults MYNAME=`basename $0` TARGET="svcd" ENCQ="2" ABPS="224" VBPS="2000" NORM="NTSC" SPLIT="0" TOLERANCE="85" OUTNAME="mencodedvcd" SUBFILENAME=0 EDLFILENAME="pass.edl" HAVESUB=0 WORKDIR="." RATIOX=4 RATIOY=3 OPTIONS="INPUTFILENAME TARGET ENCQ ABPS VBPS NORM SPLIT TOLERANCE OUTNAME" function usage() { echo "" echo "usage $MYNAME inputfile [options]" echo "" echo "Options: [Default value]" echo "" echo "-t Target svcd|vcd [svcd]" echo "-q Encoding quality 0|1|2 [2]" echo "-a Audio bitrate in kbps [224]" echo "-v Video bitrate in kbps [2000 For SVCD, 1150 For VCD]" echo "-n Norm NTSC|PAL [NTSC]" echo "-d Divide/split movie at given times time1:time2:... [no split]" echo "-s Shitty TV screen tolerance %, afects subtitle positioning [85]" echo "-u Subtitle file name [No subtitle]" echo "-o Output basename [mencodedvcd]" echo "" echo "In case you want to use -a/-v please read:" echo "http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-vcd-dvd.html" echo "" } function test_needed() { for i in mencoder; do if [ -z "`which $i`" ]; then echo "[ERROR] mencoder not found in $PATH!" exit 1 fi done } function test_sugested() { for i in vcdimager cdrecord; do if [ -z "`which $i`" ]; then echo "[WARNING] $i not found in $PATH!" echo "You'll likely need it after we finish." exit 1 fi done } test_needed test_sugested if [ $# -lt 1 ]; then echo "" echo "[ERROR] Input filename parameter is mandatory." echo "" usage exit 1 fi case $1 in -*) usage exit 1 ;; *) INPUTFILENAME=$1 shift 1 ;; esac while [ "$1"x != "x" ]; do case $1 in -t) TARGET=$2 shift 1 ;; -q) ENCQ=$2 shift 1 ;; -a) ABPS=$2 shift 1 ;; -v) VBPS=$2 shift 1 ;; -n) NORM=$2 shift 1 ;; -d) SPLIT=$2 shift 1 ;; -s) TOLERANCE=$2 shift 1 ;; -u) SUBFILENAME="$2" HAVESUB=1 shift 1 ;; -o) OUTNAME=$2 shift 1 ;; esac shift 1 done echo "" echo "[STATUS] Will re-encode using the following parameters:" echo "" for i in $OPTIONS ; do echo "$i ${!i}"; done # Parameter Sanity Check ########################################### # We need to check supplied params against known format constraints #################################################################### if [ $TARGET = "svcd" ]; then if [ $ABPS -gt 384 ]; then echo "[ERROR] SVCD maximum abitrate is 384kbps." exit 1 fi if [ $VBPS -gt 2600 ]; then echo "[ERROR] SVCD maximum vbitrate is 2600kbps." exit 1 fi else [ $TARGET = "vcd" ] if [ $ABPS -eq 224 ]; then echo "[ERROR] VCD abitrate must be 224kbps." exit 1 fi if [ $VBPS -gt 1150 ]; then echo "[ERROR] VCD maximum vbitrate is 1150kbps." exit 1 fi fi # Set encoding options ############################################## if [ $TARGET = "svcd" ]; then FORMAT="xsvcd" VCODEC="mpeg2video" VRCMINRATE=4 VRCMAXRATE=2500 VRCBUFSIZE=917 if [ $NORM = "NTSC" ]; then SCALEX=480 SCALEY=480 KEYINT=18 OFPS="24000/1001" TELECINE=":telecine" else [ $NORM = "PAL" ] SCALEX=480 SCALEY=576 KEYINT=15 OFPS=25 fi else [ $TARGET = "vcd" ] FORMAT="xvcd" VCODEC="mpeg1video" VRCMINRATE=$VBPS VRCMAXRATE=$VBPS VRCBUFSIZE=327 if [ $NORM = "NTSC" ]; then SCALEX=352 SCALEY=240 KEYINT=18 OFPS="24000/1001" else [ $NORM = "PAL" ] SCALEX=352 SCALEY=288 KEYINT=15 OFPS=25 fi fi # Start reencoding ################################################### cd $WORKDIR if [ $(($HAVESUB+1)) -eq 1 ]; then SUBTITLESTRING="/dev/null" else SUBTITLESTRING="$SUBFILENAME" fi if [ $SPLIT == "0" ]; then CICLES=0 TIMESTRING="" else if [ -e $EDLFILENAME ]; then echo "[ERROR]" echo "The -d option needs to generate a temporary file called" echo "$EDLFILENAME. You already have one in this directory," echo "please remove/rename it and run $MYNAME again." echo "" exit 1 else EDLSTRING=$(echo $SPLIT | sed -e s/:/' '/g) EDLARRAY=($EDLSTRING) CICLES=$(echo $EDLSTRING | wc -w) TIMESTRING="-edl $EDLFILENAME -hr-edl-seek" fi fi for j in $(seq 0 $CICLES); do NEWNAME=$OUTNAME"_PART"$j".mpg" echo "" echo "Making $NEWNAME, wish me luck ;-)" echo "" # Create EDLFILENAME ################################################# if [ $CICLES -ge 1 ]; then for i in $(seq 0 $CICLES) do if [ $i -eq $j ]; then if [ $j -ne 0 ]; then echo "0 ${EDLARRAY[$(($i-1))]} 0" > $EDLFILENAME fi if [ $i -ne $CICLES ]; then echo "${EDLARRAY[$(($i))]} 999999 0" >> $EDLFILENAME fi fi done fi # Mencoder Time ;-) ################################################### mencoder -ovc lavc -oac lavc -vf expand=:::::$RATIOX/$RATIOY:1,scale=$SCALEX:$SCALEY,harddup -srate 44100 -af lavcresample=44100 -lavcopts acodec=mp2:abitrate=$ABPS:vcodec=$VCODEC:vbitrate=$VBPS:keyint=$KEYINT:mbd=$ENCQ:vrc_buf_size=$VRCBUFSIZE:vrc_maxrate=$VRCMAXRATE:vrc_minrate=$VRCMINRATE:aspect=$RATIOX/$RATIOY -of mpeg -mpegopts format=$FORMAT$TELECINE -sub $SUBTITLESTRING -subpos $TOLERANCE -subwidth $TOLERANCE -ofps $OFPS $TIMESTRING -o $NEWNAME $INPUTFILENAME echo "Encoding of $NEWNAME finished." echo "Run vcdimager -t svcd/vcd $NEWNAME and burn with cdrecord." done echo "$(($CICLES+1)) VCD/SVCD file(s) created!!!" echo "Happy to be of some help ;-) have fun." exit 0