Som Plus-medlem får du: Tillgång till våra Plus-artiklar | Egen blogg och Portfolio | Fri uppladdning av dina bilder | Rabatt på kameraförsäkring och fotoresor | 20% rabatt på Leofoto-stativ och tillbehör | Köp till Sveriges mest lästa fototidning Fotosidan Magasin till extra bra pris.

Plusmedlemskap kostar 349 kr per år

Annons

Linux shell-skript

Produkter
(logga in för att koppla)
Tomasz skrev:
Får man lägga in ett önskemål till er tidsmiljonärer?
-Något jag skulle vilja ha när jag surfar på FS och andra bildsiter är ett program som "maskar" åt mig. Det ska helt enkelt vara ett grått (eller valfri färg) fönster som man maximerar på sin skärm.
I detta fönster finns en transparent rektangel som man kan flytta omkring och ändra dimensioner på. Om jag hade ett sånt program skulle jag slippa att sitta med händerna eller pappbitar då jag vill testa beskärningar på de bilder jag surfar till.

Bra idé va? Kan någon fixa det?

Ja, det var faktiskt en mycket bra idé! Varför finns det inget sånt program.
 
Tomasz skrev:
Får man lägga in ett önskemål till er tidsmiljonärer?
-Något jag skulle vilja ha när jag surfar på FS och andra bildsiter är ett program som "maskar" åt mig.

Som alternativ, använd din filhanterare, lägg in ett bokmärke till katalogen "~/.mozilla/default/*.slt/Cache", sortera på datum och den översta bilden av hygglig storlek är den bild du vill åt, öppna den med passande viewer/editor och ändra storlek på fönstret eller beskär.

Ett annat alternatv skulle kunna vara en bookmarklet i din webbläsare som öppnar bild i ett litet popupfönster som du kan ändra storlek på, det kan nog också göras med en Mozilla/Firefox extension.
 
Har nu uppdaterat mitt stora script (som jag nämnt tidigare i tråden) som gör album med att det nu även hanterar viss IPTC-data.

mkcdalbum

Skriptet är främst tänkt för Canon, det gör html-album, skalar ned kopior, tar ut viss Exif och IPTC data, det kräver dock att .thm filerna finns kvar (de verkar innehålla mer exif data än vad .crw filen gör). Skriptet gör också en katalog vid namn "enh" som är tänkt för tif bilder av de crw och jpeg som ingår i albumet. Skriptet tar hänsyn till detta och använder de tif-bilderna om en tif med samma namn hittas i den katalogen.

Hur det används:
Lägg alla bilderna i en katalog (jag använder de katalognamn som kameran döpt). Kör sedan skriptet i den katalogen. Skriptet flyttar orginalbilderna till underkatalogen "kamera", gör tumnaglar i "thumbs" och lägger "webb-bilder" och html-filer i katalogen "web". Vill man lägga till fler bilder så lägger man bara till nya bilder i katalogroten och kör skriptet på nytt. Har man lagt till IPTC info i orginalbilderna i katalogen "kamera" (jpg och thm) så är det bara att köra skriptet på nytt i katalogroten för att uppdatera albumet med denna nya info (skriptet bryr sig då inte om att skala om och annat tidsödande).
 
Hej,

Roligt att det finns fler som använder Linux :)

En snabb beskrivning hur min "workflow" ser ut: Jag fotar i raw+jpg format (D70) och kopierar allt från minneskortet till en temporär mapp. Där kör jag "mmv" för att byta ut dsc_ mot dsd_ i filnamnen så att det inte finns någon överlapp med första 10000 bilderna. De är redan chronologiska då och jag bryr mig inte om filnamnen mer än så.

Sedan kör jag "exiftran -ai *jpg" som roterar alla jpgs som det ska. Sedan går tittar jag med "gqview" på bilderna och slänger alla dåliga. I gqview kan man enkelt konfigurera tangentbordkommando och jag har flera som t.ex. öppnar motsvarande rå-bild till jpg'en som visas nu i min raw-converter (ufraw, grafisk med preview).

Ett skript slänger sedan alla rå-bilder som har fått sin jpg borttaget. Alla inställningar som jag gör i ufraw sparas först bara i en meta-fil och sedan kollar ett annat skript om jpg'en är äldre än motsvarande meta-fil och konverterar om det behövs.

När jag är klar med bilderna använder jag "igal" för att göra en web-galleri. Jag har hackad detta flexibla perl-skript litegrann så att exif-informationen kommer med i html-slides som skapas (med hjälp av "jhead"). Sen flyttas det hela till arkivet på annan dator, där det finns två skripts till: en som synkroniserar rå- och meta-filerna med backup-disken och en annan som skickar allt nytt förutom rå-bilderna till min webserver (båda använder "rsync").

Alla verktyg som nämndes gå att googla rätt enkelt. Ett exempel av slutlig galleri: http://thomasmarquart.net/gallery/Midsommar2006/

Hoppas det var interessant för någon :)

mvh
thomas
 
Det skule vara kul att få se hur skriptet som slänger alla raw-filer där du tagit bort jpg-en ser ut. Jag har precis börjat nosa på skriptande och anar hur smidigt det går att göra saker.
 
Per_tissen skrev:
Det skule vara kul att få se hur skriptet som slänger alla raw-filer där du tagit bort jpg-en ser ut. Jag har precis börjat nosa på skriptande och anar hur smidigt det går att göra saker.
Det är precis ett sådant skript som jag la ut tidigare i denna tråd, byt bara filändelserna i skriptet (CRW till JPG och THM till RAW).

/Daniel
 
Per_tissen skrev:
Det skule vara kul att få se hur skriptet som slänger alla raw-filer där du tagit bort jpg-en ser ut. Jag har precis börjat nosa på skriptande och anar hur smidigt det går att göra saker.

jag gör såhär med det finns som vanligt fler sätt :)

Källkod:
#!/bin/sh
for raw in *.nef; do
 jpg=$(echo $raw | sed s/\.nef/\.jpg/) ;
 ufraw=$(echo $raw | sed s/\.nef/\.ufraw/) ;
 if [ -e $jpg ]; then
  echo "$jpg exists - doing nothing." ;
 else
  echo "$jpg gone -  try delete $raw and $ufraw.";
  if [ -e $raw ]; then rm $raw; fi
  if [ -e $ufraw ]; then rm $ufraw; fi
 fi
done

Och mitt konverteringsskript är gansa lik
Källkod:
for ufraw in *.ufraw; do
 jpg=$(echo $ufraw | sed s/\.ufraw/\.jpg/) ;
 nef=$(echo $ufraw | sed s/\.ufraw/\.nef/) ;
 if [ $jpg -ot $ufraw ]; then
  echo "Making new $jpg" ;
  ufraw-batch --overwrite $ufraw ;
 else
  echo "no change. skipping $ufraw.";
 fi
done
 
Nu har det varit dött ett tag så jag lägger upp mitt bamseskript för att tanka från minneskortet, sortera efter fotograferingsdatum och skapa tummnaglar från raw-filerna. Skriptet är skrivet för Canons .cr2 och kopierar bara filerna från minneskortet men är "förberett" för att flytta dem i stället. Det förutsätter även att minneskortet monteras på /EOS och att det finns ett "tillfälligt arkiv" att placera bilderna i.

Källkod:
#!/bin/sh

DU="/usr/bin/du"

SRC="/EOS/dcim"
DEST="/arkiv/aktuellt"

if [ ! -d "$SRC" ]
then
  mount /EOS

 elif [ ! -d "$DEST" ]
 then
   echo "Montera disken först"
   exit
fi
DATUM=`date +'%Y-%m-%d'`
TEMPDIR=/arkiv/temp/$DATUM

cd $SRC
for i in *
do

  NEWDIR=`echo ${TEMPDIR}`
    if [ ! -d "$NEWDIR" ]
      then
         mkdir "$NEWDIR"
    fi

   RAWDIR=`echo ${TEMPDIR}/raw`
     if [ ! -d "$RAWDIR" ]
       then
         mkdir "$RAWDIR"
    fi

DS=`$DU $i | awk '{print $1}'`
        if [ "$DS" -gt 0 ]
	  then
	      cp -v $i/*.cr2 "$RAWDIR"
	     #   mv -v $i/*.cr2 "$RAWDIR"
	    fi
	    
DS=`$DU $i | awk '{print $1}'`
	if [ "$DS" -gt 0 ]
	  then
	     cp -v $i/*.jpg "$NEWDIR"
	    #  mv -v $i/*.jpg "$NEWDIR"
	fi
	    
      #rmdir $i
done

cd $TEMPDIR/raw

for i in *.cr2

do

  BILDDATUM=`exiftool '-H' $i | grep '0x9004' | sed -e 's/0x9004//; s/Create//;\
 s/Date//; s/[[:space:]]:[[:space:]]//; s/[[:space:]][[:digit:]]\{2\}:\
[[:digit:]]\{2\}:[[:digit:]]\{2\}//; s/[[:space:]]//g; s/:/-/g'`

ENDDIR=$TEMPDIR/$BILDDATUM

   if [ ! -d "$ENDDIR" ]
	then
	mkdir $ENDDIR
   fi

   if [ ! -d "$ENDDIR/raw" ]
   	then mkdir $ENDDIR/raw
   fi
   
echo "  Sorterar --  "$i
  mv $i $ENDDIR/raw  

done

cd $TEMPDIR

for i in *
do
 
  if [ -d $DEST/$i ]
	then mv $i/*.jpg $DEST/$i
		if [ -d $DEST/$i/raw ]
		  then mv $i/raw/* $DEST/$i/raw
		  else mv $i/raw $DEST/$i
		fi
	else mv $i $DEST
  fi
  
  for p in $DEST/$i/raw/*.cr2
  do
        ufraw-batch --wb=camera --gamma=1.0 --linearity=0.0 --interpolation=\
bilinear --out-type=jpeg --compression=95 --out-path=$DEST/$i --size=800 $p
          echo "   --  done"
  done
done

cd $DEST

rmdir $TEMPDIR/raw
rmdir $TEMPDIR

echo ""
echo "Klart!"

exit 0

Delar av skriptet är rena saxningar av andra skript tidigare i tråden och andra delar är bara starkt influerade. Förslag på optimeringar mottages gärna:) Det är den här tråden som gjort att jag "upptäckt" skript öht så jag är rätt ny...
 
Per_tissen skrev:
Förslag på optimeringar mottages gärna:) Det är den här tråden som gjort att jag "upptäckt" skript öht så jag är rätt ny...

Försök att hitta något som plockar ut den inbäddade jpeg filen istället för att använda ufraw, det finns en stor prestandavinst i det. Jag tror att exiftool kan göra det

Jag tror också att du kan slippa den långa sed strängen där du tar ut bilddatum genom att för exiftool ange vilken tag du vill visa. Jag har dock inte själv exiftool, så jag spekulerar lite här.
 
steelneck skrev:
Försök att hitta något som plockar ut den inbäddade jpeg filen istället för att använda ufraw, det finns en stor prestandavinst i det. Jag tror att exiftool kan göra det

Om inte annat så kan dcraw plocka ut den inbäddade jpeg-filen. Här är mitt enkla skript för att göra påsiktskopior av alla .cr2 filer i ett bibliotek:

Källkod:
for f in *.cr2; do \
  dcraw -c -e $f | \
    convert jpeg: -unsharp 0.1x1.0+0.5 \
       -resize 1024x1024 -unsharp 0.1x1.0+0.5 \
       -quality 80 - $f.small.jpg; \
done
(OBS: otestade radbrytningar - jag har allt på en rad.)
 
Tummnagel var kanske ett dåligt ordval, skriptet plockar ut bilder som är 800 pixel. Men helt klart ger tumnagelsextrahering istället en grotesk prestandavinst.
 
Per_tissen skrev:
Tummnagel var kanske ett dåligt ordval, skriptet plockar ut bilder som är 800 pixel. Men helt klart ger tumnagelsextrahering istället en grotesk prestandavinst.

Nu missförstod du mig och Anders G, som helt riktigt visar att dcraw (som ufraw bygger på) kan exrahera inbäddad jpeg. Vad ditt skript gör är att det konverterar (interpolerar) en bitmap ur rådatan, det är mycket resurskrävande. Vad jag och Anders vill säga är att råfilen redan innehåller en jpeg (som är vitbalanserad av kameran), att extrahera den ur råfilen kräver mycket mindre av datorns resurser och är således mycket snabbare. Det är i princip bara som att plocka ut en fil ur ett packat arkiv.

Du måste ju inte heller göra det, ditt sätt funkar också, jag ville bara peka på en sådan "optimering" du efterlyste.
 
Strålande! Då har jag ngt att pyssla med efter lunch också. Det är jobbigt att vara ledig och ha så mycket tid att fylla med meningsfulla sysslor:)
 
Man bör väl kanske tillägga att den inbäddade jpeg-filen i .cr2 filerna nog inte är fullstor, för 30D är den t ex 1728 x 1152, och att den nog inte är sparad i högsta jpeg kvalitén samt processad efter hur kameran är inställd. Men den duger utmärkt till att snabbt ta fram ok bilder för att titta på och sortera på datorn.

/Anders
 
Hej.
Här är mitt skript som jag använder för att göra thumbnails av foton (för webbpublicering etc), döpa dem till thumb-* och flytta dem till thumbs/. Man behöver imagemagick installerat för att det ska funka. Jag brukar köra makethumbs 25% jpg.

#!/bin/sh
# usage: makethumbs <size> <filetype>
# where <size> is the wanted thumbnail size in
# pixels or percent and <filetype> is the image
# filetype (JPG, PNG, jpeg, gif etc).

SIZE="$1"
FILE="$2"

for img in `ls *.$FILE`
do
convert -verbose -resize $SIZE $img thumb-$img
done

if [ "$(ls * | grep thumbs | wc -l )" == "1" ]
then
echo "thumbs/ already exists"
else
mkdir thumbs
fi

mv thumb-* thumbs/
 
Byt ut:

[ "$(ls * | grep thumbs | wc -l )" == "1" ]

mot:

[ -d thumbs ]

så slipper du skapa en massa processer extra för att kontrollera om det finns en katalog. Mansidan till "test" visar -d och andra trevliga tester man kan vilja göra i shellskript.

Skulle jag ha använt skriptet skulle jag även ha lagt till flaggan -f till mv sist i skriptet så skriver den automatiskt över nygenererade tumnaglar om de har samma namn. Fast egentligen skulle man kunna låta convert spara direkt dit och istället skapa katalogen först.

Men det finns tusen sätt att göra samma sak på och det är det sköna med *nix :)
 
maxzomborszki skrev:
Byt ut:

[ "$(ls * | grep thumbs | wc -l )" == "1" ]

mot:

[ -d thumbs ]

så slipper du skapa en massa processer extra för att kontrollera om det finns en katalog. Mansidan till "test" visar -d och andra trevliga tester man kan vilja göra i shellskript.

Skulle jag ha använt skriptet skulle jag även ha lagt till flaggan -f till mv sist i skriptet så skriver den automatiskt över nygenererade tumnaglar om de har samma namn. Fast egentligen skulle man kunna låta convert spara direkt dit och istället skapa katalogen först.

Men det finns tusen sätt att göra samma sak på och det är det sköna med *nix :)


Smart! Det ska jag ändra på studs. Jo, visst är det skönt att ha sån stor valfrihet? :)
 
Tjena!
Ni som verkar vara riktiga scripting-gurus! Jag har ett problem som ni kanske vill hjälpa mig med. Jag har en massa kataloger som alla i sin tur har en underkatalog var (med olika namn). I denna underkatalog har jag en massa filer. Jag vill nu matcha filer och flytta dessa till katalogen ovanför.

Tänkte först att
Källkod:
find . -name '*test.html' -exec mv {} ../ \;
borde funka men då flyttas filerna relativt där jag står när jag skriver kommandot. Är det någon som har en bra lösning på detta vore jag kanontacksam?

Mvh

Daniel
 
Jag skulle vilja ha ett nautilus-skript som vid högerklick på en eller flera bilder lät mig skriva in nyckelord i exif:en. Det vore utmärkt och det vore möjligt att få upp en pop-up ruta där jag kan skriva in nyckelord som sedan sparas i exifen och därmed blir sökbara med beagle.

Hälsningar
Johan
 
ANNONS
Spara upp till 12000 kr på Nikon-prylar