Re: kompresia videa


To czdebian-l zavinac debian bod cz
From Marek Nožka <tlapicka zavinac centrum bod cz>
Date Mon, 14 May 2007 21:25:57 +0200

On Mon, 14 May 2007 10:41:16 +0200 Marek Nožka <tlapicka zavinac centrum bod cz>
wrote to czdebian-l zavinac debian bod cz:

> na to napsal skript. 
že by mi to nevzalo tu přílohu? 


#!/bin/bash

# Licence: GNU GPL 2.0

if [ -z $1 ]; then
# Help
        echo -e "--- Help for avi-x264-lame.sh ---\n";
        echo -e "This skript is for encoding video.";
        echo -e "Mencoder is needed to run this script. Encoding goes
in two passes."; echo -e "Video-codec: x264";
        echo -e "Audio-codec: lame";
        echo -e "Mutimedia-contejner: avi";

        echo -e "\n  --Syntax:"
        echo -e "avi-x264-lame <infile> <outfile> [other parametrs for
mencoder]\n"; else
#program
        #check of needed programs
        for PROGRAM in mencoder; do
                echo "Checking $PROGRAM:"
                { which $PROGRAM && [ -x $(which $PROGRAM) ]; } || { 
                        echo -e "***\n Can't find program $PROGRAM\n
Exit\n***" exit 2
                        }
                echo -e "*"
        done
        INFILE=$1 
        shift
        OUTFILE=$1
        shift

        if [ -z $OUTFILE ]; then
                echo "Please enter <outfile>"
                exit 1
        fi


        echo -e "\n Enter AUDIO mode:"
        select CHOISE in "stereo" "joint-stereo" "dualchannel" "mono";
do echo "You have chosen "$REPLY", it is: $CHOISE"
                echo -n 'Continue? [Y/n] ' && read YESNO
                if [ -z $YESNO ] || [ $YESNO = y ] || [ $YESNO = Y ];
then case $REPLY in
                                1) AUDIOMODE=0; break;; 
                                2) AUDIOMODE=1; break;; 
                                3) AUDIOMODE=2; break;; 
                                4) AUDIOMODE=3; break;; 
                                *) echo "Bad enter. Please chose 1-4.";;
                        esac;
                fi
        done;

        echo -e "\n Enter AUDIO bitrate:"
        select CHOISE in "224 kbps" "192 kbps" "160 kbps" "128 kbps"
"96 kbps" "80 kbps" "64 kbps" "48 kbps"; do echo "You have chosen
"$REPLY", it is: $CHOISE" echo -n 'Continue? [Y/n] ' && read YESNO
                if [ -z $YESNO ] || [ $YESNO = y ] || [ $YESNO = Y ];
then case $REPLY in
                                1) AUDIOBITRATE=224; break;; 
                                2) AUDIOBITRATE=192; break;; 
                                3) AUDIOBITRATE=160; break;; 
                                4) AUDIOBITRATE=128; break;; 
                                5) AUDIOBITRATE=96; break;; 
                                6) AUDIOBITRATE=80; break;; 
                                7) AUDIOBITRATE=64; break;; 
                                8) AUDIOBITRATE=48; break;;
                                *) echo "Bad enter. Please chose 1-8.";;
                        esac;
                fi
        done;

#       echo -e "\n Enter ASPECT RATIO:"
#       select CHOISE in "4:3" "16:9"; do
#               echo "You have chosen "$REPLY", it is: $CHOISE"
#               echo -n 'Continue? [Y/n] ' && read YESNO
#               if [ -z $YESNO ] || [ $YESNO != n ]; then 
#                       case $REPLY in
#                               1|2) ASPECT=$CHOISE; break;; 
#                               *) echo "Bad enter. Please chose 1 or
#       2.";; esac;
#               fi
#       done;

        echo -e "\nEnter number of passes for encoding:"
        select CHOISE in "1 passes -- for speed" "2 passes -- for high
quality " "3 passes -- for experts"; do echo "You have chosen "$REPLY",
it is: $CHOISE" echo -n 'Continue? [Y/n] ' && read YESNO
                if [ -z $YESNO ] || [ $YESNO = y ] || [ $YESNO = Y ];
then case $REPLY in
                                1) PASS=1; ONEPASSOUTFILE=$OUTFILE;
break;; 
                                2) PASS=2;
ONEPASSOUTFILE="/dev/null";PASSTURBO="pass=1:turbo=1:"; break;; 
                                3) PASS=3;
ONEPASSOUTFILE="/dev/null";PASSTURBO="pass=1:turbo=1:"; break;; *) echo
"Bad enter. Please chose 1 to 3.";; esac;
                fi
        done;

        echo -e "\nEnter encoding mode:"
        select CHOISE in "Quick encoding" "High quality" "Very high
quality -- slow endoding"; do echo "You have chosen "$REPLY", it is:
$CHOISE" echo -n 'Continue? [Y/n] ' && read YESNO
                if [ -z $YESNO ] || [ $YESNO = y ] || [ $YESNO = Y ];
then case $REPLY in
                                1)
ENCOPTS="frameref=1:bframes=2:subq=4:me=dia:b_pyramid:weight_b";break;; 
                                2)
ENCOPTS="frameref=3:bframes=3:subq=5:me=hex:b_pyramid:weight_b:partitions=all:8x8dct";break;;
 
                                3)
ENCOPTS="frameref=5:bframes=4:subq=6:me=umh:b_pyramid:weight_b:partitions=all:8x8dct";break;;
*) echo "Bad enter. Please chose 1 to 3.";; esac;
                fi
        done;

        echo -e "\n This is a choise for rescale filter\nEnter
RESOLUTION of encoding video:" select CHOISE in "768x576   (4:3) --
Full-PAL"\ "640x480   (4:3)"\
        "512x384   (4:3)"\
        "384x288   (4:3) -- Half PAL"\
        "256x192   (4:3)"\
        "1024x576 (16:9)"\
        "768x432  (16:9)"\
        "512x288  (16:9)"\
        "256x144  (16:9)"\
        "No change, no rescale. Aspect ratio is 4:3"\
        "No change, no rescale. Aspect ratio is 16:9"; do
                echo "You have chosen "$REPLY", it is: $CHOISE"
                echo -n 'Continue? [Y/n] ' && read YESNO
                if [ -z $YESNO ] || [ $YESNO = y ] || [ $YESNO = Y ];
then case $REPLY in
                                1) SCALE="scale=768:576";ASPECT="4:3";
break;; 
                                2) SCALE="scale=640:480";ASPECT="4:3";
break;; 
                                3) SCALE="scale=512:384";ASPECT="4:3";
break;; 
                                4) SCALE="scale=384:288";ASPECT="4:3";
break;;
                                5) SCALE="scale=256:192";ASPECT="4:3";
break;;
                                6)
SCALE="scale=1024:576";ASPECT="16:9"; break;;
                                7) SCALE="scale=768:432";ASPECT="16:9";
break;;
                                8) SCALE="scale=512:288";ASPECT="16:9";
break;;
                                9) SCALE="scale=256:144";ASPECT="16:9";
break;;
                                10) ASPECT="4:3"; break;; 
                                11) ASPECT="16:9"; break;; 
                                *) echo "Bad enter. Please chose
1-11.";; esac;
                fi
        done;



        YESNO="n"
        while [ $YESNO ] && { [ $YESNO = n ] || [ $YESNO = N ];}; do 
                echo -e "\n Enter VIDEO bitrate: (500 to 2500 kbps)"  
                read VIDEOBITRATE
                echo -en "Bitrate is $VIDEOBITRATE\n Continue? [Y/n] "
&& read YESNO done

        
        # Others x264 chois
        ENCOPTS="qcomp=0.8:${ENCOPTS}"
        

        echo -en " "
        echo -en "\nForce no frames skipping. This is good if you have
problems with A-V synchronization." echo -en "\nForce no frames
skipping? [y/N] " && \ read SKIP
        if [ $SKIP ] && { [ $SKIP = y ] || [ $SKIP = Y ];} ; then 
                SKIP="-mc 0 -noskip"            
        else
                SKIP=""
        fi
        
        echo -en "\nDo you want to use deinterlacing filter? [y/N] " &&
\ read YESNO
        if [ $YESNO ] && { [ $YESNO = y ] || [ $YESNO = Y ];}; then 
                DEINTERLACE="pp=lb"             
        else
                DEINTERLACE=""
        fi
        

        echo -en "\nDo you want to use denoise filter? [y/N] " && \
        read YESNO
        if [ $YESNO ] && { [ $YESNO = y ] || [ $YESNO = Y ];}; then 
                echo "  ---> --->"
                echo -en "\t Enter spatial luma strength (default: 4) "
&& \ read luma
                if [ -z $luma ]; then luma=4; fi
                echo -en "\n\t Enter spatial chroma strength (default:
3) " && \ read chroma
                if [ -z $chroma ]; then chroma=3; fi
                echo -en "\n\t Enter temporal strength (default: 6) "
&& \ read time
                if [ -z $time ]; then time=6; fi
                DENOISE="hqdn3d=$luma:$chroma:$time"            
                echo "  <--- <---"
        else
                DENOISE=""
        fi

        # filter togather
        for I in $DEINTERLACE $DENOISE $SCALE; do 
                if [ $FILTERS ]; then 
                        FILTERS="${FILTERS},$I"
                else
                        FILTERS="$I"
                fi
        done
        if [ $FILTERS ]; then 
                FILTERS="-vf $FILTERS"
        fi

#       if [ $DEINTERLACE$SCALE ]; then 
#               FILTERS="-vf"
#               if [ $DEINTERLACE ]; then 
#                       FILTERS="$FILTERS $DEINTERLACE"
#                       if [ $SCALE ]; then 
#                               FILTERS="$FILTERS","$SCALE"
#                       fi
#               else
#                       FILTERS="$FILTERS $SCALE"
#               fi
#       fi
        
        echo -e "\n Comands:"
        echo "**      1. PASS         **"
        echo mencoder $INFILE -o $ONEPASSOUTFILE $@ -oac mp3lame
-lameopts cbr:br="$AUDIOBITRATE":mode="$AUDIOMODE":aq=0 -ovc x264
-x264encopts bitrate=${VIDEOBITRATE}:${PASSTURBO}${ENCOPTS} $FILTERS
$SKIP -aspect "$ASPECT" if [ $PASS != "1" ]; then echo "**     2/3.
PASS        **" echo mencoder $INFILE -o $OUTFILE $@ -oac mp3lame
-lameopts cbr:br="$AUDIOBITRATE":mode="$AUDIOMODE":aq=0 -ovc x264
-x264encopts bitrate=${VIDEOBITRATE}:pass=${PASS}:${ENCOPTS} $FILTERS
$SKIP -aspect "$ASPECT" fi echo -en "\nContinue? [Y/n] " && read
CONTINUE if [ $CONTINUE ] && { [ $CONTINUE = n ] || [ $CONTINUE =
N ];}; then exit 0 fi

        echo -e " \n**************************"
        echo "**      1. PASS         **"
        echo "**************************"
        mencoder $INFILE -o $ONEPASSOUTFILE $@ -oac mp3lame -lameopts
cbr:br="$AUDIOBITRATE":mode="$AUDIOMODE":aq=0 -ovc x264 -x264encopts
bitrate=${VIDEOBITRATE}:${PASSTURBO}${ENCOPTS} $FILTERS $SKIP -aspect
"$ASPECT" ONE=$? if [ $PASS = "1" ]; then exit $ONE
        fi


        if [ $ONE = 0 ]; then           
                echo "**************************"
                echo "**      2. PASS         **"
                echo "**************************"
                mencoder $INFILE -o $OUTFILE $@ -oac mp3lame -lameopts
cbr:br="$AUDIOBITRATE":mode="$AUDIOMODE":aq=0 -ovc x264 -x264encopts
bitrate=${VIDEOBITRATE}:pass=${PASS}:${ENCOPTS} $FILTERS $SKIP -aspect
"$ASPECT" TWO=$? if [ $TWO = 0 ] && [ $PASS = 3 ]; then echo
"**************************" echo "**      3. PASS         **"
                        echo "**************************"
                        mencoder $INFILE -o $OUTFILE $@ -oac mp3lame
-lameopts cbr:br="$AUDIOBITRATE":mode="$AUDIOMODE":aq=0 -ovc x264
-x264encopts bitrate=${VIDEOBITRATE}:pass=${PASS}:${ENCOPTS} $FILTERS
$SKIP -aspect "$ASPECT" TWO=$? fi

        else
                echo "First pass failed. Exit."
                exit 1
        fi

        if [ $TWO = 0 ]; then           
                echo "**************************"
                echo "**      FINISHED        **"
                echo "**************************"
        else
                echo "Second pass failed. Exit."
                exit 1
        fi


fi


Partial thread listing: