• Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2025
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien und Schutzgläser der Eigenmarken
    "Upscreen", "Screenleaf", BROTECT" und "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Stimmt ab über die Sieger des DSLR-Forum Fotowettbewerbs Mai 2025.
    Thema: "Grün"

    Nur noch bis zum 31.05.2025 23:59!
    Jeder darf abstimmen!
    Zur Abstimmung und Bewertung hier lang
  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • Nicht erreichbare Adressen im Benutzerkonto
    Wir bekommen zurzeit eine große Anzahl an E-Mails, die das System zum Beispiel als Benachrichtigungen an Nutzer verschickt,
    als unzustellbar zurück, weil z.B. die Adressen nicht erreichbar sind oder das Postfach gar nicht existiert.
    Stellt doch bitte sicher, dass die Benachrichtigungen, die ihr vom System erwartet, auch zugestellt werden können.
    Nicht erreichbare E-Mail-Adressen sind dazu wenig hilfreich.
    Danke!
WERBUNG

EXIF-Statistiken mit Linux

Hoi!

Gute Frage.
Einfach mal ausprobieren ;)

lg
Michael
 
Ich hab' spoilerheads Version noch ein bisschen verändert:

+ Statt GNUPLOT werden die Google Chart Tools genutzt
+ die option AFMode hat bei mir nicht funktioniert, daher nutze ich FocusMode
+ zusätzlich werte ich noch "Orientation" aus
+ ich gebe nicht jede Datei aus, die gerade bearbeitet wird, sondern nur die Zahl der bisher bearbeitet gegenüber der Gesamtzahl, sowie zusätzlich die benötigte Zeit

Was mir noch nicht gefällt: Die Bar-Charts sind nicht optimal, da muss noch etwas gemacht werden. Teilweise liegt das aber an der Google-API, die da nicht mehr unterstützt. Mir würde nämlich sehr gefallen, wenn ich die x-Achsen-Beschriftung vertikal machen könnte, da bei vielen verschiedenen möglichen Werten, wie bei dem Exposure-Chart sehr gut zu erkennen, leider unlesbar wird. Fall hier jemand eine Idee haben sollte - bitte her damit!

Auch für andere Verbesserungsvorschläge bin ich natürlich offen, Ideen zur Verbesserung sind auch gern gesehen.

Vielen Dank an spoilerhead für die großartige Vorarbeit.:top:

Code:
#!/bin/bash
#EXIF statistics script by causa-prima 2010
#original script by spoilerhead 2009-2010
BEGIN=$(date +%s)
rm eval/temp/imgdatap.txt
mkdir eval
mkdir eval/temp
COUNT=1
N=$(find . -iname '*.CR2' | wc -l)
find . -iname '*.CR2' |sort | while read FILE
do
    echo -ne "reading EXIF-data from file $COUNT of $N..\r"
    COUNT=$(($COUNT+1))
    LANGUAGE=C exiftool -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash -FocusMode -MeteringMode -FocusMode -ShootingMode -Orientation "$FILE" >>eval/temp/imgdatap.txt &
    
    
    #process in batches
    NPROC=$(($NPROC+1))
	    if [ "$NPROC" -ge 8 ]; then
	        wait
	        NPROC=0
    fi
done
#wait for all processes to finish
wait

cat eval/temp/imgdatap.txt  |grep Exposure.*: |cut --delimiter=: -f2 |awk '{ split($1, a, "/"); if (a[2]==""){a[2] = 1} $1=sprintf("%8.5f",a[1]/a[2]); printf $1; printf"\n"}' > eval/temp/d_exp.txt
#replace infinity aperture with 64 (unknown)
cat eval/temp/imgdatap.txt  |grep Aperture.*: |cut --delimiter=: -f2 |sed s#inf#64#g > eval/temp/d_apr.txt
cat eval/temp/imgdatap.txt  |grep Focal.*:    |cut --delimiter=: -f2 > eval/temp/d_focal.txt 
cat eval/temp/imgdatap.txt  |grep ISO.*:      |cut --delimiter=: -f2 > eval/temp/d_iso.txt
cat eval/temp/imgdatap.txt  |grep Lens.*:     |cut --delimiter=: -f2 > eval/temp/d_lens.txt
cat eval/temp/imgdatap.txt  |grep Flash.*:    |cut --delimiter=: -f2 > eval/temp/d_flash.txt
cat eval/temp/imgdatap.txt  |grep Focus.*:    |cut --delimiter=: -f2 > eval/temp/d_focus.txt
cat eval/temp/imgdatap.txt  |grep Metering.*: |cut --delimiter=: -f2 > eval/temp/d_meter.txt
cat eval/temp/imgdatap.txt  |grep Focus.*:    |cut --delimiter=: -f2 > eval/temp/d_af.txt
cat eval/temp/imgdatap.txt  |grep Shooting.*: |cut --delimiter=: -f2 > eval/temp/d_shoot.txt
cat eval/temp/imgdatap.txt  |grep Orientation.*: |cut --delimiter=: -f2 > eval/temp/d_orientation.txt

echo
echo evaluating ...
mkdir eval
cat eval/temp/d_exp.txt|cut -f2 --delimiter=: |sort |uniq -c >eval/exposure_stats.txt
cat eval/temp/d_apr.txt|cut -f2 --delimiter=: |sort |uniq -c >eval/apr_stats.txt
cat eval/temp/d_focal.txt|cut -f2 --delimiter=: |sort |uniq -c | sed 's/.\{5\}$//' >eval/focal_stats.txt
cat eval/temp/d_iso.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >eval/iso_stats.txt
cat eval/temp/d_lens.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >eval/lens_stats.txt
cat eval/temp/d_flash.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >eval/flash_stats.txt
cat eval/temp/d_focus.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >eval/focus_stats.txt
cat eval/temp/d_meter.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >eval/lens_meter.txt
cat eval/temp/d_af.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >eval/af_stats.txt
cat eval/temp/d_shoot.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >eval/shoot_stats.txt
cat eval/temp/d_orientation.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >eval/orientation_stats.txt


echo "plotting..."
# write first part of url to all files
echo "http://chart.apis.google.com/chart?chs=700x425&chds=0," |tee eval/temp/exposure_url.txt | tee eval/temp/apr_url.txt | tee eval/temp/focal_url.txt | tee eval/temp/iso_url.txt | tee eval/temp/lens_url.txt | tee eval/temp/flash_url.txt | tee eval/temp/focus_url.txt | tee eval/temp/lens_meter_url.txt | tee eval/temp/af_url.txt | tee eval/temp/shoot_url.txt > eval/temp/orientation_url.txt


#exposure
sort -g -r eval/exposure_stats.txt | head -1 | awk '{print $1}' >> eval/temp/exposure_url.txt
echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> eval/temp/exposure_url.txt
sort -g -r eval/exposure_stats.txt | head -1 | awk '{print $1}' >> eval/temp/exposure_url.txt
echo
awk '{print $2 , $1}' eval/exposure_stats.txt | sort -g | awk '{print $2 , $1}' > eval/exposure_stats.txt2
mv eval/exposure_stats.txt2 eval/exposure_stats.txt
echo "&cht=bvs&chd=t:" >> eval/temp/exposure_url.txt
awk '{printf $1","}' eval/exposure_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/exposure_url.txt
echo "&chl=" >> eval/temp/exposure_url.txt
awk '{printf $2"|"'}  eval/exposure_stats.txt | sed 's/.\{1\}$//' >> eval/temp/exposure_url.txt
awk '{printf $1}' eval/temp/exposure_url.txt > eval/temp/exposure_url.txt2
wget -i eval/temp/exposure_url.txt2 -O eval/exposure_stats.png > /dev/null 2>&1 

#apr
sort -g -r eval/apr_stats.txt | head -1 | awk '{print $1}' >> eval/temp/apr_url.txt
echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> eval/temp/apr_url.txt
sort -g -r eval/apr_stats.txt | head -1 | awk '{print $1}' >> eval/temp/apr_url.txt
awk '{print $2 , $1}' eval/apr_stats.txt | sort -g | awk '{print $2 , $1}' > eval/apr_stats.txt2
mv eval/apr_stats.txt2 eval/apr_stats.txt
echo "&cht=bvs&chd=t:" >> eval/temp/apr_url.txt
awk '{printf $1","}' eval/apr_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/apr_url.txt
echo "&chl=" >> eval/temp/apr_url.txt
awk '{printf $2"|"'} eval/apr_stats.txt | sed 's/.\{1\}$//' >> eval/temp/apr_url.txt
awk '{printf $1}' eval/temp/apr_url.txt > eval/temp/apr_url.txt2
wget -i eval/temp/apr_url.txt2 -O eval/apr_stats.png > /dev/null 2>&1 

#focal
sort -g -r eval/focal_stats.txt | head -1 | awk '{print $1}' >> eval/temp/focal_url.txt
echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> eval/temp/focal_url.txt
sort -g -r eval/focal_stats.txt | head -1 | awk '{print $1}' >> eval/temp/focal_url.txt
awk '{print $2 , $1}' eval/focal_stats.txt | sort -g | awk '{print $2 , $1}' > eval/focal_stats.txt2
mv eval/focal_stats.txt2 eval/focal_stats.txt
echo "&cht=bvs&chd=t:" >> eval/temp/focal_url.txt
awk '{printf $1","}' eval/focal_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/focal_url.txt
echo "&chl=" >> eval/temp/focal_url.txt
awk '{printf $2"|"'} eval/focal_stats.txt | sed 's/.\{1\}$//' >> eval/temp/focal_url.txt
awk '{printf $1}' eval/temp/focal_url.txt > eval/temp/focal_url.txt2
wget -i eval/temp/focal_url.txt2 -O eval/focal_stats.png > /dev/null 2>&1 

#iso
cat eval/iso_stats.txt | head -1 | awk '{print $1}' >> eval/temp/iso_url.txt
echo "&cht=p&chd=t:" >> eval/temp/iso_url.txt
awk '{printf $1","}' eval/iso_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/iso_url.txt
echo "&chl=" >> eval/temp/iso_url.txt
awk '{printf $2"|"'}  eval/iso_stats.txt | sed 's/.\{1\}$//' >> eval/temp/iso_url.txt
awk '{printf $1}' eval/temp/iso_url.txt > eval/temp/iso_url.txt2
wget -i eval/temp/iso_url.txt2 -O eval/iso_stats.png > /dev/null 2>&1 

#lens
cat eval/lens_stats.txt | head -1 | awk '{print $1}' >> eval/temp/lens_url.txt
echo "&cht=p&chd=t:" >> eval/temp/lens_url.txt
awk '{printf $1","}' eval/lens_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/lens_url.txt
echo "&chl=" >> eval/temp/lens_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/lens_stats.txt | sed 's/.\{2\}$//' >> eval/temp/lens_url.txt
awk '{printf $1}' eval/temp/lens_url.txt > eval/temp/lens_url.txt2
wget -i eval/temp/lens_url.txt2 -O eval/lens_stats.png > /dev/null 2>&1 

#flash
cat eval/flash_stats.txt | head -1 | awk '{print $1}' >> eval/temp/flash_url.txt
echo "&cht=p&chd=t:" >> eval/temp/flash_url.txt
awk '{printf $1","}' eval/flash_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/flash_url.txt
echo "&chl=" >> eval/temp/flash_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/flash_stats.txt | sed 's/.\{2\}$//' >> eval/temp/flash_url.txt
awk '{printf $1}' eval/temp/flash_url.txt > eval/temp/flash_url.txt2
wget -i eval/temp/flash_url.txt2 -O eval/flash_stats.png > /dev/null 2>&1 

#focus
cat eval/focus_stats.txt | head -1 | awk '{print $1}' >> eval/temp/focus_url.txt
echo "&cht=p&chd=t:" >> eval/temp/focus_url.txt
awk '{printf $1","}' eval/focus_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/focus_url.txt
echo "&chl=" >> eval/temp/focus_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/focus_stats.txt | sed 's/.\{2\}$//' >> eval/temp/focus_url.txt
awk '{printf $1}' eval/temp/focus_url.txt > eval/temp/focus_url.txt2
wget -i eval/temp/focus_url.txt2 -O eval/focus_stats.png > /dev/null 2>&1 

#lens_meter
cat eval/lens_meter.txt | head -1 | awk '{print $1}' >> eval/temp/lens_meter_url.txt
echo "&cht=p&chd=t:" >> eval/temp/lens_meter_url.txt
awk '{printf $1","}' eval/lens_meter.txt | sed 's/\(.*\)./\1/' >> eval/temp/lens_meter_url.txt
echo "&chl=" >> eval/temp/lens_meter_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/lens_meter.txt | sed 's/.\{2\}$//' >> eval/temp/lens_meter_url.txt
awk '{printf $1}' eval/temp/lens_meter_url.txt > eval/temp/lens_meter_url.txt2
wget -i eval/temp/lens_meter_url.txt2 -O eval/lens_meter.png > /dev/null 2>&1 

#af
cat eval/af_stats.txt | head -1 | awk '{print $1}' >> eval/temp/af_url.txt
echo "&cht=p&chd=t:" >> eval/temp/af_url.txt
awk '{printf $1","}' eval/af_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/af_url.txt
echo "&chl=" >> eval/temp/af_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/af_stats.txt | sed 's/.\{2\}$//' >> eval/temp/af_url.txt
awk '{printf $1}' eval/temp/af_url.txt > eval/temp/af_url.txt2
wget -i eval/temp/af_url.txt2 -O eval/af_stats.png > /dev/null 2>&1 

#shoot
cat eval/shoot_stats.txt | head -1 | awk '{print $1}' >> eval/temp/shoot_url.txt
echo "&cht=p&chd=t:" >> eval/temp/shoot_url.txt
awk '{printf $1","}' eval/shoot_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/shoot_url.txt
echo "&chl=" >> eval/temp/shoot_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/shoot_stats.txt | sed 's/.\{2\}$//' >> eval/temp/shoot_url.txt
awk '{printf $1}' eval/temp/shoot_url.txt > eval/temp/shoot_url.txt2
wget -i eval/temp/shoot_url.txt2 -O eval/shoot_stats.png > /dev/null 2>&1 

#orientation
cat eval/orientation_stats.txt | head -1 | awk '{print $1}' >> eval/temp/orientation_url.txt
echo "&cht=p&chd=t:" >> eval/temp/orientation_url.txt
awk '{printf $1","}' eval/orientation_stats.txt | sed 's/\(.*\)./\1/' >> eval/temp/orientation_url.txt
echo "&chl=" >> eval/temp/orientation_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' eval/orientation_stats.txt | sed 's/.\{2\}$//' >> eval/temp/orientation_url.txt
awk '{printf $1}' eval/temp/orientation_url.txt > eval/temp/orientation_url.txt2
wget -i eval/temp/orientation_url.txt2 -O eval/orientation_stats.png > /dev/null 2>&1 

#cleaning
rm -r eval/temp

echo done!
NOW=$(date +%s)
DIFF=$(($NOW - $BEGIN))
MINS=$(($DIFF / 60))
SECS=$(($DIFF % 60))
echo "Time elapsed: $MINS:`printf %02d $SECS`"

Und hier die bei meinem Datenbestand entstehenden Charts:

af_statsucuq.png


apr_stats0fwj.png


exposure_statsqec1.png


flash_stats9ewz.png


focal_statskavy.png


focus_statseewy.png


iso_statsgxt5.png


lens_meter8mii.png


lens_stats9idj.png


orientation_stats8dao.png


shoot_stats0d87.png
 
Auch für andere Verbesserungsvorschläge bin ich natürlich offen, Ideen zur Verbesserung sind auch gern gesehen.

Danke Dir!
Gibt es eine Möglichkeit, bei den exposure-stats nicht die tatsächliche Zeit (0,008), sondern den Bruch (z.B. 1/125) anzeigen zu lassen?

Gruß,
Hafer
 
Das sollte funktionieren, wenn man in die Zeile
Code:
cat eval/temp/imgdatap.txt  |grep Exposure.*: |cut --delimiter=: -f2 |awk '{ split($1, a, "/"); if (a[2]==""){a[2] = 1} $1=sprintf("%8.5f",a[1]/a[2]); printf $1; printf"\n"}' > eval/temp/d_exp.txt

zu

Code:
cat eval/temp/imgdatap.txt  |grep Exposure.*: |cut --delimiter=: -f2 > eval/temp/d_exp.txt
ändern. Nur die Sortierung geht dann wohl schief.
 
Zuletzt bearbeitet:
Ich moechte mich auch mal bei Fr4ggle fuer das tolle Skript und die Idee bedanken. Bin gerade am frickeln und modifizieren und es wuerde mich interessieren unter welcher Lizenz das Skript steht?

Gruss
 
Lange nicht geantwortet ;)

Lizenz?
Was ist das?
Braucht die Menschheit sowas?


Nö, macht damit was ihr wollt, solangs besser wird und ich auch was davon hab :lol:

lg
Michael
 
Lange nicht geantwortet ;)

Lizenz?
Was ist das?
Braucht die Menschheit sowas?


Nö, macht damit was ihr wollt, solangs besser wird und ich auch was davon hab :lol:

lg
Michael

Hi Michael,

also gut - Du hast es so gewollt !

Hoffentlich empfindest Du meine Änderungen als "Verbesserung" und hast was davon - vielen Dank auf jeden Fall für die Vorarbeit.

Wesentliche Erweiterungen:
- option handler, hauptsächlich zur Auswahl der Angabe der exposure time (dezimal oder als Bruch)
- Zusammenstellung der Bilder in einer HTML-Seite (index.html)
- ein paar Angaben in Variable als Parameter gesetzt

Wenn da ein paar Bilder gestatistikt werden, dann dauert das doch ganz schön:

Code:
/local/bin/pictstatistics.sh -f
exposure times in fraction format
reading EXIF-data from file 33964 of 33964 ..
evaluating ...
plotting...

Creating HTML file for ./pictstat/index.html.
Writing HTML header for ./pictstat/index.html.
done!
Time elapsed: 74:37

Die load ist so lange auf ca. 8-10 auf meinem Server mit Dual AMD 248. Also ggf. die Anzahl paralleler Prozesse etwas runtersetzen.

Das aktualisierte Script hab ich mal hier zum Download hingestellt:

http://fotobytes.de/index.php?option=com_joomdoc&view=docman&gid=11&task=cat_view&Itemid=16

Alternativ hier auch im "Klartext":

Code:
#!/bin/bash
#EXIF statistics script by causa-prima 2010
#original script by spoilerhead 2009-2010

# $Id: pictstatistics.sh,v 1.3 2011/05/31 10:01:59 ks Exp ks $

# abort on signals
trap "exit 2" 1 2 3 15

BEGIN=$(date +%s)

### Parameters (default values)

# 0=debug,1=info,2=error,3=critical
VERBOSELEVEL=0

# directory for storing the statistical data
STATDIR="./pictstat"

# file extension for raw picture data
RAWEXT=".CR2"

# filename for html index
INDEXFILE=${STATDIR}/index.html

# exposure times in decimal (d) or fraction (f) format
EXPTIMEFMT="d"

# html titles for the picture files
TITLE[0]="af_stats.png:autofocus mode" 
TITLE[1]="apr_stats.png:aperture values" 
TITLE[2]="exposure_stats.png:exposure values" 
TITLE[3]="flash_stats.png:flash used" 
TITLE[4]="focal_stats.png:focal length" 
TITLE[5]="focus_stats.png:focus mode" 
TITLE[6]="iso_stats.png:iso values" 
TITLE[7]="lens_meter.png:exporure mode" 
TITLE[8]="lens_stats.png:lens used" 
TITLE[9]="orientation_stats.png:orientation" 
TITLE[10]="shoot_stats.png:metering mode" 


# functions ------------------------------------------------------------------------
# output for messages depending on verbosity
# $1 severity, $2 message
# |
# `-> 0=debug,1=info,2=error,3=critical
function msg()
{
    if [ $1 -ge $VERBOSELEVEL ]; then
        if [ $1 -ge 2 ]; then
            # use stderr for printing the message
            echo >&2 -e "$2"
        else
            # use stdout for printing the message
            echo -e "$2"
        fi
    fi

    if [ $1 -ge 3 ]; then
        exit 3
    fi
}


# print usage information
function printhelp () {
    echo "usage: $0 [-h] [-f]" 
    echo "-h        help"
    echo "-f        print exposure time in fraction instead of decimal format"
        echo "-d <n>        set debug level: 0=debug,1=info,2=error,3=critical"
    echo -e "\n"
}

# make an empty html file
# $1 file
function htmlclear()
{
    msg 0 "Creating HTML file for $1."
    echo -n > "$1" || msg 3 "Error creating HTML file. Stop."
}

# print a string to an html-file
# $1 string, $2 file
function htmlprint()
{
    echo -e -n $1 >> "$2" || msg 3 "Error writing HTML file. Stop."
}

# setup html header
# $1 title, $2 file
function htmlheader()
{
    msg 0 "Writing HTML header for $2."
    htmlprint "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n" "$2"
    htmlprint "<html>\n" "$2"
    htmlprint "<head>\n" "$2"
    htmlprint "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n" "$2"
    htmlprint "<title>$1</title>\n" "$2"
    htmlprint "</head>\n" "$2"
    htmlprint "<body style=\"text-align: center;\">\n" "$2"
}

# write out html footer
# $1 file
function htmlfooter()
{
    msg 0 "Writing HTML footer for $1."
    htmlprint "<br />\n" "$1"

    htmlprint "</body>\n" "$1"
    htmlprint "</html>\n" "$1"
}

# $1 name of tool
function toolcheck()
{
    X=`type -p $1`
    if test $X && test -x $X;
        then return 0
        else return 1
    fi
}

ABORT=0
while getopts  "hd:f" MYOPTION
do
    # echo "$MYOPTION" $OPTIND $OPTARG

    if [ "$MYOPTION" = "h" -o "$MYOPTION" = "?" ]; then
        # print usage
        ABORT=1
    fi

    if [ "$MYOPTION" = "d" ]; then
        # set debug level
        if [ $OPTARG -ge 0 -a $OPTARG -le 9 ]; then
            VERBOSELEVEL=$OPTARG
            msg 0 "set verbosity to $VERBOSELEVEL"
        else
            msg 2 "$OPTARG not valid for debug level - please provide a value between 0 and 9\n"
            ABORT=1
        fi
    fi

        if [ "$MYOPTION" = "f" ]; then
                # exposure times in fraction format
                EXPTIMEFMT=f
                msg 1 "exposure times in fraction format"
        fi

done    # option handling

if [ $ABORT -eq 1 ]; then
    # option not valid - abort script
    printhelp
    exit 1
fi

# Tools needed
# specify full path when not in $PATH
EXIFTOOL="exiftool"

# All tools available ?
toolcheck $EXIFTOOL || msg 3 "exiftool not found."

# main -----------------------------------------------------------------------------------
[ -e ${STATDIR}/temp/imgdatap.txt ] && rm ${STATDIR}/temp/imgdatap.txt
[ -d ${STATDIR} ] || mkdir ${STATDIR}
[ -d ${STATDIR}/temp ] || mkdir ${STATDIR}/temp

[ -d ${STATDIR} ] || msg 3 "directory doesn\'t exist - exiting"

COUNT=1
NOPICT=$(find . -iname "*${RAWEXT}" | wc -l)
find . -iname "*${RAWEXT}" | sort | while read FILE
do
    echo -ne "reading EXIF-data from file $COUNT of $NOPICT ..\r"
    COUNT=$(($COUNT+1))
    LANGUAGE=C $EXIFTOOL -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash -FocusMode -MeteringMode -FocusMode -ShootingMode -Orientation "$FILE" >>${STATDIR}/temp/imgdatap.txt &
    
    #process in batches
    NPROC=$(($NPROC+1))
            if [ "$NPROC" -ge 8 ]; then
                wait
                NPROC=0
    fi
done
#wait for all processes to finish
wait

if [ "$EXPTIMEFMT" == "f" ]; then
        # exposure time as fraction
        cat ${STATDIR}/temp/imgdatap.txt  |grep Exposure.*: |cut --delimiter=: -f2 > ${STATDIR}/temp/d_exp.txt
else
        # exposure times in decimal
        cat ${STATDIR}/temp/imgdatap.txt  |grep Exposure.*: |cut --delimiter=: -f2 |awk '{ split($1, a, "/"); if (a[2]==""){a[2] = 1} $1=sprintf("%8.5f",a[1]/a[2]); printf $1; printf"\n"}' > ${STATDIR}/temp/d_exp.txt
fi

#replace infinity aperture with 64 (unknown)
cat ${STATDIR}/temp/imgdatap.txt  |grep Aperture.*: |cut --delimiter=: -f2 |sed s#inf#64#g > ${STATDIR}/temp/d_apr.txt
cat ${STATDIR}/temp/imgdatap.txt  |grep Focal.*:    |cut --delimiter=: -f2 > ${STATDIR}/temp/d_focal.txt 
cat ${STATDIR}/temp/imgdatap.txt  |grep ISO.*:      |cut --delimiter=: -f2 > ${STATDIR}/temp/d_iso.txt
cat ${STATDIR}/temp/imgdatap.txt  |grep Lens.*:     |cut --delimiter=: -f2 > ${STATDIR}/temp/d_lens.txt
cat ${STATDIR}/temp/imgdatap.txt  |grep Flash.*:    |cut --delimiter=: -f2 > ${STATDIR}/temp/d_flash.txt
cat ${STATDIR}/temp/imgdatap.txt  |grep Focus.*:    |cut --delimiter=: -f2 > ${STATDIR}/temp/d_focus.txt
cat ${STATDIR}/temp/imgdatap.txt  |grep Metering.*: |cut --delimiter=: -f2 > ${STATDIR}/temp/d_meter.txt
cat ${STATDIR}/temp/imgdatap.txt  |grep Focus.*:    |cut --delimiter=: -f2 > ${STATDIR}/temp/d_af.txt
cat ${STATDIR}/temp/imgdatap.txt  |grep Shooting.*: |cut --delimiter=: -f2 > ${STATDIR}/temp/d_shoot.txt
cat ${STATDIR}/temp/imgdatap.txt  |grep Orientation.*: |cut --delimiter=: -f2 > ${STATDIR}/temp/d_orientation.txt

echo
echo evaluating ...
cat ${STATDIR}/temp/d_exp.txt|cut -f2 --delimiter=: |sort |uniq -c >${STATDIR}/exposure_stats.txt
cat ${STATDIR}/temp/d_apr.txt|cut -f2 --delimiter=: |sort |uniq -c >${STATDIR}/apr_stats.txt
cat ${STATDIR}/temp/d_focal.txt|cut -f2 --delimiter=: |sort |uniq -c | sed 's/.\{5\}$//' >${STATDIR}/focal_stats.txt
cat ${STATDIR}/temp/d_iso.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >${STATDIR}/iso_stats.txt
cat ${STATDIR}/temp/d_lens.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >${STATDIR}/lens_stats.txt
cat ${STATDIR}/temp/d_flash.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >${STATDIR}/flash_stats.txt
cat ${STATDIR}/temp/d_focus.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >${STATDIR}/focus_stats.txt
cat ${STATDIR}/temp/d_meter.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >${STATDIR}/lens_meter.txt
cat ${STATDIR}/temp/d_af.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >${STATDIR}/af_stats.txt
cat ${STATDIR}/temp/d_shoot.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >${STATDIR}/shoot_stats.txt
cat ${STATDIR}/temp/d_orientation.txt|cut -f2 --delimiter=: |sort |uniq -c |sort -g -r >${STATDIR}/orientation_stats.txt


echo "plotting..."
# write first part of url to all files
echo "http://chart.apis.google.com/chart?chs=700x425&chds=0," |tee ${STATDIR}/temp/exposure_url.txt | tee ${STATDIR}/temp/apr_url.txt | tee ${STATDIR}/temp/focal_url.txt | tee ${STATDIR}/temp/iso_url.txt | tee ${STATDIR}/temp/lens_url.txt | tee ${STATDIR}/temp/flash_url.txt | tee ${STATDIR}/temp/focus_url.txt | tee ${STATDIR}/temp/lens_meter_url.txt | tee ${STATDIR}/temp/af_url.txt | tee ${STATDIR}/temp/shoot_url.txt > ${STATDIR}/temp/orientation_url.txt

#exposure
sort -g -r ${STATDIR}/exposure_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/exposure_url.txt
echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> ${STATDIR}/temp/exposure_url.txt
sort -g -r ${STATDIR}/exposure_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/exposure_url.txt
echo
awk '{print $2 , $1}' ${STATDIR}/exposure_stats.txt | sort -g | awk '{print $2 , $1}' > ${STATDIR}/exposure_stats.txt2
mv ${STATDIR}/exposure_stats.txt2 ${STATDIR}/exposure_stats.txt
echo "&cht=bvs&chd=t:" >> ${STATDIR}/temp/exposure_url.txt
awk '{printf $1","}' ${STATDIR}/exposure_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/exposure_url.txt
echo "&chl=" >> ${STATDIR}/temp/exposure_url.txt
awk '{printf $2"|"'}  ${STATDIR}/exposure_stats.txt | sed 's/.\{1\}$//' >> ${STATDIR}/temp/exposure_url.txt
awk '{printf $1}' ${STATDIR}/temp/exposure_url.txt > ${STATDIR}/temp/exposure_url.txt2
wget -i ${STATDIR}/temp/exposure_url.txt2 -O ${STATDIR}/exposure_stats.png > /dev/null 2>&1 

#apr
sort -g -r ${STATDIR}/apr_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/apr_url.txt
echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> ${STATDIR}/temp/apr_url.txt
sort -g -r ${STATDIR}/apr_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/apr_url.txt
awk '{print $2 , $1}' ${STATDIR}/apr_stats.txt | sort -g | awk '{print $2 , $1}' > ${STATDIR}/apr_stats.txt2
mv ${STATDIR}/apr_stats.txt2 ${STATDIR}/apr_stats.txt
echo "&cht=bvs&chd=t:" >> ${STATDIR}/temp/apr_url.txt
awk '{printf $1","}' ${STATDIR}/apr_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/apr_url.txt
echo "&chl=" >> ${STATDIR}/temp/apr_url.txt
awk '{printf $2"|"'} ${STATDIR}/apr_stats.txt | sed 's/.\{1\}$//' >> ${STATDIR}/temp/apr_url.txt
awk '{printf $1}' ${STATDIR}/temp/apr_url.txt > ${STATDIR}/temp/apr_url.txt2
wget -i ${STATDIR}/temp/apr_url.txt2 -O ${STATDIR}/apr_stats.png > /dev/null 2>&1 

#focal
sort -g -r ${STATDIR}/focal_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/focal_url.txt
echo "&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0," >> ${STATDIR}/temp/focal_url.txt
sort -g -r ${STATDIR}/focal_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/focal_url.txt
awk '{print $2 , $1}' ${STATDIR}/focal_stats.txt | sort -g | awk '{print $2 , $1}' > ${STATDIR}/focal_stats.txt2
mv ${STATDIR}/focal_stats.txt2 ${STATDIR}/focal_stats.txt
echo "&cht=bvs&chd=t:" >> ${STATDIR}/temp/focal_url.txt
awk '{printf $1","}' ${STATDIR}/focal_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/focal_url.txt
echo "&chl=" >> ${STATDIR}/temp/focal_url.txt
awk '{printf $2"|"'} ${STATDIR}/focal_stats.txt | sed 's/.\{1\}$//' >> ${STATDIR}/temp/focal_url.txt
awk '{printf $1}' ${STATDIR}/temp/focal_url.txt > ${STATDIR}/temp/focal_url.txt2
wget -i ${STATDIR}/temp/focal_url.txt2 -O ${STATDIR}/focal_stats.png > /dev/null 2>&1 

#iso
cat ${STATDIR}/iso_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/iso_url.txt
echo "&cht=p&chd=t:" >> ${STATDIR}/temp/iso_url.txt
awk '{printf $1","}' ${STATDIR}/iso_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/iso_url.txt
echo "&chl=" >> ${STATDIR}/temp/iso_url.txt
awk '{printf $2"|"'}  ${STATDIR}/iso_stats.txt | sed 's/.\{1\}$//' >> ${STATDIR}/temp/iso_url.txt
awk '{printf $1}' ${STATDIR}/temp/iso_url.txt > ${STATDIR}/temp/iso_url.txt2
wget -i ${STATDIR}/temp/iso_url.txt2 -O ${STATDIR}/iso_stats.png > /dev/null 2>&1 

#lens
cat ${STATDIR}/lens_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/lens_url.txt
echo "&cht=p&chd=t:" >> ${STATDIR}/temp/lens_url.txt
awk '{printf $1","}' ${STATDIR}/lens_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/lens_url.txt
echo "&chl=" >> ${STATDIR}/temp/lens_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' ${STATDIR}/lens_stats.txt | sed 's/.\{2\}$//' >> ${STATDIR}/temp/lens_url.txt
awk '{printf $1}' ${STATDIR}/temp/lens_url.txt > ${STATDIR}/temp/lens_url.txt2
wget -i ${STATDIR}/temp/lens_url.txt2 -O ${STATDIR}/lens_stats.png > /dev/null 2>&1 

#flash
cat ${STATDIR}/flash_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/flash_url.txt
echo "&cht=p&chd=t:" >> ${STATDIR}/temp/flash_url.txt
awk '{printf $1","}' ${STATDIR}/flash_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/flash_url.txt
echo "&chl=" >> ${STATDIR}/temp/flash_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' ${STATDIR}/flash_stats.txt | sed 's/.\{2\}$//' >> ${STATDIR}/temp/flash_url.txt
awk '{printf $1}' ${STATDIR}/temp/flash_url.txt > ${STATDIR}/temp/flash_url.txt2
wget -i ${STATDIR}/temp/flash_url.txt2 -O ${STATDIR}/flash_stats.png > /dev/null 2>&1 

#focus
cat ${STATDIR}/focus_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/focus_url.txt
echo "&cht=p&chd=t:" >> ${STATDIR}/temp/focus_url.txt
awk '{printf $1","}' ${STATDIR}/focus_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/focus_url.txt
echo "&chl=" >> ${STATDIR}/temp/focus_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' ${STATDIR}/focus_stats.txt | sed 's/.\{2\}$//' >> ${STATDIR}/temp/focus_url.txt
awk '{printf $1}' ${STATDIR}/temp/focus_url.txt > ${STATDIR}/temp/focus_url.txt2
wget -i ${STATDIR}/temp/focus_url.txt2 -O ${STATDIR}/focus_stats.png > /dev/null 2>&1 

#lens_meter
cat ${STATDIR}/lens_meter.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/lens_meter_url.txt
echo "&cht=p&chd=t:" >> ${STATDIR}/temp/lens_meter_url.txt
awk '{printf $1","}' ${STATDIR}/lens_meter.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/lens_meter_url.txt
echo "&chl=" >> ${STATDIR}/temp/lens_meter_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' ${STATDIR}/lens_meter.txt | sed 's/.\{2\}$//' >> ${STATDIR}/temp/lens_meter_url.txt
awk '{printf $1}' ${STATDIR}/temp/lens_meter_url.txt > ${STATDIR}/temp/lens_meter_url.txt2
wget -i ${STATDIR}/temp/lens_meter_url.txt2 -O ${STATDIR}/lens_meter.png > /dev/null 2>&1 

#af
cat ${STATDIR}/af_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/af_url.txt
echo "&cht=p&chd=t:" >> ${STATDIR}/temp/af_url.txt
awk '{printf $1","}' ${STATDIR}/af_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/af_url.txt
echo "&chl=" >> ${STATDIR}/temp/af_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' ${STATDIR}/af_stats.txt | sed 's/.\{2\}$//' >> ${STATDIR}/temp/af_url.txt
awk '{printf $1}' ${STATDIR}/temp/af_url.txt > ${STATDIR}/temp/af_url.txt2
wget -i ${STATDIR}/temp/af_url.txt2 -O ${STATDIR}/af_stats.png > /dev/null 2>&1 

#shoot
cat ${STATDIR}/shoot_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/shoot_url.txt
echo "&cht=p&chd=t:" >> ${STATDIR}/temp/shoot_url.txt
awk '{printf $1","}' ${STATDIR}/shoot_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/shoot_url.txt
echo "&chl=" >> ${STATDIR}/temp/shoot_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' ${STATDIR}/shoot_stats.txt | sed 's/.\{2\}$//' >> ${STATDIR}/temp/shoot_url.txt
awk '{printf $1}' ${STATDIR}/temp/shoot_url.txt > ${STATDIR}/temp/shoot_url.txt2
wget -i ${STATDIR}/temp/shoot_url.txt2 -O ${STATDIR}/shoot_stats.png > /dev/null 2>&1 

#orientation
cat ${STATDIR}/orientation_stats.txt | head -1 | awk '{print $1}' >> ${STATDIR}/temp/orientation_url.txt
echo "&cht=p&chd=t:" >> ${STATDIR}/temp/orientation_url.txt
awk '{printf $1","}' ${STATDIR}/orientation_stats.txt | sed 's/\(.*\)./\1/' >> ${STATDIR}/temp/orientation_url.txt
echo "&chl=" >> ${STATDIR}/temp/orientation_url.txt
awk '{{ for (i = 2; i <= NF; i++) printf $i"+" } printf "|"}' ${STATDIR}/orientation_stats.txt | sed 's/.\{2\}$//' >> ${STATDIR}/temp/orientation_url.txt
awk '{printf $1}' ${STATDIR}/temp/orientation_url.txt > ${STATDIR}/temp/orientation_url.txt2
wget -i ${STATDIR}/temp/orientation_url.txt2 -O ${STATDIR}/orientation_stats.png > /dev/null 2>&1 

#cleaning
rm -r ${STATDIR}/temp

# making index file
WDIR="$(pwd)"

htmlclear "$INDEXFILE"
htmlheader "Picture Statistics" "$INDEXFILE"

htmlprint "<h1>Picture Statistics of ${WDIR}</h1>\n" "$INDEXFILE"
htmlprint "<h3>out of ${NOPICT} raw files</h3>\n<BR>\n" "$INDEXFILE"

i=0
while [ "${TITLE[$i]}" != "" ]; do

        HEADER=${TITLE[$i]##*:}
        FILE=${TITLE[$i]%%:*}

        htmlprint "<h2>${HEADER}</h2>\n" "$INDEXFILE"
        htmlprint "<img src=\"${FILE}\" alt=\"${FILE}\"\n<BR>\n" "$INDEXFILE"

        i=$(($i+1))
done

msg 1 "done!"

NOW=$(date +%s)
DIFF=$(($NOW - $BEGIN))
MINS=$(($DIFF / 60))
SECS=$(($DIFF % 60))
echo "Time elapsed: $MINS:`printf %02d $SECS`"

Die Lesbarkeit von verschiedenen X-Achsen-Legenden ist noch suboptimal, vielleicht kann ja da noch jemand was machen, der sich mit diesem Google Zeugs auskennt.

Gruss, Klaus
 
Tolles Script! Hab die Version von spoilerhead genommen, da ich keine Tools von Google habe und will.
 
Hallo,

ich wollte eure Skripte unter Ubuntu 11.10 (Oneiric Ocelot) nutzen, aber hab leider mit allen Skripten so meine Schwierigkeiten :-(


bei picstatistics.sh
Code:
#!/bin/bash
#EXIF statistics script by causa-prima 2010
#original script by spoilerhead 2009-2010
# $Id: pictstatistics.sh,v 1.3 2011/05/31 10:01:59 ks Exp ks $

wird der Unterordner picstat/ erstellt, aber alle Dateien darin sind leer und die erstellten PNGs enthalten entsprechend keine Grafiken :-(
-
ich gehe dazu in einen ORdner mit Bildern und führe das Shellskript aus. Ich muss dazusagen das ich nur JPGs habe und das Skript an einem Punkt angepasst habe:

Code:
# file extension for raw picture data
RAWEXT=".JPG"

die Ausgabe ist folgende:
Code:
...@.... ~/Bilder/2011 % pictstatistics.sh -f 
exposure times in fraction format
reading EXIF-data from file 7 of 7 ..
evaluating ...
plotting...

Creating HTML file for ./pictstat/index.html.
Writing HTML header for ./pictstat/index.html.
done!
Time elapsed: 0:03

-
weiterhin habe ich die ältere Version von causa prima (siehe Posting vom 13.12.2010, 04:41)
-
auch das ältere Skript von
Fr4ggle (siehe Post vom 07.01.2010, 20:59)
funktioniert leider vnur zum Teil :-(
di Exfis.txt enthält die ausgelesenen Daten, aber die .png Dateien enthalten keine Bilder. Aber gnuplot und exiv2 und exiftool sind natürlich installiert...
Ausgabe von dere abgegrenzten Befehlszeile lautet:

Code:
line 0: warning: Skipping unreadable file "Exifs.txt"
line 0: No data in plot
in der Exifs.txt ist folgendes enthalten:
Code:
 0.01667 4 105.0 
 0.00313 6.3 90.0 
 0.00800 7.1 28.0 
 0.00625 4.5 82.0 
 0.00400 6.3 65.0 
 0.00800 5 55.0 
 0.00625 4 105.0
man beachte die führenden Leerzeichen, machen die evtl. das PRoblem?


Hat jemand evtl. eine Idee oder einen Tipp?
stehe grad auf dem Schlauch.
 
Du könntest aus meinem Script mal die Zeile "rm -r eval/temp" löschen, dann sollte da alle "Rohdaten" für die Grafikerstellung erhalten bleiben. Den Output davon hätte ich gern' mal gesehen, dann kann ich den mit einem von mir Vergleichen bzw. im Code schauen, was da falsch laufen könnte bzw. die einfach bei mir mal ausprobieren. Wenn ich die Zeit finde.. also ich verspreche nichts :)
 
Hi,

ich bin schon über deine Bereitschaft zu helfen sehr glücklich.
Durch die vielen Versionen an Skripten die ich bereits ausprobiert habe hoffe ich wir reden jetzt auch vom selben skript ;-)

Hab die von dir angesprochene Zeile aus dem Skript auskommentiert (Das Skript was über die Google Chart API/URL arbeitet)

ergebnis ist ernüchternd, auch diese Dateien sind alle 0Byte groß (und ja in all den .JPG sind definitiv EXIF Daten meiner Canon enthalten)

siehe Anhang:


EDIT: vielleicht noch hilfreich: exiftool -ver: 8.60
 
Zuletzt bearbeitet:
Beispielausgabe einer solchen Datei im Ordner:
Code:
ExifTool Version Number         : 8.60
File Name                       : IMG_8905.JPG
Directory                       : .
File Size                       : 5.6 MB
File Modification Date/Time     : 2011:10:09 15:30:52+02:00
File Permissions                : rw-------
File Type                       : JPEG
MIME Type                       : image/jpeg
Exif Byte Order                 : Little-endian (Intel, II)
Make                            : Canon
Camera Model Name               : Canon EOS 60D
Orientation                     : Horizontal (normal)
X Resolution                    : 72
Y Resolution                    : 72
Resolution Unit                 : inches
Software                        : Shotwell 0.11.1
Modify Date                     : 2011:10:05 16:43:53
Artist                          : Marc
Y Cb Cr Positioning             : Co-sited
Copyright                       : 
Exposure Time                   : 1/160
F Number                        : 4.5
Exposure Program                : Program AE
ISO                             : 500
Sensitivity Type                : Recommended Exposure Index
Recommended Exposure Index      : 500
Exif Version                    : 0230
Date/Time Original              : 2011:10:05 16:43:53
Create Date                     : 2011:10:05 16:43:53
Components Configuration        : Y, Cb, Cr, -
Shutter Speed Value             : 1/166
Aperture Value                  : 4.6
Flash                           : Off, Did not fire
Focal Length                    : 82.0 mm
Macro Mode                      : Normal
Self Timer                      : Off
Quality                         : Fine
Canon Flash Mode                : Off
Continuous Drive                : Continuous, High
Focus Mode                      : One-shot AF
Record Mode                     : JPEG
Canon Image Size                : Large
Easy Mode                       : Manual
Digital Zoom                    : None
Contrast                        : Normal
Saturation                      : Normal
Metering Mode                   : Evaluative
Focus Range                     : Not Known
Canon Exposure Mode             : Program AE
Lens Type                       : Canon EF 24-105mm f/4L IS
Long Focal                      : 105 mm
Short Focal                     : 24 mm
Focal Units                     : 1/mm
Max Aperture                    : 4
Min Aperture                    : 23
Flash Activity                  : 0
Flash Bits                      : (none)
Zoom Source Width               : 0
Zoom Target Width               : 0
Manual Flash Output             : n/a
Color Tone                      : Normal
Auto ISO                        : 100
Base ISO                        : 519
Measured EV                     : 9.75
Target Aperture                 : 4.5
Target Exposure Time            : 1/161
Exposure Compensation           : +1/3
White Balance                   : Auto
Slow Shutter                    : None
Shot Number In Continuous Burst : 0
Optical Zoom Code               : n/a
Camera Temperature              : 24 C
Flash Guide Number              : 0
Flash Exposure Compensation     : 0
Auto Exposure Bracketing        : Off
AEB Bracket Value               : 0
Control Mode                    : n/a
Measured EV 2                   : 9.125
Bulb Duration                   : 0
Camera Type                     : EOS High-end
ND Filter                       : n/a
Canon Image Type                : Canon EOS 60D
Canon Firmware Version          : Firmware Version 1.1.0
Camera Orientation              : Horizontal (normal)
Focus Distance Upper            : 1.59 m
Focus Distance Lower            : 1.42 m
Firmware Version                : 1.1.0
File Index                      : 8905
Directory Index                 : 100
Contrast Standard               : 0
Sharpness Standard              : 3
Saturation Standard             : 0
Color Tone Standard             : 0
Contrast Portrait               : 0
Sharpness Portrait              : 2
Saturation Portrait             : 0
Color Tone Portrait             : 0
Contrast Landscape              : 0
Sharpness Landscape             : 4
Saturation Landscape            : 0
Color Tone Landscape            : 0
Contrast Neutral                : 0
Sharpness Neutral               : 0
Saturation Neutral              : 0
Color Tone Neutral              : 0
Contrast Faithful               : 0
Sharpness Faithful              : 0
Saturation Faithful             : 0
Color Tone Faithful             : 0
Contrast Monochrome             : 0
Sharpness Monochrome            : 3
Filter Effect Monochrome        : None
Toning Effect Monochrome        : None
Contrast User Def 1             : 0
Sharpness User Def 1            : 3
Saturation User Def 1           : 0
Color Tone User Def 1           : 0
Filter Effect User Def 1        : None
Toning Effect User Def 1        : None
Contrast User Def 2             : 0
Sharpness User Def 2            : 3
Saturation User Def 2           : 0
Color Tone User Def 2           : 0
Filter Effect User Def 2        : None
Toning Effect User Def 2        : None
Contrast User Def 3             : 0
Sharpness User Def 3            : 3
Saturation User Def 3           : 0
Color Tone User Def 3           : 0
Filter Effect User Def 3        : None
Toning Effect User Def 3        : None
User Def 1 Picture Style        : Standard
User Def 2 Picture Style        : Standard
User Def 3 Picture Style        : Standard
Canon Model ID                  : EOS 60D
Thumbnail Image Valid Area      : 0 159 7 112
Serial Number Format            : Format 2
AF Area Mode                    : Single-point AF
Num AF Points                   : 9
Valid AF Points                 : 9
Canon Image Width               : 5184
Canon Image Height              : 3456
AF Image Width                  : 5184
AF Image Height                 : 3456
AF Area Widths                  : 108 88 88 88 129 88 88 88 108
AF Area Heights                 : 86 107 107 107 131 107 107 107 86
AF Area X Positions             : 0 -860 860 -1368 0 1368 -860 860 0
AF Area Y Positions             : 743 393 393 0 0 0 -393 -393 -743
AF Points In Focus              : 4
AF Points Selected              : 4
Original Decision Data Offset   : 0
Bracket Mode                    : Off
Bracket Value                   : 0
Bracket Shot Number             : 0
Raw Jpg Size                    : Large
Long Exposure Noise Reduction 2 : On
WB Bracket Mode                 : Off
WB Bracket Value AB             : 0
WB Bracket Value GM             : 0
Live View Shooting              : Off
Flash Exposure Lock             : Off
Internal Serial Number          : WB0275377
Dust Removal Data               : (Binary data 1024 bytes, use -b option to extract)
Crop Left Margin                : 0
Crop Right Margin               : 0
Crop Top Margin                 : 0
Crop Bottom Margin              : 0
Exposure Level Increments       : 1/3 Stop
ISO Speed Increments            : 1/3 Stop
ISO Expansion                   : On
AEB Auto Cancel                 : On
AEB Sequence                    : 0,-,+
Safety Shift                    : Disable
Flash Sync Speed Av             : Auto
Long Exposure Noise Reduction   : On
High ISO Noise Reduction        : Strong
Highlight Tone Priority         : Disable
Lens Drive No AF                : Focus search off
AF Point Selection Method       : AF point button: Activate AF Sel; Rear dial: Select AF points
Superimposed Display            : On
AF Assist Beam                  : Emits
Mirror Lockup                   : Disable
AF And Metering Buttons         : Metering start
Set Button When Shooting        : Normal (disabled)
Dial Direction Tv Av            : Normal
Focusing Screen                 : Ef-A
Add Original Decision Data      : Off
Aspect Ratio                    : 3:2
Cropped Image Width             : 5184
Cropped Image Height            : 3456
Tone Curve                      : Standard
Sharpness                       : 3
Sharpness Frequency             : n/a
Sensor Red Level                : 0
Sensor Blue Level               : 0
White Balance Red               : 0
White Balance Blue              : 0
Color Temperature               : 6600
Picture Style                   : Standard
Digital Gain                    : 0
WB Shift AB                     : 0
WB Shift GM                     : 0
Measured RGGB                   : 565 1024 1024 353
VRD Offset                      : 0
Sensor Width                    : 5344
Sensor Height                   : 3516
Sensor Left Border              : 152
Sensor Top Border               : 56
Sensor Right Border             : 5335
Sensor Bottom Border            : 3511
Black Mask Left Border          : 0
Black Mask Top Border           : 0
Black Mask Right Border         : 0
Black Mask Bottom Border        : 0
Color Data Version              : 9 (1100D)
WB RGGB Levels As Shot          : 2185 1024 1024 1596
Color Temp As Shot              : 5264
WB RGGB Levels Auto             : 2185 1024 1024 1596
Color Temp Auto                 : 5264
WB RGGB Levels Measured         : 2182 1023 1024 1594
Color Temp Measured             : 5264
WB RGGB Levels Daylight         : 2162 1024 1024 1601
Color Temp Daylight             : 5200
WB RGGB Levels Shade            : 2503 1024 1024 1362
Color Temp Shade                : 7000
WB RGGB Levels Cloudy           : 2330 1024 1024 1473
Color Temp Cloudy               : 6000
WB RGGB Levels Tungsten         : 1540 1024 1024 2411
Color Temp Tungsten             : 3200
WB RGGB Levels Fluorescent      : 1945 1024 1024 2245
Color Temp Fluorescent          : 3807
WB RGGB Levels Kelvin           : 2433 1024 1024 1406
Color Temp Kelvin               : 6599
WB RGGB Levels Flash            : 2405 1024 1024 1460
Color Temp Flash                : 6236
Raw Measured RGGB               : 480280 882404 877791 293460
Custom Picture Style File Name  : 
Peripheral Lighting             : On
Peripheral Lighting Value       : 62
Original Image Width            : 5184
Original Image Height           : 3456
Peripheral Lighting Setting     : On
Auto Lighting Optimizer         : Standard
Ambience Selection              : Standard
User Comment                    : 
Sub Sec Time                    : 06
Sub Sec Time Original           : 06
Sub Sec Time Digitized          : 06
Flashpix Version                : 0100
Color Space                     : sRGB
Exif Image Width                : 5184
Exif Image Height               : 3456
Interoperability Index          : R98 - DCF basic file (sRGB)
Interoperability Version        : 0100
Focal Plane X Resolution        : 5728.176796
Focal Plane Y Resolution        : 5808.403361
Focal Plane Resolution Unit     : inches
Custom Rendered                 : Normal
Exposure Mode                   : Auto
Scene Capture Type              : Standard
Owner Name                      : 
Serial Number                   : 1280620967
Lens Info                       : 24-105mm f/?
Lens Model                      : EF24-105mm f/4L IS USM
Lens Serial Number              : 0000117d94
Compression                     : JPEG (old-style)
Thumbnail Offset                : 8516
Thumbnail Length                : 12224
XMP Toolkit                     : XMP Core 4.4.0-Exiv2
Rating                          : 0
Subject                         : Alpen, Jasmin, Kühe, Natur, Personen, Tiere, Unternehmungen, Wanderung, Wanderung zum St. Anton
Tags List                       : Natur, Natur/Alpen, Natur/Tiere, Natur/Tiere/Kühe, Personen, Personen/Jasmin, Unternehmungen, Unternehmungen/Wanderung, Unternehmungen/Wanderung/Wanderung zum St. Anton
Last Keyword XMP                : Natur, Natur/Alpen, Natur/Tiere, Natur/Tiere/Kühe, Personen, Personen/Jasmin, Unternehmungen, Unternehmungen/Wanderung, Unternehmungen/Wanderung/Wanderung zum St. Anton
Current IPTC Digest             : 6be6f24fdab52352f697f658526068cb
Keywords                        : Alpen, Jasmin, Kühe, Natur, Personen, Tiere, Unternehmungen, Wanderung, Wanderung zum St. Anton
Originating Program             : Shotwell
Program Version                 : 0.11.1
Image Width                     : 5184
Image Height                    : 3456
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:2 (2 1)
Aperture                        : 4.5
Drive Mode                      : Continuous Shooting
File Number                     : 100-8905
Image Size                      : 5184x3456
Lens                            : 24.0 - 105.0 mm
Lens ID                         : Canon EF 24-105mm f/4L IS
Scale Factor To 35 mm Equivalent: 1.6
Shooting Mode                   : Program AE
Shutter Speed                   : 1/160
Create Date                     : 2011:10:05 16:43:53.06
Date/Time Original              : 2011:10:05 16:43:53.06
Modify Date                     : 2011:10:05 16:43:53.06
Thumbnail Image                 : (Binary data 12224 bytes, use -b option to extract)
WB RGGB Levels                  : 2185 1024 1024 1596
Blue Balance                    : 1.558594
Circle Of Confusion             : 0.019 mm
Field Of View                   : 15.9 deg
Focal Length                    : 82.0 mm (35 mm equivalent: 129.0 mm)
Hyperfocal Distance             : 78.21 m
Lens                            : 24.0 - 105.0 mm (35 mm equivalent: 37.7 - 165.1 mm)
Light Value                     : 9.3
Red Balance                     : 2.133789

in euren Skripten hab ich immer angaben wie
ExposureTime oder LensID gesehen,
mein exiftool gibt diese und viele andeere aber mit Leerzeichen aus,
also Exposure Time oder Lens ID
-
Bei all den hier besprochenen Skripten ging es ja immer um CR2 Canon RAW 2-
-
Beispielhaft am Skript von causa_prima hab ich diese Zeile immer entsprechend abgeändert:

von:
Code:
N=$(find . -iname '*.CR2' | wc -l)
find . -iname '*.CR2' |sort | while read FILE
do
nach:
Code:
N=$(find . -iname '*.JPG' | wc -l)
find . -iname '*.JPG' |sort | while read FILE
do
 
Zuletzt bearbeitet:
Das mit den Leerzeichen hat mit den Optionen von exiftool zu tun, die gibt man so an. Beim Anschließendem "greppen" spielen dann Leerzeichen keine Rolle mehr.
Was gibt dir
Code:
exiftool -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash -FocusMode -MeteringMode -FocusMode -ShootingMode -Orientation <DATEINAME>
aus, wenn du <DATEINAME> durch eine der Dateien austauschst? So könnnen wir feststellen, ob erstmal schon was rauskommt. Die ersten Ausgaben dieser Anfrage sollten nämlich nach "/eval/temp/imagedatap.txt" geschrieben werden (die enthält also ALLE Daten) - die Datei ist aber in deiner angehängten Datei nicht mit drin. Das würde alles erklären.
 
ok dann ist das schonmal auch kein problem mehr:
Code:
exiftool -ExposureTime -Aperture -FocalLength -ISO -Lensid -Flash -FocusMode -MeteringMode -FocusMode -ShootingMode -Orientation IMG_8905.JPG 
Exposure Time                   : 1/160
Aperture                        : 4.5
Focal Length                    : 82.0 mm
ISO                             : 500
Lens ID                         : Canon EF 24-105mm f/4L IS
Flash                           : Off, Did not fire
Focus Mode                      : One-shot AF
Metering Mode                   : Evaluative
Focus Mode                      : One-shot AF
Shooting Mode                   : Program AE
Orientation                     : Horizontal (normal)
 
ok. schuldige. den schritt hätten wir uns sparen können.
in der "imgdatap.txt" stehen alle Werte drin.
-
den punkt habe ich übersehen. da aber alle dateien wie die d_af.txt komplett leer sind:
Code:
...@... ~/Bilder/2011 % ls -al /home/.../Bilder/2011/eval/temp
insgesamt 100
drwxr-xr-x 2 msc msc 4096 2011-11-05 20:56 .
drwxr-xr-x 3 msc msc 4096 2011-11-05 20:56 ..
-rw-r--r-- 1 msc msc   75 2011-11-05 20:56 af_url.txt
-rw-r--r-- 1 msc msc   72 2011-11-05 20:56 af_url.txt2
-rw-r--r-- 1 msc msc  112 2011-11-05 20:56 apr_url.txt
-rw-r--r-- 1 msc msc  108 2011-11-05 20:56 apr_url.txt2
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_af.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_apr.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_exp.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_flash.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_focal.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_focus.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_iso.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_lens.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_meter.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_orientation.txt
-rw-r--r-- 1 msc msc    0 2011-11-05 20:56 d_shoot.txt
-rw-r--r-- 1 msc msc  112 2011-11-05 20:56 exposure_url.txt
-rw-r--r-- 1 msc msc  108 2011-11-05 20:56 exposure_url.txt2
-rw-r--r-- 1 msc msc   75 2011-11-05 20:56 flash_url.txt
-rw-r--r-- 1 msc msc   72 2011-11-05 20:56 flash_url.txt2
-rw-r--r-- 1 msc msc  112 2011-11-05 20:56 focal_url.txt
-rw-r--r-- 1 msc msc  108 2011-11-05 20:56 focal_url.txt2
-rw-r--r-- 1 msc msc   75 2011-11-05 20:56 focus_url.txt
-rw-r--r-- 1 msc msc   72 2011-11-05 20:56 focus_url.txt2
-rw-r--r-- 1 msc msc 3543 2011-11-05 20:56 imgdatap.txt
-rw-r--r-- 1 msc msc   75 2011-11-05 20:56 iso_url.txt
-rw-r--r-- 1 msc msc   72 2011-11-05 20:56 iso_url.txt2
-rw-r--r-- 1 msc msc   75 2011-11-05 20:56 lens_meter_url.txt
-rw-r--r-- 1 msc msc   72 2011-11-05 20:56 lens_meter_url.txt2
-rw-r--r-- 1 msc msc   75 2011-11-05 20:56 lens_url.txt
-rw-r--r-- 1 msc msc   72 2011-11-05 20:56 lens_url.txt2
-rw-r--r-- 1 msc msc   75 2011-11-05 20:56 orientation_url.txt
-rw-r--r-- 1 msc msc   72 2011-11-05 20:56 orientation_url.txt2
-rw-r--r-- 1 msc msc   75 2011-11-05 20:56 shoot_url.txt
-rw-r--r-- 1 msc msc   72 2011-11-05 20:56 shoot_url.txt2

leider verstehe ich zuwenig von programmierung und skripten.
aber wenn ich diese zeilen einzeln dann auf die imgdatap.txt loslasse passiert auch genau das was auch in den dateien landet:

Code:
...@... ~/Bilder/2011 % cat eval/temp/imgdatap.txt  |grep Exposure.*: |cut --delimiter=: -f2 |awk '{ split($1, a, "/"); if (a[2]==""){a[2] = 1} $1=sprintf("%8.5f",a[1]/a[2]); printf $1; printf"\n"}'
zsh: no matches found: Exposure.*:
...@... ~/Bilder/2011 %
 
hab die befehlszeile erstmal solange gekürzt bis was ausgegeben wurde:
Code:
...@... ~/Bilder/2011 % cat eval/temp/imgdatap.txt  |grep Exposure.*: |cut --delimiter=: -f2                    
zsh: no matches found: Exposure.*:
...@... ~/Bilder/2011 % cat eval/temp/imgdatap.txt  |grep Exposure.*:                        
zsh: no matches found: Exposure.*:
1 ...@... ~/Bilder/2011 % cat eval/temp/imgdatap.txt  |grep Exposure.*                                        :(
zsh: no matches found: Exposure.*
1 ...@... ~/Bilder/2011 % cat eval/temp/imgdatap.txt  |grep Exposure.                                         :(
Exposure Time                   : 1/320
Exposure Time                   : 1/125
Exposure Time                   : 1/160
Exposure Time                   : 1/250
Exposure Time                   : 1/60
Exposure Time                   : 1/125
Exposure Time                   : 1/160
-
hab noch ein bisschen rumprobiert. aber wie das immer so ist wenn jemand von etwas nichts versteht.....:

Code:
...@... ~/Bilder/2011 % cat eval/temp/imgdatap.txt  |grep Aperture.* |cut --delimiter=: -f2 |sed s#inf#64#g > eval/temp/d_apr.txt
zsh: no matches found: Aperture.*
zsh: no matches found: s#inf#64#g
1 ...@... ~/Bilder/2011 % cat eval/temp/imgdatap.txt  |grep Focal.*    |cut --delimiter=: -f2 > eval/temp/d_focal.txt 
zsh: no matches found: Focal.*
zsh: die Datei existiert bereits: eval/temp/d_focal.txt
1 ...@... ~/Bilder/2011 % cat eval/temp/imgdatap.txt  |grep Focal*    |cut --delimiter=: -f2 >| eval/temp/d_focal.txt 
zsh: no matches found: Focal*
...@... ~/Bilder/2011 % cat eval/temp/imgdatap.txt  |grep Focal    |cut --delimiter=: -f2 >| eval/temp/d_focal.txt
 
Du musst die Sonderzeichen quoten, sonst werden sie von der Shell interpretiert. Ausserdem ist das ein Kandidat fuer den useless use of cat Award. Also statt:


cat eval/temp/imgdatap.txt |grep Aperture.* |cut --delimiter=: -f2 |sed s#inf#64#g > eval/temp/d_apr.txt

grep 'Aperture.*' <eval/temp/imgdatap.txt |cut --delimiter=: -f2 |sed 's#inf#64#g' > eval/temp/d_apr.txt

Mit awk oder perl koennte man das sicher auch noch eleganter loesen
 
vielleicht kommen wir ja so langsam an dem punkt wo es schiefläuft :-)
-
ich hab das skript erstmal angepasst, bleibt erstmal alles so wie es war.
-
wenn ich die einzelnen zeilen ausführe funktionieren diese aber gut.
also skript ausgeführt und im eval und im eval/temp geschaut, wieder alle dateien leer!
-
jetzt bin ich mal die einzelnen zeilen nach und nach durchgegangen, komischerweise werden dann die dateien korrekt geschrieben und enthalten alle schöne werte.
ich hab dies aber erstmal nur für die expsoure werte gemacht und bis an diesen punkt:

Code:
awk '{printf $2"|"'}  eval/exposure_stats.txt | sed 's/.\{1\}$//' >> eval/temp/exposure_url.txt
zsh: parse error near `}'
die exposure_stats.txt enthält zu diesem zeitpunkt diese werte:
Code:
1 0.00313
1 0.00400
2 0.00625
2 0.00800
1 0.01667

und die eval/temp/exposure_url.txt enthält dieses:
Code:
http://chart.apis.google.com/chart?chs=700x425&chds=0,
&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0,
&cht=bvs&chd=t:
&chl=
2
&chbh=r,0.5,1.5&chxt=x,y&chxr=1,0,
2
&cht=bvs&chd=t:
1,1,2,2,1&chl=
bei der eval/temp/exposure_url.txt stellt sich auch gleich die frage ob die vielen Zeilenumbrüche in einer URL korrekt sind. aber vielleicht ist das ja auch korrekt so.?
 
WERBUNG
Zurück
Oben Unten