Sida 1 av 1
Xdialog
Postat: 16 jun 2007, 20:02
av Magnuntu
Tjo
Någon som vet hur detta funkar? Jag har spanat in det idag, men får inte riktigt --progress att funka? Jag tänkte använda den till att konvertera videofiler med, men jag fattar inte hur man få inputten. Jag har googlat, men inte hittat något av värde. Min kod ser ut så här nu:
Kod: Markera allt
#!/bin/sh
FULL="/home/magnus/Desktop/film.avi"
ffmpeg -i $FULL -aspect 16:9 -target pal-dvd $FULL.mpg | Xdialog --title "Jahaja..." --no-close --progress "Vänta!" 0 0 0 100
SV: Xdialog
Postat: 17 jun 2007, 01:10
av Trill
Ett tips, använd #!/bin/bash .
Sen tittar jag lite på din kod, jag förstår dock inte vad som ska göras. Vill du få in user_input och använda det som en variabel?
i så fall kan du använda read, argumentet till read avgör vilken variabel user_input ska få. Används inte argument så kommer user_input få variabeln REPLY, om jag inte missminner mig.
Dv.s
Kod: Markera allt
#!/bin/bash
read answer
echo "Hejhej $answer"
Vilket kommer att resultera i
Kod: Markera allt
trillerz@Matilda:~$ ./bashscript
Trill
Hejhej Trill
trillerz@Matilda:~$
Här har du förresten ett bashscript skrivet av en person på forumet som jag glömt bort namnet på. Jag har dock kvar koden eftersom jag använder scriptet ibland. Den konverterar olika format till andra format.
Kod: Markera allt
#!/bin/bash
#
# OBS! This program is intended for people who understands Swedish.
#
# bashvidc
# Magnonos Terminalbaserade Videokonverteringsprogram
# Version 0.2
# 2007-05-13
# http://magnonos.com
#
# Programmet finns tillgängligt under GNU GPL
# http://www.gnu.org/licenses/gpl.txt
#
# OBS! Magnonos kan inte på något sätt garantera
# att detta program inte förstör din dator. Skapa
# ALLTID en säkerhetskopia innan du börjar fixa
# och använda ett program från Magnonos.
#
# Detta program följer inte några som helst
# standards vad gäller kodningsformat. Det är inte
# heller optimerat på andra sätt. Programmet är
# skapat i träningssyfte.
#
echo ""
echo "/#########################################################\\"
echo "|#| Välkommen till BASHVIDC |#|"
echo "|#| Magnonos Terminalbaserade Videokonverteringsprogram |#|"
echo "|#| Version 0.2 [2007-05-13] |#|"
echo "\#########################################################/"
PREF="\033[1m### ->>> BASHVID säger...\033[0m"
OPTIONS="Konvertera DVD Kriterier Hjälp Avsluta"
select opt in $OPTIONS; do
if [ "$opt" = "Konvertera" ]; then
DIR=/var
FE=avi
FN=movie
NF=mpg
echo -e "$PREF 1. Om filen är placerad i $DIR, tryck ENTER. Annars, skriv in sökvägen (Ex: '/sök/väg/till'): "
read DIRR
if [ "$DIRR" != "" ]; then
DIR=$DIRR
fi
echo -e "$PREF 2. Skriv in filnamnet utan ändelse (Ex: 'minfilm' eller 'semester'): "
read FNN
if [ "$FNN" != "" ]; then
FN=$FNN
fi
echo -e "$PREF 3. Om ändelesen är .avi, tryck ENTER. Annars, skriv in ändelsen (Ex: 'avi', 'flv' eller 'wmv'): "
read FEE
if [ "$FEE" != "" ]; then
FE=$FEE
fi
echo -e "$PREF 4. Nytt filformat ('dvdmpg', 'mpg', 'avi', 'flv', 'wmv'): "
read NFF
if [ "$NFF" != "" ]; then
NF=$NFF
fi
HALF="$DIR/$FN"
FULL="$HALF.$FE"
echo -e "$PREF 5. Vill du konvertera '$FULL' (j/n)"
read VALD
if [ "$VALD" = "n" ]; then
echo -e "$PREF $FN har INTE konverterats"
else
CONVSUC="$PREF $FN har konverterats från $FE till $NF \a"
## Konvertera
if [ "$NFF" = "dvdmpg" ]; then
ffmpeg -i $FULL -aspect 16:9 -target pal-dvd $HALF.mpg
echo -e "$CONVSUC"
elif [ "$NFF" = "mpg" ]; then
ffmpeg -i $FULL -ab 128 -b 1200 -s 320x240 $HALF.mpg
echo -e "$CONVSUC"
elif [ "$NFF" = "avi" ]; then
ffmpeg -i $FULL -ab 128 -b 1200 -s 320x240 -vcodec mpeg4 $HALF.avi
echo -e "$CONVSUC"
elif [ "$NFF" = "flv" ]; then
ffmpeg -i $FULL -ab 128 $HALF.flv
echo -e "$CONVSUC"
elif [ "$NFF" = "wmv" ]; then
ffmpeg -i $FULL -vcodec wmv1 $HALF.wmv
echo -e "$CONVSUC"
else
echo -e "$PREF Konvertering till $NF stöds inte"
fi
fi
elif [ "$opt" = "DVD" ]; then
DIR=/var
NAMN=dvd
function titel {
echo -e "$PREF Lägg till en titel från '$DIR' utan filändelse, eller lämna tomt för att fortsätta: "
read TIT
if [ "$TIT" != "" ]; then
dvdauthor -o $DIR/$NAMN/ -t $DIR/$TIT.mpg
titel
fi
}
echo -e "$PREF Om titlarna är placerade i $DIR, tryck ENTER. Annars, skriv in sökvägen (Ex: '/sök/väg/till'): "
read DIRR
if [ "$DIRR" != "" ]; then
DIR=$DIRR
fi
echo -e "$PREF Döp din DVD (Ex: 'mindvd' eller 'semesterdvd'): "
read NAMNN
if [ "$NAMNN" != "" ]; then
NAMN=$NAMNN
fi
titel
dvdauthor -o $DIR/$NAMN/ -T
echo -e "$PREF En DVD har skapats av '$DIR/$NAMN/'"
echo -e "$PREF Vill du skapa en ISO-fil? (j/n)"
read VALD
if [ "$VALD" = "n" ]; then
echo -e "$PREF Ingen ISO-fil har skapats"
else
mkisofs -dvd-video -v -o $DIR/$NAMN.iso $DIR/$NAMN
echo -e "$PREF En ISO-fil har skapats i '$DIR'."
fi
elif [ "$opt" = "Kriterier" ]; then
echo -e "$PREF FFmpeg måste vara installerat för att kunna köra bashvidc"
elif [ "$opt" = "Hjälp" ]; then
echo -e "$PREF Besök http://magnonos.com/bashvidc för hjälp"
elif [ "$opt" = "Avsluta" ]; then
echo -e "$PREF Hej då!"
exit
else
echo -e "$PREF Jag tror att du valde ett alternativ som inte finns, eller hur?"
fi
done
# # # # ÄNDRINGSLOGG
#
# # # Version 0.2
# - DVD-skapare
# - Smartare interaktivitet
# - FLV ljud-codec satt till standard
# - Support för WMV
# - Ej överskrivning som standard
#
# # # Version 0.1
# - Konvertering: MPG, AVI, FLV, WMV till DVD-MPG, MPG, AVI, FLV
# - 4-stegs datainmatning
# - Smart interaktivitet
#
# # # # #
SV: Xdialog
Postat: 17 jun 2007, 11:09
av Magnuntu
Här har du förresten ett bashscript skrivet av en person på forumet som jag glömt bort namnet på.
Kul att du använder det eftersom det är jag som har skrivit det
Det jag håller på med nu är att försöka göra det grafiskt.
SV: Xdialog
Postat: 17 jun 2007, 21:39
av Trill
Mange Muck skrev:
Här har du förresten ett bashscript skrivet av en person på forumet som jag glömt bort namnet på.
Kul att du använder det eftersom det är jag som har skrivit det
Det jag håller på med nu är att försöka göra det grafiskt.
Oj.

SV: Xdialog
Postat: 18 jun 2007, 11:28
av upnorth
Haha, fan vad kul!
Jag förstod nästan all kod och jag har bara läst 2 kurser C-programmering på gymnasiet.
Verkar vara sjukt mycket enklare att koda för linux...
SV: Xdialog
Postat: 18 jun 2007, 18:00
av Magnuntu
Det är ganska mycket enklare kod som jag har skrivit också

Jag kan knappt någon bash, men jag letar upp det jag behöver och tycker verkar användbart

SV: Xdialog
Postat: 18 jun 2007, 18:14
av Magnuntu
Så, nu har jag försökt lära mig en del. Men vad är felet nu? Jag får outputten "Alternativet Konvertera finns inte" när väljer alternativ ett.
Kod: Markera allt
Xdialog --title "Main menu" --menu "Choose whatever you like" 15 75 6 \
"${Lmenu_convert}" "...${Lmenu_convert_op}" \
"${Lmenu_dvd}" "...${Lmenu_dvd_op}" \
"${Lmenu_criterias}" "...${Lmenu_criterias_op}" \
"${Lmenu_settings}" "...${Lmenu_settings_op}" \
"${Lmenu_help}" "...${Lmenu_help_op}" \
"${Lmenu_quit}" "...${Lmenu_quit_op}" 2> /tmp/menu.tmp.$$;
retval=$?; Q=`cat /tmp/menu.tmp.$$`; rm -f /tmp/menu.tmp.$$;
case $retval in
0)
if [ "$Q" = "${Lmenu_convert}" ]; then
source "${SCRIPTPATH}/exec/convert"
convert_choosefile
elif [ "$Q" = "${Lmenu_help}" ]; then
source "${SCRIPTPATH}/exec/help"
help_show
else
echo "Alternativet $Q finns inte";
fi;;
1) quit;;
255) quit;;
esac
SV: Xdialog
Postat: 18 jun 2007, 19:02
av Emil.s
upnorth skrev:
Haha, fan vad kul!
Jag förstod nästan all kod och jag har bara läst 2 kurser C-programmering på gymnasiet.
Verkar vara sjukt mycket enklare att koda för linux...
"bara" 2 kurser...
C/C++ är riktiga programmeringsspråk. Bash är ett script språk. Men visst är det enkelt.

SV: Xdialog
Postat: 18 jun 2007, 22:15
av upnorth
Tja, jag tyckte inte att den programmeringen var särskild, jag kan ju ha fel, jag hade väldigt lätt för allt.
Vi fick lära oss syntaxen, att skriva egna funktioner och hur olika sätt att använda minne fungerade.
Jag gjorde iofs ett textbaserat Yatsy som projektarbete, blev väldigt lyckat, men jag har inte kvar det.
Hursomhelst visste jag inte att det bara var script.
SV: Xdialog
Postat: 20 jun 2007, 19:44
av Magnuntu
okEEEj.... för att återgå till ämnet...
Jag behöver fortfarande hjälp med den första posten, hur man kan få progress att fungera?
SV: Xdialog
Postat: 20 jun 2007, 20:47
av Lars
Är det här till någon hjälp?
Kod: Markera allt
for a in `seq 0 10 100`; do echo $a; sleep 1; done | Xdialog --progress Test 10 20 100
for a in `seq 0 100`; do echo .; sleep 0.1; done | Xdialog --progress Test 10 20 100
Se även
http://thgodef.nerim.net/xdialog/doc/box.html#PROGRESS
SV: Xdialog
Postat: 20 jun 2007, 21:04
av Magnuntu
Jo tack, men hur kombinerar man det med t.ex. ffmpeg?
SV: Xdialog
Postat: 20 jun 2007, 22:01
av Lars
Nu orkar jag inte kolla upp ffmpeg, hur ser utdata ut? Som jag förstod det så måste det antingen vara i procentsatser eller som en rad med . eller liknande.
SV: Xdialog
Postat: 20 jun 2007, 23:12
av Magnuntu
Kod: Markera allt
frame= 1343 q=2.0 Lsize= 6918kB time=40.8 bitrate=1390.7kbits/s
...där alla siffror ändras två gånger per sekund eller nått

SV: Xdialog
Postat: 20 jun 2007, 23:25
av Lars
Skulle det kanske funka att skicka det genom cut -d" " -f2 för att plocka ut frame-nummret och sedan sätta maxdots till totala antalet frames.
SV: Xdialog
Postat: 22 jun 2007, 11:38
av Magnuntu
Det låter logiskt. Utan att försöka låta allt för dum: Hur gör jag det då..?
SV: Xdialog
Postat: 22 jun 2007, 15:19
av Konservburk
Det går nog att göra det på ett snyggare sätt, men det här är vad
jag kom fram till...
Kod: Markera allt
ffmpeg -y -i $FULL -aspect 16:9 -target pal-dvd $FULL.mpg 2>&1 \
| xargs -n1 -d\\015 -i bash -c 'awk "/^frame=/{print \$2}" <<\EOF
{}
EOF' | Xdialog --progress Testar 10 50 ${totala_antalet_frames}
Att ta reda på ${totala_antalet_frames} lämnas som övning

SV: Xdialog
Postat: 22 jun 2007, 16:50
av Magnuntu
Tack

Det borde jag faktiskt fixa *googlar*
EDIT: Det blev svårt när man använder xargs två gånger...

Finns det något sätt att ta reda på antalet frames via något liknande file stat?
SV: Xdialog
Postat: 26 jun 2007, 11:19
av Konservburk
Mange Muck skrev:
Det blev svårt när man använder xargs två gånger...

xargs två gånger?
Mange Muck skrev:
Finns det något sätt att ta reda på antalet frames via något liknande file stat?
Jag tror inte alla container-format anger det totala antalet frames.
Men det ska inte vara svårare än att multiplicera antalet sekunder
med antalet fps. Man kan t.ex. använda "mplayer -identify" för att
få fram ID_LENGTH och ID_VIDEO_FPS. Men jag antar att du inte
vill dra in mplayer som ett beroende enbart för detta.
Eftersom du redan använder ffmpeg så kan du alltid köra det den
spottar ur sig genom awk (eller motsvarande).
Kod: Markera allt
totala_antalet_frames=($(
ffmpeg -i $FULL 2>&1 | LC_ALL=C awk -F'[:,]' '
/Duration:/{
t = $2 * 3600 + $3 * 60 + $4
}
/Video:/{
printf("%d", t * gensub(".*, ([[:digit:].]+) fps.*", "\\1", $0))
}
'
))
SV: Xdialog
Postat: 26 jun 2007, 13:24
av Magnuntu
TACK!
Jag känner mig jättelat, men jag visste verkligen inte hur man skulle göra...

Detta blir en STOR credit eftersom en progressbar är ganska viktigt
