Poslao: 02 Nov 2007 22:02
|
offline
- nulti.korisnik
- Legendarni građanin
- Pridružio: 20 Feb 2005
- Poruke: 4505
- Gde živiš: planeta Zemlja
|
Da, mora se navede da je flv (tj. avi) ulazni a mpg (tj. mp4) izlazni fajl!
Btw komanda za kovertovanje iz avi u mp4 je:
ffmpeg -i input.avi -acodec mp3 -vcodec mpeg4 -s 320×240 -r 27 output.mp4
Btw moze li me neko uputiti na komandu koja ce mi dopustiti da sam ukucam folder u kome zelim da se skripta izvrsi? Znaci da me pita u kom folderu ja zelim to da izvrsim (recimo to konvertovanje iz avi formata u mp4) tj da mi zatrazi da sam ukucam putanju
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 02 Nov 2007 22:09
|
offline
- Pridružio: 01 Okt 2004
- Poruke: 351
- Gde živiš: Qrshumliya
|
Je l ti odgovara nesto tipa:
read dir
cd $dir
Ako hoces tako nesto, lepo bi bilo da usput proveris da li uneti direktorijum postoji, pa u slucaju nepostojanja obradis izuzetk (ponovni unos, prekid rada, sta vec hoces )
|
|
|
|
Poslao: 02 Nov 2007 22:18
|
offline
- nulti.korisnik
- Legendarni građanin
- Pridružio: 20 Feb 2005
- Poruke: 4505
- Gde živiš: planeta Zemlja
|
Ne znam da li odgovara zato sto ne mogu sada to da probam. U principu svaka varijanta koja mi nudi mogucnost da sam ukucam putanju do foldera u kome se vrsi konverzija je prihvatljiva
btw dobru si mi ideju dao:
ako nema zeljenog foldera on neka izbaci "Fatal error"
Onu skriptu sa pocetka ove strane mogu da iskoristim za to (za pretragu foldera)?
|
|
|
|
Poslao: 02 Nov 2007 22:38
|
offline
- Pridružio: 25 Maj 2005
- Poruke: 1482
- Gde živiš: Gracanica, Kosovo
|
Iz druge skripte koju si naveo vec imas ono sto trazis, samo malo izmeni:
if [ -n "$1" ]
then
directory=$1 # If directory name given as a script argument...
else
directory=$PWD # Otherwise use current working directory.
fi
Sto se tice konverzije ja sam samo iskopirao ono sto si ti stavio, ne koristim ffmpeg. Jesi li probao onu skriptu sto sam postavio gore?
|
|
|
|
Poslao: 02 Nov 2007 22:44
|
offline
- nulti.korisnik
- Legendarni građanin
- Pridružio: 20 Feb 2005
- Poruke: 4505
- Gde živiš: planeta Zemlja
|
Kazem ti ne mogu jos da probam (crk´o hdd).
Ok sada ce mi trebati neko vreme da sve to malo uklopim. Btw nasao sam jos nesto:
echo -n "Enter file name : "
read file
TO je ono sto je anarki dao ali u skripti koja ima za cilj unosenje fajla a ne foldera u kojem ce da proveri da li ima read, write and execute dozvole (nasao sam je na:
http://bash.cyberciti.biz/academic/find_read_write_execute_permission.sh.php ). Ok javljam vam se kada iskombinujem nesto (drugim recima kada bude spremna za prvu probu ).
Hvala na svoj ukazanoj pomoci
|
|
|
|
Poslao: 02 Nov 2007 23:44
|
offline
- bocke
- Moderator foruma
- Glavni moderator Linux foruma
- Pridružio: 16 Dec 2005
- Poruke: 12486
- Gde živiš: Južni pol
|
Rado bih i ja uronio u skripting, ali trenutno nemam vremena za to. Evo par saveta.
Napravi obradu komandnih argumenata
dodaj opcije skripti
dodaj obradu opcija
kao sto rece anarki - malo provere ne bi skodilo. Svaku akciju treba testirati za uspeh il neuspeh, zatim u odgovarajucem slucaju ispisati gresku i izaci iz programa ili sl.
bash podrzava strukturno programiranje koristeci funkcije - mozes to iskoristiti u skriptovima
Dodaj ispis i objasnjenje skripte kada se pokrene bez argumenata
E, tek tada je to prava skripta.
|
|
|
|
Poslao: 02 Nov 2007 23:56
|
offline
- nulti.korisnik
- Legendarni građanin
- Pridružio: 20 Feb 2005
- Poruke: 4505
- Gde živiš: planeta Zemlja
|
Dakle gledao sam sve sto je napisano i ovo mi se cini kao najjednostavnije:
#!/bin/bash
# avi2mp4.sh
suffix1=[Aa][Vv][Ii]
suffix2=mp4
v=*.$suffix1
o=basename "$v" .$suffix1
operacija=ffmpeg -i '$o.suffix1' -acodec mp3 -vcodec mpeg4 -s 320×240 -r 27 '$o.$suffix2'
echo -n "Folder sa avi fajlovima : "
read dir
cd $dir
if [ -n $dir ]
then
echo "FATAL: folder ne postoji!"
else
echo "Pocinjem konvertovanje..."
fi
$operacija
E sad ovo ne moze da omane samo je pitanje da li sam dobro formatirao zahteve kada su sufixi u pitanju (da li je trebala neka zagrada ili ´ ili nesto slicno (ne kapiram sta ovi znaci interpunkcije znace)).
|
|
|
|
Poslao: 03 Nov 2007 07:43
|
offline
- Pridružio: 01 Okt 2004
- Poruke: 351
- Gde živiš: Qrshumliya
|
Heh... Interesantan nacin razmisljanja.
Mislim da ti je logicnije da komandu `cd` stavis u if-blok. T.j. da radi `cd` samo ako direktorijum postoji.
Ili da ti u uslovu prekida rad, a iza if-then bloka radi sta treba. Nesto kao
echo -n "Unesite direktorijum: "
read dir
if [ ! -d $dir ]
then
echo "ERR: $dir nije direktorijum."
exit
if
cd $dir
$operacija
|
|
|
|
Poslao: 03 Nov 2007 14:37
|
offline
- nulti.korisnik
- Legendarni građanin
- Pridružio: 20 Feb 2005
- Poruke: 4505
- Gde živiš: planeta Zemlja
|
Da, da bas sam o tome sinoc razmisljao! Ali da li ce tvoja (anarki) skripta da, ako ne ukucam ispravnu putanju do foldera, da mi da dozvoli da ponovo kucam putanju?
Drugim recima ako pogresim putanju da li ce me opet pitati da je ukucam?
Inace mene nesto drugo zanima: kada upotrebljavam ", kada ´ a kada ˙ (znake interpunkcije)? Ovo pitam zato sto ne znam da li su mi kod suffixa komande date dobro (da li mozda treba da pise suffix1=´[Aa][Vv][Ii]´ ili suffix1="[Aa][Vv][Ii]")?
p.s. Ala sam se zarazio... Sada cu da dodam i opciju da iz avi formata konvertuje u mpeg! xi, xi, xi...
|
|
|
|
Poslao: 03 Nov 2007 17:10
|
offline
- Pridružio: 01 Okt 2004
- Poruke: 351
- Gde živiš: Qrshumliya
|
Naravno nece. Za to ti treba ciklus. Evo ti ideja:
#!/bin/bash
echo -n "Unesite direktorijum [$HOME]: "
read dir
while [ ! -d "$dir" ]
do
echo
echo Unos $dir nije validan naziv za direktorijum.
echo Molimo Vas da unesete naziv postojeceg direktorijuma
echo -n "Unesite direktorijum [$HOME]: "
read dir
done
#U ovoj tacki je u $dir SIGURNO naziv direktorijuma ;)
cd "$dir"
#...i sta treba da se odradi...
Ovo ce da vrti petlju sve dok ne ubacis tacan naziv direktorijuma. Naravno ctrl-c ubija skriptu
Primeti samo da se prazan string tretira kao home direktorijum.
Sto se ti ce apostrofa (quotes) evo odprilike sta je ideja:
Kada zelis komandi da preneses parametar koji sadrzi specijalan znak shella (u nasm slucaju basha), taj znak ce da se interpretira na odrovarajuci nacin. Sta hocu da ti kazem? Evo na primeru:
Napravicu novi direktorijum. Obrati paznju na navodnike: direktorijum se zove novi dir sto znaci da njegovo ime sadrzi jedan od "specijalnih" karaktera basha - razmak. Taj karakter sluzi da razdvoji argumente komande.
[~/local/nesto]rile: mkdir "novi dir"
[~/local/nesto]rile: ls
novi dir
Sad cemo probati da promenimo aktivni direktorijum sa
[~/local/nesto]rile: cd novi dir
bash: cd: novi: No such file or directory
Sta se deslio? Bash prvo interpretira njegov specijalan znak - razmak i shvata unos novi dir kao dva arhumenta, te ih tako prosledjuje komandi `cd`. Sada `cd` uzima prvi argument koji nije njen svic i tretira ga kao direktorijum, pa konstantuje da direktorijum novi ne postoji.
Da bi problem prevazisli mozemo da "kvotiramo" ili da upotrebimo "escape karakter" (u bashu je to back-slash).
[~/local/nesto]rile: cd "novi dir"
[~/local/nesto/novi dir]rile: cd ..
[~/local/nesto]rile: cd 'novi dir'
[~/local/nesto/novi dir]rile: cd ..
[~/local/nesto]rile: cd novi\ dir
[~/local/nesto/novi dir]rile: cd ..
[~/local/nesto]rile:
Radi, naravno.
Sad, da malo zakomplikujemo zivot. Usecemo promenljivu. Neka se zove $mydir. Evo koda za inicijalizaciju:
[~/local/nesto]rile: mydir="novi dir"
[~/local/nesto]rile: echo $mydir
novi dir
[~/local/nesto]rile:
Oket, naziv naseg direktorijuma smo strpali u ovu promenljivu.
Hajde da koristeci nju udjemo u direktorijum:
[~/local/nesto]rile: cd $mydir
bash: cd: novi: No such file or directory
[~/local/nesto]rile:
Nece!
Sta mu je sad? Pa isto ono od malopre: Bash svoju promenljivu $mydir razvija i dobije komandu `cd novi dir` i opet se vraca na onu situaciju od malo pre.
Ajdemo drugacije:
[~/local/nesto]rile: cd "$mydir"
[~/local/nesto/novi dir]rile: cd ..
[~/local/nesto]rile:
Evo ga!
Sta se sad deslio? Pa, bash je opet razvio svoju promenljivu, ali je ostavio navode oko njih i dobio komandu `cd "novi dir"` i izvrsioo je kao da je to direktno ukucano!
Sta je sa apostrofom? Probamo:
[~/local/nesto]rile: cd '$mydir'
bash: cd: $mydir: No such file or directory
[~/local/nesto]rile:
Sta mu je sad? Prosto: Unutar apostrofa bash ne razvija promenljive. Znaci da je ovo prokomentarisao kao da treba da "udje" u direktorijum koji se zove $mydir doslovno.
Pazi: medju apostrofima i navodima se ne razvijaju wildchar (npr. *) znaci.
Ima jos dosta o ponasanju navoda da se prica. Procunjaj po netu ako te zanima
Sto se tice back-qutea, to je "komanda u komandi". Znaci sve sto je oiviceno sa ` se tretira kao komanda. Izlaz te komande menja orginalni tekst izmedju obrnutih apostrofa. Nadam se da kapiras sta ti kazem
Evo da napravimo primer:
Napravicu jedan fajl u istom direktorijumu:
[~/local/nesto]rile: touch 'echo MyCity'
[~/local/nesto]rile: ls
echo MyCity novi dir
Sad da vidimo sta kaze komanda `ls`:
[~/local/nesto]rile: ls
echo MyCity novi dir
[~/local/nesto]rile:
Sad cemo je pozvati sa back-quote:
[~/local/nesto]rile: `ls`
MyCity novi dir
[~/local/nesto]rile:
Nesto fali? Ustvari, ne.
Evo sta se desilo: Prvo se izvrsila komanda izmedju ovih naopackih apostrofa, dakle ls. Rezultat te komande je red echo MyCity novi dir. Sada citav taj red stavli na mesto komande `ls`, odnosno kao da smo ukucalil direktno echo MyCity novi dir. To se izvrsi i dobijemo ono sto smo dobili
Ovo ti je banalan primer, ali da skontas o cemu se radi. Ova stvar je veoma mocna, inace.
|
|
|
|