Mercurial > mplayer.hg
changeset 16996:17dd370a838a
Added new TOOL to convert 'anything supported' to VCD/SVCD (PAL/NTSC) using mencoder
author | reynaldo |
---|---|
date | Wed, 16 Nov 2005 19:15:27 +0000 |
parents | f0247f8df2fa |
children | c1a271b1cfb3 |
files | TOOLS/README TOOLS/qepdvcd.sh |
diffstat | 2 files changed, 304 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/TOOLS/README Wed Nov 16 19:11:03 2005 +0000 +++ b/TOOLS/README Wed Nov 16 19:15:27 2005 +0000 @@ -186,6 +186,19 @@ +qepdvcd.sh + +Author: Reynaldo H. Verdejo Pinochet + +Description: anything supported to vcd/svcd pal/ntsc converter + +Usage: qepdvcd.sh file <options> + run with no args to see the list of options + +Note: you will need vcdimager/cdrecord to master/burn the resulting + files + + Tech scripts in the TOOLS dir -----------------------------
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TOOLS/qepdvcd.sh Wed Nov 16 19:15:27 2005 +0000 @@ -0,0 +1,291 @@ +#!/bin/bash +# +# QEPDVCD +# +# Most of this stuff comes straight from mplayer documentation +# options are limited only to an small usesfull 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/splits 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 "youre likely to 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 params:" +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 max abitrate is 384kbps" + exit 1 + fi + if [ $VBPS -gt 2600 ]; then + echo "[ERROR] SVCD max 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 max 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 "-d option needs to generate a temporary file called" + echo "$EDLFILENAME you already have one on this dir, please" + echo "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