#!/bin/bash -e # CONversion Video en .3gp pour le telephone portable PANAma # utilisation de ffmpeg avec les options #ffmpeg [-ss 00:09:00 -t 00:00:30] -y -i fichier.avi -vcodec mpeg4 -s 400x240 -r 15 -acodec libvo_aacenc -ac 1 -ar 11025 -ab 64k [-va 256] -async 2 fichier.3gp # et en changeant -s 400x240 pour garder les proportions de l'image if [ $# -eq 0 ] ; then echo " ${0##*/} : conversion de fichiers videos en format .3gp pour telephones portables Usages : $0 [-t] [hh:mm:ss [hh:mm:ss]] [-va 256] [-rt 400x240] [-re 704x576] $0 -b -t : mode test, echo de la commande ffmpeg sans execution hh:mm:ss : position debut de lecture puis eventuellement duree -va 256 : volume audio (defaut 256) -rt 400x240 : resolution du telephone (defaut 400x240, pour modele Orange Panama = Huawei G7210) -re 704x576 : resolution en entree, par defaut sera lue dans le fichier -b : mode batch, execution des commandes en fin de script " exit ; fi trf () { # trf [-t (test)] [ []] [-va 256 (volume audio)] [-rt 400x240 (resolution telephone)] [-re 704x576 (resolution en entree)] echo test="" ; if [ "$1" = "-t" ] ; then test="1" ; shift ; fi # test si presence parametres debut et duree deb="" ; dur="" if [ "${1%:*}" != "$1" ] ; then deb="-ss $1 " ; shift if [ "${1%:*}" != "$1" ] ; then dur="-t $1 " ; shift ; fi ; fi # test si presence parametre volume va="" if [ "$1" = "-va" ] ; then va="-vol $2 " ; shift 2 ; fi if [ "$1" = "-rt" ] ; then # resolution telephone donnee rtx="${2%%x*}" ; rty="${2##*x}" ; shift 2 echo "Resolution telephone donnee = ${rtx}x${rty}" else # resolution telephone par defaut rtx="400" ; rty="240" echo "Resolution telephone par defaut = ${rtx}x${rty}" fi if [ "$1" = "-re" ] ; then # resolution en entree donnee rex="${2%%x*}" ; rey="${2##*x}" ; shift 2 echo "Resolution en entree donnee = ${rex}x${rey}" else # detection resolution en entree set +e ; parv=$(ffmpeg -y -t 00:00:00 -i "$1" /dev/null 2>&1 | sed '/Stream #.*: Video: /!d;s/^.*Stream #.*: Video:.* \([1-9][0-9]*x[1-9][0-9]*\).*$/\1/') ; set -e rex="${parv%%x*}" ; rex="${rex##* }" rey="${parv##*x}" ; rey="${rey%%[ ,]*}" echo "Resolution en entree detectee = ${rex}x${rey}, fichier \"${1##*/}\"" fi # test pour savoir s'il faudra padder en hauteur ou largeur if [ $(((${rex}*${rty})-(${rey}*${rtx}))) -ge 0 ] ; then # calculer la resolution en y rsc=$((((${rtx}*${rey})+${rex}-1)/${rex})) parv="-s ${rtx}x${rsc}" #rs2=$(((${rty}-${rsc})/2)) ; rs1=$((${rty}-${rsc}-${rs2})) #if [ ${rs1} != 0 ] ; then parv="${parv} -padtop ${rs1}" ; fi #if [ ${rs2} != 0 ] ; then parv="${parv} -padbottom ${rs2}" ; fi else # calculer la resolution en x rsc=$((((${rty}*${rex})+${rey}-1)/${rey})) parv="-s ${rsc}x${rty}" #rs2=$(((${rtx}-${rsc})/2)) ; rs1=$((${rtx}-${rsc}-${rs2})) #if [ ${rs1} != 0 ] ; then parv="${parv} -padleft ${rs1}" ; fi #if [ ${rs2} != 0 ] ; then parv="${parv} -padright ${rs2}" ; fi fi if [ ! -z "${test}" ] ; then # echo commande ffmpeg et c'est tout (set -x ; echo ffmpeg -y ${deb}${dur}-i "$1" -vcodec mpeg4 ${parv} -r 15 -acodec libvo_aacenc -ac 1 -ar 11025 -ab 64k ${va}-async 2 "$2.3gp" > /dev/null) else # lancement commande ffmpeg (set -x ; ffmpeg -y ${deb}${dur}-i "$1" -vcodec mpeg4 ${parv} -r 15 -acodec libvo_aacenc -ac 1 -ar 11025 -ab 64k ${va}-async 2 "$2.3gp") echo # rappel resolution en entree echo "Resolution en entree = ${rex}x${rey}, fichier \"${1##*/}\"" # rappel resolution telephone echo "Resolution telephone specifiee = ${rtx}x${rty}, calculee pour sortie = ${rsc}" # consultation resolution obtenue en sortie set +e ; parv=$(ffmpeg -y -t 00:00:00 -i "$2.3gp" /dev/null 2>&1 | sed '/Stream #.*: Video: /!d;s/^.*Stream #.*: Video:.* \([1-9][0-9]*x[1-9][0-9]*\).*$/\1/') ; set -e rsx="${parv%%x*}" ; rsx="${rsx##* }" rsy="${parv##*x}" ; rsy="${rsy%%[ ,]*}" echo "Resolution obtenue en sortie = ${rsx}x${rsy}, fichier \"${2##*/}.3gp\"" fi } exec 2>&1 # test si les arguments pour trf sont passes dans l'appel au script if [ "$1" != "-b" ] ; then trf "$@" ; exit ; fi ; shift # option -b : lancement d'un flot d'appels a trf (batch) #trf -t -re 40x30 t1.avi t1 #trf -t 00:09:00 -re 160x90 t1.avi t1 #trf -t 00:09:00 00:01:00 -re 576x240 t1.avi t1 #trf -t -rt 800x480 -re 576x240 t1.avi t1 #trf 00:09:00 00:00:10 /home/videos/La\ vengeance\ d\'une\ blonde.avi /media/CMT2/videos/z1 #trf 00:09:00 00:00:10 "/home/videos/Last action hero.avi" /media/CMT2/videos/z2 #trf 00:01:00 00:00:10 /home/videos/Good\ Charlotte\ -\ live\ Footage.mov /media/CMT2/videos/z5 #trf 00:01:00 00:00:10 /home/videos/The\ Darkness\ -\ I\ believe\ in\ a\ thing\ called\ love.mpg /media/CMT2/videos/z6 #trf -t 00:09:00 00:00:10 /media/CMT2/videos/z trf -va 512 /home/videos/Il\ etait\ une\ fois\ dans\ l\'Ouest.avi /media/CMT2/videos/UneFoisOuest #trf -va 512 /home/videos/La\ vengeance\ d\'une\ blonde.avi /media/CMT2/videos/VengeanceBlonde #trf /home/videos/Il\ etait\ une\ fois\ la\ revolution.avi /media/CMT2/videos/UneFoisRevolution #trf /home/videos/Last\ action\ hero.avi /media/CMT2/videos/LastActionHero #trf /home/videos/Donnie\ Brasco.avi /media/CMT2/videos/DonnieBrasco #trf -va 512 /home/videos/Incassable.avi /media/CMT2/videos/Incassable #trf /home/videos/Hot\ Shots\ 2.avi /media/CMT2/videos/HotShots