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. ;D ;D

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å :D 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.  8) :)

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 :)