Xdialog

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

Xdialog

Inlägg 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
Senast redigerad av 1 Magnuntu, redigerad totalt 16 gånger.
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Trill

SV: Xdialog

Inlägg 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
#
# # # # #
Senast redigerad av 1 Trill, redigerad totalt 17 gånger.
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Xdialog

Inlägg 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.
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Trill

SV: Xdialog

Inlägg 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
Användarvisningsbild
upnorth
Inlägg: 7100
Blev medlem: 14 jun 2007, 19:43
OS: Linux Mint
Ort: Oslo

SV: Xdialog

Inlägg 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...
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Xdialog

Inlägg 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 :)
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Xdialog

Inlägg 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
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Emil.s
Inlägg: 6633
Blev medlem: 12 dec 2006, 23:20
OS: Ubuntu
Ort: /Dalarna/Hedemora/
Kontakt:

SV: Xdialog

Inlägg 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) :)
Home sweet ~/ = http://sandnabba.se
Användarvisningsbild
upnorth
Inlägg: 7100
Blev medlem: 14 jun 2007, 19:43
OS: Linux Mint
Ort: Oslo

SV: Xdialog

Inlägg 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.
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Xdialog

Inlägg 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?
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Xdialog

Inlägg 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
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Xdialog

Inlägg av Magnuntu »

Jo tack, men hur kombinerar man det med t.ex. ffmpeg?
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Xdialog

Inlägg 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.
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Xdialog

Inlägg 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 :)
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Xdialog

Inlägg 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.
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Xdialog

Inlägg av Magnuntu »

Det låter logiskt. Utan att försöka låta allt för dum: Hur gör jag det då..?
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

SV: Xdialog

Inlägg 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 :)
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Xdialog

Inlägg 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?
Senast redigerad av 1 Magnuntu, redigerad totalt 22 gånger.
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

SV: Xdialog

Inlägg 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))
      }
   '
))
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Xdialog

Inlägg 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 :)
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Skriv svar

Återgå till "Terminalforum"