jpg: exif adatokból fájlnév [megoldva]

Sziasztok.

Szeretnék néhány száz képből, melyek különböző fényképezőgépekből születtek, valami áttekinthetőbbet alkotni.
Azt találtam ki, hogy a fájl neve a dátum legyen, utóneve meg az eredeti, fényképezőgép-adta név. Így megmarad az, hogy miből lett, és azonnal látszik, mikori.
#!/bin/bash

#datum szerinti atnevezes
#exiv2 -r'%Y%m%d_%H%M%S_:basename:' rename ./*.JPG
# ezt elvetettem, pedig a basename rendesen kijön

#szerzoi jogok hozzaadasa
exiftool -copyright="xy 2016, All right reserved" \
-author="XYZ" \
-d %y%m%d_%H%M%S%%c_:basename:.%%e "-FileName<CreateDate" ./*.JPG
# most itt meg a :basename: helyében kellene az eredetinek kerülnie, de tanácstalan vagyok.

exit 0

Kérdés: exiftoolnál hogyan hivatkozom a képfájl nevére?
Pl. "kep1.jpg" esetében a "kep1" stringre?

Megjegyzés: eredeti témanyitó bejegyzésemet már tudom módosítani. (kösz, trey)

Hozzászólások

Sziasztok.

Szeretnék néhány száz képből, melyek különböző fényképezőgépekből születtek, valami áttekinthetőbbet alkotni.
Azt találtam ki, hogy a fájl neve a dátum legyen, utóneve meg az eredeti, fényképezőgép-adta név. Így megmarad az, hogy miből lett, és azonnal látszik, mikori.


#!/bin/bash

#datum szerinti atnevezes
#exiv2 -r'%Y%m%d_%H%M%S_:basename:' rename ./*.JPG
# ezt elvetettem, pedig a basename rendesen kijön

#szerzoi jogok hozzaadasa
exiftool -copyright="xy 2016, All right reserved" \
         -author="XYZ" \
         -d %y%m%d_%H%M%S%%c_:basename:.%%e "-FileName<CreateDate" ./*.JPG
# most itt meg a :basename: helyében kellene az eredetinek kerülnie, de tanácstalan vagyok.

exit 0

Kérdés: exiftoolnál hogyan hivatkozom a képfájl nevére?
Pl. "kep1.jpg" esetében a "kep1" stringre?

Megjegyzés: eredeti témanyitó bejegyzésemet nem tudom módosítani.

[/code]

Zárd le a code taget.

egyébként:


basename kep1.jpg .jpg

--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!

off

Megszűnt a lehetősége 7 éves tagság alatt, mert voltak, akik nem túl gerinces módon törölték saját témájukat, beszántva ezzel értékes hozzászólásokat. Tették ezt azért, mert önérzetesek, szégyellték a kérdést, ha egyszerű volt a válasz. A baj ezzel csak az, hogy akik válaszoltak, azok ideje is ment a levesbe, illetve a közönség nem tanulhatott az esetből. Így a törlés, szerkesztés lehetősége megszűnt. Blogban megmaradt.

on

Nem értem. Miért az exif-ből kell neked a filenév, amikor azt a filerendszer tárolja? A filenevet tudod, hiszen azt adod át paraméterül annak a programnak, amely kiszedi az exif infókat a kép file-ból.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Azért, mert ha az exiftoolnak *.JPG-vel adom meg a fájlokat a paraméteres indítással, képtelen vagyok $valami-vel átadni neki az éppen aktuális fájlra vonatkozó fájlnév-töredéket:


basename="_teszt" #nem jo ez igy.
exiftool -copyright="All right reserved" \
-author="bzs" \
-d %y%m%d_%H%M%S%%c$basename.%%le "-FileName < CreateDate" ./*.JPG

Az exiv2-nél rendben ment:
exiv2 -r'%Y%m%d_%H%M%S_:basename:' rename ./*.JPG
Az eredeti fájlnév elejére berakta ez a dátumot az expozíció időponTYával'. Ezt nem tudom megcsinálni exiftoollal.

Tehát nem tudod használni a bash-t? A filenév egy string. Arra meg Linuxban számtalan megoldás van, hogyan dolgozz fel egy szöveget: tr, sed, awk, cut, paste, bash. Nézd csak, „kiterjesztés” - de utálom ezt a szót, csak a filenév része - levágása:

a=valami.akarmi.JPG; echo "${a%.*}"
valami.akarmi

Ehhez hozzáfűzhetsz akár kisbetűkkel egy .jpg-t, ha úgy esik jól. Az mv -f parancsnak átadva meg át is van nevezve. De persze van rename parancs is, amelynek legalább 3 paramétere van: miről mire mit.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Köszönöm. De mint mondtam, nem bash odakinn, hanem exiftool paraméterek belül.
Amúgy rájöttem ösztönből, ezzel lehet fájnévre hivatkozni:
%%f

Azaz a sorom így hangzik:


for pictures in ./*{.JPG,.JPEG,.PNG}
do
echo "Working on "$pictures" ..."
exiftool -overwrite_original \
-copyright="All right reserved" \
-author="bzs" \
-d %y%m%d_%H%M%S%%c_%%f.%%le "-FileName<CreateDate" $pictures
done
# jol lathato a %%f. Ezt kerestem.

Nekem csak az nem világos, miért kell az exiftool eszközével megcsinálni feltétlenül, tekintve, hogy a shellel is tudsz stringet helyettesíteni, amelyet már készen adhatsz az exiftool-nak, de lehetett volna úgy is, hogy nem röptében írod felül a file-t - áramszünet esetén kellemetlen -, hanem kiírod egy általad bármilyen jól kitalált nevű file-ba, amelyet a shellel állítasz össze, majd a régit, tehát az input file-t törlöd.

Szerk.: különben a %%f nekem fura, a doksi szerint a %% literális %-ot jelent az strftime-nak, de ezek szerint ezt követően végig megy rajta az exiftool, s ha talál %f-et, oda filenevet helyettesít. Ugye, az strftime-ban a %%-ból % lett.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Áramkimaradás...
Minden amit ezzel tenni fogok, ramdrájvon fog menni. A kész eredményt pedig mentem onnan. Az eredeti meg marad SD kártyán, nagyon jól becsomagolva.

A %%f-en én is meglepődtem.
Bashban is sok mindent lehetett volna, de most az exiftoolt tanulmányoztam. Megérte. :)
Amúgy a hupra a "FileName<CreateDate" stringet élmény volt a code közé beírni. aztán valamivel sikerült.. Alig hagytam szutykot magam után

Ez a titka, hogy ha hosszú kód van a bevezetőben, a preview eltöri, s lezáratlan marad, de csak az. Mármint a preview. A megoldás, hogy forszírozod a preview hosszát, előbb bezárod a code szekciót, utána pedig újranyitod:
<code>
Ez látszik a preview-ban. Meg persze akkor is, ha a témára kattintanak.
</code>
<!--break-->
<code>
Ez meg csak a részletes nézetben, amikor a témára kattintottak.
</code>

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Mivel fentebb megoldódott az exifes dolog, kitaláltam a pixeles vízjelet is:


for name in ./*{.JPG,.PNG}; do
echo "Working on "$name" ..."

convert -auto-orient \
-normalize \
-resize 640x480 "$name" "${name/.jpg/-temp}"
convert -size 1000x40 xc:none -gravity center \
-font Anaktoria -pointsize 18 \
-stroke black -strokewidth 2 -annotate 0 'Photo én © valami.net' \
-background none -shadow 100x3+0+0 +repage \
-stroke none -fill white -annotate 0 'Photo én © valami.net' \
${name/.jpg/-temp} +swap -gravity south -geometry +0-3 \
-composite ${name}_web.jpg
rm -f ${name/.jpg/-temp}
done
# vegul datum szerint konyvtarakba rendezzuk a cuccot:
exiftool -d %Y/%m/%d/ "-Directory<CreateDate" ./*_web.jpg

Szóval itt fent képátméretezés, orientáció-megállapítás, vízjelezés történik, majd könyvtárba rendezés és takarítás.
A fájlnevek rondák, kétszer szerepel a jpg bennük, de ezt már így hagyom