====== Videos schneiden mit Mplayer ====== vidcut #!/bin/bash #part of the Mutils by Paul Hänsch #to be ditributed under the terms of the GPL v.2 and any later version frontend=Xdialog #convert input filename ifile=`echo "$1" |sed '/media:\/hdc/s//\/mnt\/cdrom/g;/-/s//\\-/g;/ /s//\\ /g'` #building tempfiles mpipe=`mktemp -t mpipeXXXX` rm -f $mpipe mkfifo $mpipe fpipe=`mktemp -t fpipeXXXX` #cannot be a pipe because `cat` would never terminate when reading from an open pipe dialog=`mktemp -t diagXXXX` echo "pausing frame_step" >$mpipe & mplayer "$ifile" -slave -input file=$mpipe -identify >>$fpipe & sleep 1 fps=`cat $fpipe |grep "ID_VIDEO_FPS=" |cut -d "=" -f2 |cut -d "." -f1` frame=0 ############################################################################################################### choice=1 result=0 while [ $result -eq 0 ]; do # if [ $choice -eq 1 ]; then case $choice in 1) menu="--radiolist Startposition_wählen 0 60 0 1 Keyframe_vorwärts on 2 Keyframe_zurück off";; *) menu="--radiolist Startposition_wählen 0 60 0 1 Keyframe_vorwärts off 2 Keyframe_zurück on";; esac if [ $frontend == dialog ]; then $frontend --extra-button --extra-label "Anfangsmarke" `echo $menu` 2>$dialog result=$? else $frontend --check "dieses Frame als Anfangsmarke" off `echo $menu` 2>$dialog result=$? fi grep "unchecked" $dialog || result=2 if [ $result -eq 0 ]; then choice=`dd if=$dialog ibs=1 count=1` if [ $choice -eq 1 ]; then echo "pausing seek +1" >>$mpipe echo "frame_step" >>$mpipe else echo "pausing seek -1" >>$mpipe echo "frame_step" >>$mpipe fi fi done if [ $result -eq 1 ]; then #user requested quit echo "quit" >$mpipe rm -f $mpipe rm -f $fpipe rm -f $dialog exit 0 fi #grep current frame sleep 1 #let mplayer write all status lines frame=`cat $fpipe |grep "A:" |sed '/\/ /s//\//g;/\/ /s//\//g' |cut -d "/" -f2 |cut -d " " -f1` frame=`echo $frame |sed '/ /s//#/g'` cnt=1 while [ ! -z `echo $frame |cut -s -d "#" -f$cnt` ]; do cnt=`expr $cnt + 1` done cnt=`expr $cnt - 1` frame=`echo $frame |cut -s -d "#" -f$cnt` frmcnt=`expr $frame - 1` sec=`expr $frmcnt / $fps` ################################################################################################################# choice=1 result=0 while [ $result -eq 0 ]; do case $choice in 1) menu="--radiolist Endposition_wählen 0 0 0 1 Keyframe_vorwärts on 2 Keyframe_zurück off 3 Einzelframe_vorwärts off";; 2) menu="--radiolist Endposition_wählen 0 0 0 1 Keyframe_vorwärts off 2 Keyframe_zurück on 3 Einzelframe_vorwärts off";; *) menu="--radiolist Endposition_wählen 0 0 0 1 Keyframe_vorwärts off 2 Keyframe_zurück off 3 Einzelframe_vorwärts on";; esac if [ $frontend == dialog ]; then $frontend --extra-button --extra-label "Endmarke" $menu 2>$dialog result=$? else $frontend --check "dieses Frame als Endmarke" off $menu 2>$dialog result=$? fi grep "unchecked" $dialog || result=2 if [ $result -eq 0 ]; then choice=`dd if=$dialog ibs=1 count=1` if [ $choice -eq 1 ]; then echo "pausing seek +1" >>$mpipe echo "frame_step" >>$mpipe fi if [ $choice -eq 2 ]; then echo "pausing seek -1" >>$mpipe echo "frame_step" >>$mpipe fi if [ $choice -eq 3 ]; then echo "frame_step" >>$mpipe fi fi done if [ $result -eq 1 ]; then #user requested quit echo "quit" >$mpipe rm -f $mpipe rm -f $fpipe rm -f $dialog exit 0 fi #grep current frame sleep 1 #let mplayer write all status lines frame=`cat $fpipe |grep "A:" |sed '/\/ /s//\//g;/\/ /s//\//g' |cut -d "/" -f2 |cut -d " " -f1` frame=`echo $frame |sed '/ /s//#/g'` cnt=1 while [ ! -z `echo $frame |cut -s -d "#" -f$cnt` ]; do cnt=`expr $cnt + 1` done cnt=`expr $cnt - 1` frame=`echo $frame |cut -s -d "#" -f$cnt` frmcnt=`expr $frame - 1 - $frmcnt` ################################################################################################################# echo "quit" >$mpipe rm -f $mpipe rm -f $fpipe ofile=~/ while [ -d $ofile ]; do $frontend --fselect "$ofile" 15 70 2>$dialog if [ $? == 1 ];then rm -f $dialog exit 0 fi ofile=`cat $dialog` done rm -f $dialog if [ $frontend == dialog ]; then $frontend --infobox "-Bitte Warten-" 0 0 else $frontend --no-buttons --infobox "-Bitte Warten-" 0 0 5000 & fi mencoder "$ifile" -ss $sec -frames $frmcnt -o "$ofile" 2>>/dev/null >>/dev/null if [ $? -eq 0 ]; then $frontend --ok-label " Dankeschön " --msgbox " Videoschnitt erfolgreich abgeschlossen. " 6 53 else $frontend --ok-label " Tja! " --msgbox "Irgendwas ging schief.\n - sorry -" 0 0 fi