All pastes #200962 Raw Edit

Anonymous

public shellscript v1 · immutable
#200962 ·published 2006-10-13 14:17 UTC
rendered paste body
#!/bin/bash## Autor:  Sertinell# Colaboradores:  er Flako, oCHARLIEo## Estamos en http://forums.gentoo.org/########################################################################## special thanks to Prodater64 and Maurus from www.kvcd.net########################################################################## DEPENDENCIAS :# mjpegtools ->> para disponer de mplex Ahora ya no debria ser necesario. Ahora tampoco# mplayer    ->> lo normal es que con el venga mencoder# toolame    ->> con el codificaremos el audio si es WAV. Ahora ya no# soundtouch ->> OPCIONAL, para cambiar el tempo de sonido y correguir los fps# dvdauthor  ->> OPCIONAL Crea la estructura de un DVD de video.# growisofs  ->> OPCIONAL Se usa para grabar los DVD's	# NO-DEPENDENCIAS : microsoft## This script has not been tested on animals.########################################################################Changelog:####################### Consultar en http://forums.gentoo.org/viewtopic.php?t=232474####################### Variables Globales#######################################################################PROPNAME=`basename $0`    # Nombre del ScriptVERSION="0.3.7"        # Version del ScriptULTMODIF="26-01-2006"    # Fecha de Ultima Modificaci&#8730;&#8805;nOUTPUT_ONLY_INFO="no"    # Realizar Conversion o Solo InformacionVPASS=2            # Numero de pasadas, a mi me gusta mas 2, pero si no quieres la maxima calidad 1 tarda justo la mitad de tiempo y es una calidad "decente"OUTPUT_V_ASPECT=1.3333    # Aspect ratio 1.3333 para TV normal 1.7777 para paronamicasSOUNDTOUCH="off"    # Flag de uso de Soundtouch. Por defecto, desactivado. Ahora mismo no funcionaOUTPUT_A_BITRATE=112    # Bitrate de sonido en mp2, con 112 va sobrado - 32, ,128,192,224,320OUTPUT_A_AC3="no"    # salida ac3 - por defecto si, si es posible#por defecto ponemos las variables de DVD...	    OUTPUT_SIZE=4200            OUTPUT_V_WIDTH=720            OUTPUT_V_HEIGHT=576            OUTPUT_V_FPS=25.000            OUTPUT_V_CODEC="mpeg2video"            OUTPUT_A_SAMPLERATE=48000            OUTPUT_OVS=3            MAXBITRATE=10000 #8000            BUFSIZE=1835            MUXBUFSIZE=500 #500            OUTPUT_F_TYPE="MPG2"            PLEX=8DVDAUTHOR="N"DVDBURN="N"NUM_FICHEROS=0        # Numero de ficheros de EntradaOUTPUT_DIR=""        # Directorio de salida (por defecto es el directorio de entrada)SKIP=""            # por defecto mencoder mantiene la duracion del filmeNOMPLEX=0	#Por defecto Multiplexamos los archivosclear# Mensaje de Ayuda#######################################################################function func_msg_help() {	cat << EOHelp   	El script $PROPNAME codifica uno o varios ficheros AVI     	en formato compatible para su reproduccion en un DVD domestico.\n     	USO: $PROPNAME [[opciones]] <ficheros>\n     	opciones:     	     	-h|-help|--help     		Este mensaje.     		     	-i|--info     		Solo Informacion. No se realiza ninguna operacion.     		       	-of|--output_format <formato>     		Especifica Formato de Salida (DVD,SVCD,VCD).     		Tambien permite resolucion personalizada mediante el formato de salida :     		USER:<width>x<height> , por ejemplo: (Experimental)     			-of user:352x576     	-os|--output_size <tama&#8730;±o>     		Tama&#8730;±o final de cada archivo, en megabytes.     		       	-od|--output_dir /ruta/a/directorio/existente     		Redirige la salida al directorio indicado.     		       	-p|--pass <1|2>     		Numero de pasadas para el video (por defecto 2)     		       	--interval [[inicio]]:frames     		Marca un intervalo para codificar. Inicio es una posicion en segundos     		y frames es el numero de frames a procesar , por ejemplo:     			--interval :200 -> codifica los primeros 200 frames.       	--no_ac3     		Salida de sonido MP2 , incluso si el origen incluye mas de 2 canales.     		       	--soundtouch (Experimental)     		Utiliza la libreria sountouch para codificar cambiando el tempo,      		POR DEFECTO DESACTIVADA     		     	--aspect <n|p>		Aspect ratio n -> 1.3333 para TV normal p -> 1.7777 para paronamicas.     		Por defecto n -> 4:3 (1.3333)     		       	--nomplex     		No multiplexa el audio con el video, por defecto los multiplexa en un solo archivo.     		     	--fuckdvd|-fd     		Crea la esturctura de DVD con dvdauthor con todos los ficheros     		mpeg qe haya en el directorio en el directorio /OUTDIR/DVD_VIDEO, sin     		menus, ni capitulos,y en orden estrictamente alfabetico.     		Funciona independientemente de la codificacion, se ejecuta al     		final del script excepto si se uso -i. Si los mpeg fueron      		creados con este script median -of *DVD, la multiplexacion sera     		correcta (mplex -f8) y el DVD sera creado correctamente, si      		existen otros ficheros mpg's en el directorio no multiplexados      		debidamente, dvdauthor fallara.     		     	--burndvd|-bd     		Graba el DVD creado por --fuckdvd, -bd implica -fd.   	<ficheros> es el nombre de uno o mas ficheros separados por espacios.   	     	Admite el uso de comodines.EOHelp    exit 1}# Funcion que Comprueba el espacio Libre####################################################################### el espacio necesario para la conversion es la suma de OUTPUT_SIZE y el propio fichero X 2function func_check_Free_Disk_Space() {    # Parametros de entrada:    # $1 -> es el nombre del video a convertir    local FILE_INPUT=$1    local FILE_INPUT_SIZE=`du -s $FILE_INPUT | cut -f1` # tama&#8730;±o del fichero    # el fichero de salida en MB + los temporales + el propio fichero y a numero entero    local MAX_FILE_SIZE=`echo "scale=0; (($OUTPUT_SIZE*1024)+($FILE_INPUT_SIZE*2))/1" | bc -l`    # espacio libre en la particion    if [[ "$OUTPUT_DIR" == "" ]]; then        FREE_DISK_SPACE=$(df $FILE_INPUT | grep /dev | tr -s ' ' ' ' | cut -d' ' -f4)    else        FREE_DISK_SPACE=$(df $OUTPUT_DIR | grep /dev | tr -s ' ' ' ' | cut -d' ' -f4)    fi    FREE_DISK_SPACE=`echo "scale=0; $FREE_DISK_SPACE/1"| bc -l` # a entero , por si acaso    # informamos del espacio libre y el necesario,se ve tb con la opcion "--info" (para eso es info)    echo -e "\n# El fichero $FILE_INPUT es de `echo "scale=2; $FILE_INPUT_SIZE/1024"| bc -l` MB"        if [[ $DVDAUTHOR=="Y" ]]; then    	MAX_FILE_SIZE=$((${MAX_FILE_SIZE}*2))    fi        echo -e "# Necesario: $(echo "scale=2; $MAX_FILE_SIZE/1024"| bc -l) MB"    echo -e "# Disponible: $(echo "scale=2; $FREE_DISK_SPACE/1024"| bc -l) MB"    # comprobamos si tenemos suficiente espacio en la particion    if [[ $FREE_DISK_SPACE -lt $MAX_FILE_SIZE ]]; then        echo -e "\n# NO TIENE ESPACIO SUFICIENTE "        echo -e "# Libere espacio en la particion antes de continuar o utilice opciones"        echo -e "# --output_size , --output_format o --output_dir ."        # exit 1 # Salir??    fi}# Funcion de Recogida de Datos######################################################################## Extrae los datos del supuesto fichero de video. Si el fichero no es un video devuelve FALSEfunction func_Get_Info() {    # Parametros de entrada:    # $1 -> es el nombre del video a convertir    local FILE_INPUT=$1    local INFO_MPLAYER="/tmp/mplayer_info"    # Extraemos la informacion via mplayer    mplayer -slave -vo null -ao null -frames 0 -identify $FILE_INPUT 2>/dev/null | grep ^ID > $INFO_MPLAYER    if [[ -s $INFO_MPLAYER ]]; then        # Tenemos informacion del fichero de video. continuaremos procesando        # Video        INPUT_V_CODEC=`grep 'ID_VIDEO_FORMAT' $INFO_MPLAYER | sed 's/ID_VIDEO_FORMAT=//' `        INPUT_V_BITRATE=`grep 'ID_VIDEO_BITRATE' $INFO_MPLAYER | sed 's/ID_VIDEO_BITRATE=//' `        INPUT_V_FPS=`grep 'ID_VIDEO_FPS' $INFO_MPLAYER | sed 's/ID_VIDEO_FPS=//' | sed 's/,/./' `        INPUT_V_WIDTH=`grep 'ID_VIDEO_WIDTH' $INFO_MPLAYER | sed 's/ID_VIDEO_WIDTH=//' `        INPUT_V_HEIGHT=`grep 'ID_VIDEO_HEIGHT' $INFO_MPLAYER | sed 's/ID_VIDEO_HEIGHT=//' `        INPUT_V_RES="${INPUT_V_WIDTH}x${INPUT_V_HEIGHT}"        # Audio        INPUT_A_CODEC=`grep 'ID_AUDIO_CODEC' $INFO_MPLAYER | sed 's/ID_AUDIO_CODEC=//' `        INPUT_A_FORMAT=`grep 'ID_AUDIO_FORMAT' $INFO_MPLAYER | sed 's/ID_AUDIO_FORMAT=//' `        INPUT_A_SAMPLERATE=`grep 'ID_AUDIO_RATE' $INFO_MPLAYER | sed 's/ID_AUDIO_RATE=//' `        INPUT_A_CANALES=`grep 'ID_AUDIO_NCH' $INFO_MPLAYER | sed 's/ID_AUDIO_NCH=//' `        INPUT_A_BITRATE=`grep 'ID_AUDIO_BITRATE' $INFO_MPLAYER | sed 's/ID_AUDIO_BITRATE=//' | sed 's/000//' `        # Duracion del Video en segundos        INPUT_TIME=`grep 'ID_LENGTH' $INFO_MPLAYER | sed 's/ID_LENGTH=//' `        # Borramos el fichero temporal        rm -f $INFO_MPLAYER 2>/dev/null        return 0    else        # Mplayer no ha podido obtener informacion del fichero de entrada. Es un video?. No se seguira procesando...        return 1    fi}# Funcion de Muestra de Datos######################################################################## Muestra el formato de Entrada del Fichero de Videofunction func_Muestra_Info() {    echo -e "############################################"    echo -e "# Video: "    echo -e "#     Codec:\t\t${INPUT_V_CODEC}"    echo -e "#     Resoluci&#8730;&#8805;n:\t${INPUT_V_RES}"    echo -e "#     Fps:\t\t${INPUT_V_FPS}"    echo -e "#     Bitrate:\t\t${INPUT_V_BITRATE}"    echo -e "############################################"    echo -e "# Audio: "    echo -e "#     Codec:\t\t${INPUT_A_CODEC}"    echo -e "#     SampleRate:\t${INPUT_A_SAMPLERATE}"    echo -e "#     Bitrate:\t\t${INPUT_A_BITRATE} (${INPUT_A_FORMAT})"    echo -e "#     Canales:\t\t${INPUT_A_CANALES}"    echo -e "############################################"    echo -e "#     Duracion:\t${INPUT_TIME} segundos"    echo -e "############################################"}# Funcion que Establece las Variables para el Formato de Salida#######################################################################function func_Establece_Output_Format() {    # Parametros de entrada:    # $1 -> es el nombre del Formato de Salida    case "$1" in        "DVD" | "dvd") #Formato DVD            OUTPUT_SIZE=4200            OUTPUT_V_WIDTH=720            OUTPUT_V_HEIGHT=576            OUTPUT_V_FPS=25.000            OUTPUT_V_CODEC="mpeg2video"            OUTPUT_A_SAMPLERATE=48000            OUTPUT_OVS=3            MAXBITRATE=10000 #8000            BUFSIZE=1835            MUXBUFSIZE=500 #500            OUTPUT_F_TYPE="MPG2"            PLEX=8            ;;	"HDVD" | "hdvd") #Formato hDVD            OUTPUT_SIZE=4200            OUTPUT_V_WIDTH=352            OUTPUT_V_HEIGHT=576            OUTPUT_V_FPS=25.000            OUTPUT_V_CODEC="mpeg2video"            OUTPUT_A_SAMPLERATE=48000            OUTPUT_OVS=3            MAXBITRATE=10000 #8000            BUFSIZE=1835            MUXBUFSIZE=500 #500            OUTPUT_F_TYPE="MPG2"            PLEX=8            ;;        "SVCD" | "svcd") #Formato SVCD            OUTPUT_SIZE=800            OUTPUT_V_WIDTH=480            OUTPUT_V_HEIGHT=576            OUTPUT_V_FPS=25.000            OUTPUT_V_CODEC="mpeg2video"            OUTPUT_A_SAMPLERATE=44100            OUTPUT_OVS=2            MAXBITRATE=3000 #2500            BUFSIZE=917            MUXBUFSIZE=230            OUTPUT_A_AC3="no"            OUTPUT_F_TYPE="MPG2"            PLEX=5            ;;        "CVD" | "cvd") #Formato SVCD            OUTPUT_SIZE=800            OUTPUT_V_WIDTH=352            OUTPUT_V_HEIGHT=576            OUTPUT_V_FPS=25.000            OUTPUT_V_CODEC="mpeg2video"            OUTPUT_A_SAMPLERATE=44100            OUTPUT_OVS=2            MAXBITRATE=3000 #2500            BUFSIZE=917            MUXBUFSIZE=230            OUTPUT_A_AC3="no"            OUTPUT_F_TYPE="MPG2"            PLEX=5            ;;        "VCD" | "vcd") #Formato VCD.            OUTPUT_SIZE=800            OUTPUT_V_WIDTH=352            OUTPUT_V_HEIGHT=288            OUTPUT_V_FPS=25.000            OUTPUT_V_CODEC="mpeg1video"            OUTPUT_A_SAMPLERATE=44100            OUTPUT_OVS=1            MAXBITRATE=3000 # 1500            BUFSIZE=327            MUXBUFSIZE=230 #115            OUTPUT_A_AC3="no"            OUTPUT_F_TYPE="MPG1"            PLEX=2            ;;        "USER:"* | "user:"*) #Formato de usuario. Width & Height establecidos por usuario, resto de parametros como un DVD...            OUTPUT_SIZE=4200            OUTPUT_V_RES=${1:5}            OUTPUT_V_WIDTH=${OUTPUT_V_RES%x*}            OUTPUT_V_HEIGHT=${OUTPUT_V_RES#*x}            OUTPUT_V_FPS=25.000            OUTPUT_V_CODEC="mpeg2video"            OUTPUT_A_SAMPLERATE=48000            OUTPUT_OVS=3            MAXBITRATE=10000 #8000            BUFSIZE=1835            MUXBUFSIZE=460 #500            OUTPUT_F_TYPE="MPG2"            PLEX=8            ;;    esac}# Funcion de Ajuste de Variables Globales#######################################################################function func_Adjust_var() {    ## Video    # Redimensionamiento de la imagen de Salida    BASE_SCALED=$((${OUTPUT_V_WIDTH}-${OUTPUT_OVS}*8)) #multiplicamos el overscan por 8(4 pixeles a cada lado)#    BASE_SCALED=`echo "scale=0 ; (($BASE_C)*($SCALE_C))/1"| bc -l`#    x=`echo "(320*$INPUT_V_HEIGHT/$INPUT_V_WIDTH)"| bc -l`#    y=`echo "($BASE_SCALED*$x/320)"| bc -l`#    z=`echo "(($OUTPUT_V_HEIGHT*$y)/($BASE_SCALED/$OUTPUT_V_ASPECT))"| bc -l`    z=`echo "(($OUTPUT_V_HEIGHT*$INPUT_V_HEIGHT*$OUTPUT_V_ASPECT)/($INPUT_V_WIDTH))"| bc -l`# Esto no distorsiona#    z=`echo "(($INPUT_V_HEIGHT*$BASE_SCALED)/($INPUT_V_WIDTH))"| bc -l`    ALTURA_SCALED=$((`echo "scale=0 ; $z/8"| bc -l`*8))    echo -e "\n# Escalando Video -> Width:$BASE_SCALED Height:$ALTURA_SCALED"    SWS=9 # Tipo de Escalado Software...    OUTPUT_V_BITRATE=$(echo "(( $OUTPUT_SIZE * 1024 * 8 ) / ( $INPUT_TIME ))-$OUTPUT_A_BITRATE"| bc -l)    OUTPUT_V_BITRATE=${OUTPUT_V_BITRATE%.*}    if [[ $OUTPUT_V_BITRATE -gt $MAXBITRATE ]]; then        OUTPUT_V_BITRATE=$MAXBITRATE    fi    echo "# Video Bitrate: ${OUTPUT_V_BITRATE}"    LMIN=1    if (( $OUTPUT_V_BITRATE > 800 )); then        LMIN=0.5    fi    if (( $OUTPUT_V_BITRATE > 1000 )); then        LMIN=0.4    fi    if (( $OUTPUT_V_BITRATE > 1800 )); then        LMIN=0.3    fi    if (( $OUTPUT_V_BITRATE > 3000 )); then        LMIN=0.1    fi    if (( $OUTPUT_V_BITRATE > 4000 )); then        LMIN=0.01    fi    # Filtros de Salida    VF="harddup,yuvcsp,pp=hb:100:100/vb/dr,hqdn3d=10:0:5,scale=$BASE_SCALED:$ALTURA_SCALED:0:0:9,noise=5u,expand=$OUTPUT_V_WIDTH:$OUTPUT_V_HEIGHT:-1:-1:0"    case "$OUTPUT_V_FPS" in        "25.000") KEYINT=15 ;;        "23.976") KEYINT=18 ;;        "29.970") KEYINT=18 ;;        *) KEYINT=18;;    esac    ## Audio    if [[ $INPUT_A_CANALES -gt 2 ]]; then        if [[ "$INPUT_A_CODEC" != "a52" || "$INPUT_A_CODEC" != "ac3" ]]; then            OUTPUT_A_AC3="no"        fi    else        echo -e "\n# Detectado 2 canales o menos. Se fuerza salida a MP2"        OUTPUT_A_AC3="no"    fi    if [[ "$INPUT_V_FPS" != "$OUTPUT_V_FPS" ]] && [[ "${SOUNDTOUCH}" == "on" ]] ; then        SKIP="-noskip"        TEMPO=`echo " ( 1- ( ${INPUT_V_FPS}/${OUTPUT_V_FPS} ) ) * 100 " | bc -l`    fi    if [[ "${INPUT_A_SAMPLERATE}" != "${OUTPUT_A_SAMPLERATE}" ]] ; then        RESAMPLE=",resample=${OUTPUT_A_SAMPLERATE}:0:0"        else        RESAMPLE=""    fi}# Funcion de Codificacion del Audio#######################################################################function func_Convert_Audio() {    # Parametros de entrada:    # $1 -> es el nombre del video a convertir    # $2 -> es el nombre del video de salida    local FILE_INPUT=$1    local FILE_OUTPUT=$2if [[ "$INPUT_V_FPS" != "$OUTPUT_V_FPS" ]] && [[ "${SOUNDTOUCH}" == "on" ]]; then  mkfifo -m 660 "${FILE_OUTPUT}.wav"  mplayer $INTERVAL -slave -nojoystick -nolirc -quiet -vc dummy -vo null -af lavcresample=$OUTPUT_A_SAMPLERATE:16:1,channels=2 -ao pcm:waveheader:file="$FILE_OUTPUT.wav" "$FILE_INPUT" &  soundstretch "${FILE_OUTPUT}.wav" "${FILE_OUTPUT}.sync.wav" -tempo=${TEMPO}  rm "${FILE_OUTPUT}.wav"  toolame -m d -b $OUTPUT_A_BITRATE -e "${FILE_OUTPUT}.sync.wav" "${FILE_OUTPUT}.mpa"else  if [[ $OUTPUT_A_AC3 = "no" ]]; then   echo -e "\n# Extrayendo audio a formato MP2"   mplayer $INTERVAL -slave -nojoystick -nolirc -quiet -vc dummy -vo null -af lavcresample=$OUTPUT_A_SAMPLERATE:16:1,channels=2 -ao pcm:waveheader:file="$FILE_OUTPUT.wav" "$FILE_INPUT"   toolame -m d -b $OUTPUT_A_BITRATE -e "${FILE_OUTPUT}.wav" "${FILE_OUTPUT}.mpa"   # Si el toolame da problemas usar mp2enc...   #mp2enc -v 1 -s -e -r 44100 -b $OUTPUT_A_BITRATE -m -o "$FILE_OUTPUT.mpa" < "$FILE_OUTPUT.wav"   rm "${FILE_OUTPUT}.wav"  else   echo -e "\n# Extrayendo audio a formato AC3"   mplayer -slave "$FILE_INPUT" -dumpaudio  fifi}# Funcion de Codificacion del Video, del Audio y Multiplexacion de ambos#######################################################################function func_Convert_Video() {    # Parametros de entrada:    # $1 -> es el nombre del video a convertir    # $2 -> es el nombre del video de salida    local FILE_INPUT=$1    local FILE_OUTPUT=$2    local OPCION_VPASS="" # Esta variable sirve para decirle a mencoder cuantas pasadas queremos        if  [[ "$INTERVAL" != "" ]] ; then # Si queremos un Intervalo"                INPUT="$FILE_INPUT.stream_video.avi"                echo -e "\n# Framerate incorrecto o especificado intervalo de codificacion."                echo -e "# Sacando Video por pipe: $INPUT"                mkfifo -m 660 "$INPUT"        else                INPUT=$FILE_INPUT #si no lo hacemos mencoder busca $INPUT y es ""        fiif [[ $VPASS = 2 ]]; then# Dos pasadas , esta es la primeraif [[ "$INTERVAL" != "" ]] ; then # Si los FPS son incorrectos o queremos un Intervalo"        echo "# Cambiando FPS - $FILE_INPUT -> $INPUT"        mencoder -quiet $INTERVAL -oac copy -ovc copy -ofps $OUTPUT_V_FPS $FILE_INPUT -o "$INPUT" 1>/dev/null 2>/dev/null &fiecho -e "\n# Sacando Estadisticas del fichero de Video"echo "# Mencoder - 1"  mencoder -of rawvideo -sws $SWS -nosound -noaspect -noautoexpand -vf $VF -ovc lavc -lavcopts vcodec=${OUTPUT_V_CODEC}:vrc_eq=tex:vmax_b_frames=2:preme=2:precmp=2:vstrict=-1:scplx_mask=0.3:vqblur=0:mbqmin=1:vqmin=1:lmin=${LMIN}:vpass=1:vrc_buf_size=${BUFSIZE}:vbitrate=${OUTPUT_V_BITRATE}:vrc_maxrate=${MAXBITRATE}:aspect=${OUTPUT_V_ASPECT}:keyint=${KEYINT}: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 -fps $INPUT_V_FPS -ofps $OUTPUT_V_FPS "$INPUT" -o "/dev/null"fiecho -e "\n# Codificando el Video ${FILE_OUTPUT}.mpv"if [[ "$INTERVAL" != "" ]] ; then # Si queremos un Intervalo"        echo "# Cambiando FPS - $FILE_INPUT -> $INPUT"        mencoder -quiet $INTERVAL -oac copy -ovc copy -ofps $OUTPUT_V_FPS $FILE_INPUT -o "$INPUT" 1>/dev/null 2>/dev/null &        fiecho "# Mencoder - 2" mencoder -of rawvideo -sws $SWS -nosound -noaspect -noautoexpand -vf $VF -ovc lavc -lavcopts vcodec=${OUTPUT_V_CODEC}:vrc_eq=tex:vmax_b_frames=2:preme=2:precmp=2:vstrict=-1:scplx_mask=0.3:vqblur=0:mbqmin=1:vqmin=1:lmin=${LMIN}:vpass=${VPASS}:vrc_buf_size=${BUFSIZE}:vbitrate=${OUTPUT_V_BITRATE}:vrc_maxrate=${MAXBITRATE}:aspect=${OUTPUT_V_ASPECT}:keyint=${KEYINT}: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 -fps $INPUT_V_FPS -ofps $OUTPUT_V_FPS "$INPUT" -o "${FILE_OUTPUT}.mpv"if [[ "$INTERVAL" != "" ]] ; then  echo "# Borrando $INPUT"  rm -f "$INPUT" 2>/dev/nullfiecho "# Borrando divx2pass.log"rm -f "divx2pass.log" 2>/dev/null# Multiplexerif [[ "$NOMPLEX" == 0 ]] ; thenecho -e "\n# Multiplexando Video y audio $FILE_INPUT"if [[ $OUTPUT_A_AC3 = "no" ]]; then  mplex -f ${PLEX} -r "$MAXBITRATE" -v 1 -b ${MUXBUFSIZE} -V -p 1 -h -o "${FILE_OUTPUT}.mpg" "${FILE_OUTPUT}.mpv" "${FILE_OUTPUT}.mpa"  echo "# Borrando ${FILE_OUTPUT}.mpa"  rm -f "${FILE_OUTPUT}.mpa" 2>/dev/nullelse  mplex -f ${PLEX} -r "$MAXBITRATE" -v 1 -b ${MUXBUFSIZE} -V -p 1 -h -o "${FILE_OUTPUT}.mpg" "${FILE_OUTPUT}.mpv" "stream.dump"  echo "# Borrando stream.dump"  rm "stream.dump"fi# borramos los ficheros temporalesecho "# Borrando ${FILE_OUTPUT}.mpv"rm -f "${FILE_OUTPUT}.mpv" 2>/dev/nullfi}# Funcion Principal de Conversion######################################################################## Esta funcion es la encargada de llamar a las demas para obtener la informacion y tratar Video y audiofunction func_Convierte_fichero() {    # Parametros de entrada:    # $1 -> es el nombre del video a convertir    local FILE_INPUT=$1    if [[ "$OUTPUT_DIR" != "" ]]; then        BASE_FILE_INPUT="`basename \"$FILE_INPUT\"`"        echo $OUTPUT_DIR | grep "/$" >/dev/null        RES=$? # Valor de retorno de la funcion anterior        if [[ $RES == 0 ]]; then # Compruebo si el nombre del directorio Termina en /            local FILE_OUTPUT="${OUTPUT_DIR}${BASE_FILE_INPUT%.*}"        else            local FILE_OUTPUT="${OUTPUT_DIR}/${BASE_FILE_INPUT%.*}"        fi    else        local FILE_OUTPUT=${FILE_INPUT%.*}    fi    # Si el parametro es un fichero que existe...    if [[ -f "${FILE_INPUT}" ]]; then        func_Get_Info "${FILE_INPUT}"        RES=$? # Valor de retorno de la funcion anterior        if [[ $RES == 0 ]]; then            # Si he especificado un intervalo, lo recorto ahora y lo vuelco a un temporal para trabajar con el            if [[ "$INTERVAL" != "" ]]; then                mencoder -quiet $INTERVAL -oac copy -ovc copy "$FILE_INPUT" -o "$FILE_OUTPUT.interval" 1>/dev/null 2>/dev/null                FILE_INPUT="$FILE_OUTPUT.interval"            fi            func_Muestra_Info            func_check_Free_Disk_Space $FILE_INPUT            func_Adjust_var            if [[ "$OUTPUT_ONLY_INFO" == "no" ]]; then                func_Convert_Audio $FILE_INPUT $FILE_OUTPUT                func_Convert_Video $FILE_INPUT $FILE_OUTPUT            fi            # Borramos el fichero creado por el intervalo... si no existe la salida de error es redirigida            rm -f "$FILE_OUTPUT.interval" 2>/dev/null        else            echo -e "ERROR: No se pudo recolectar informacion del fichero $FILE_INPUT. ¬øEs un fichero de Video?"        fi    else        echo -e "ERROR: El fichero $FILE_INPUT no es accesible o no existe"    fi}# Programa Principal#######################################################################echo -e "# $PROPNAME Version: $VERSION  -- $ULTMODIF\n"# Si no tenemos argumentos... ERRORif [[ $# -eq 0 ]]; then    func_msg_helpfi# Recoleccion de Parametrosuntil [[ -z "$1" ]] ; do    case "$1" in        "-h" | "-help" | "--help") # Mostrar Mensaje de Ayuda            func_msg_help            shift            ;;	"--nomplex")	    NOMPLEX=1            shift            ;; 	        "--soundtouch")            SOUNDTOUCH="on"            shift            ;;        "--pass" | "-p") # Establecer numero de pasadas            shift            VPASS="$1"            shift            ;;        "-i" | "--info") # Salida solo de informacion            OUTPUT_ONLY_INFO="yes"            shift            ;;        "--no_ac3") # No quiere sonido ac3            OUTPUT_A_AC3="no"            shift            ;;        "--interval") # Codificar un intervalo de tiempo            shift            INTERVAL_START=${1%:*}            INTERVAL_STOP=${1#*:}            if [[ "$INTERVAL_START" == "" ]]; then                INTERVAL_START=0            fi            if [[ "$INTERVAL_STOP" == "" ]]; then                echo -e "\n# Es necesario establecer un numero de frames a procesar dentro del intervalo..."                exit 1            fi            echo -e "\n# Estableciendo intervalo de compresion: [[${INTERVAL_START}s --- ${INTERVAL_STOP}frames]]"            INTERVAL="-ss ${INTERVAL_START} -frames ${INTERVAL_STOP}"            shift            ;;        "--aspect") # Cambio de Aspect ratio            shift            case "$1" in                "p") # formato panoramico                    OUTPUT_V_ASPECT=1.7777                    ;;                "n") # 4:3                    OUTPUT_V_ASPECT=1.3333                    ;;                *) # algo otro                    echo -e "\n# Aspecto $1 desconocido . Usando aspecto $OUTPUT_V_ASPECT por defecto ."                    ;;            esac            shift            ;;	-"of" | "--output_format") # Especifca Formato de salida            shift            	case "$1" in               	"DVD" | "dvd" | "SVCD" | "svcd" | "CVD" | "cvd" | "HDVD" | "hdvd" | "VCD" | "vcd" | "USER:"* | "user:"*)                    OUTPUT_FORMAT=$1		echo -e "\n## Estableciendo Formato de Salida a: $OUTPUT_FORMAT"		func_Establece_Output_Format $OUTPUT_FORMAT                    ;;                *)                    echo -e "\n# Formato de Salida: $1, no reconocido. Usando Formato por Defecto: $OUTPUT_FORMAT"                    ;;            esac            shift            ;;        "-os" | "--output_size") # Especifica tama&#8730;±o final del fichero            shift            OUTPUT_SIZE=$1            shift            ;;        "-od" | "--output_dir") # Cambio del directorio de salida            shift            if [[ -d $1 ]]; then # Si el directorio Existe                OUTPUT_DIR=$1            else                echo -e "\n# El Directorio de Salida $1 no Existe o el script no tiene acceso a el. Se utilizara el Directorio de Salida por defecto."            fi            shift            ;;            	"-fd" | "--fuckdvd") # Creacion de la estructura de DVD            	DVDAUTHOR="Y"            shift            ;;        "-bd" | "--burndvd")        	DVDAUTHOR="Y"        	DVDBURN="Y"            shift            ;;                    *) # Si no es ninguna opcion soportada se supone que es la ruta a un fichero            LISTA_FICHEROS[${NUM_FICHEROS}]=$1            NUM_FICHEROS=$NUM_FICHEROS+1            shift            ;;    esacdonefor (( i=0 ; i < ${NUM_FICHEROS} ; i=$i+1 )); do    echo -e "\n## fichero: ${LISTA_FICHEROS[${i}]}"    func_Convierte_fichero ${LISTA_FICHEROS[${i}]}done#Despues de generar los videos generamos la estructura de DVD con TODOS los ficheros MPEG (*.mpg) hayados en el directorio.if [[ ${OUTPUT_ONLY_INFO} != "yes" && ${DVDAUTHOR} == "Y" ]]; then	dvdauthor -o "${OUTPUT_DIR}/DVD_VIDEO" *.mpg	dvdauthor -T -o "${OUTPUT_DIR}DVD_VIDEO"	if [[ $DVDBURN=="Y" ]]; then		echo -e "Introduzca un DVD y pulse enter"		read		growisofs -Z /dev/dvdrw -V "DVD_VIDEO" -dvd-video "${OUTPUT_DIR}DVD_VIDEO"	fifi