Seskupování fotek z více fotoaparátů

Často se stává, že z nějaké akce či výletu člověk donese digitální fotografie z různých přístrojů. Něco se nafotí na mobil nebo příruční kompakt, něco na zrcadlovku a další fotky dodají kamarádi. Co složka, to jiné pojmenování souborů. Co s tím, aby byly fotky chronologicky seřazené nejlépe pěkně v jedné složce?

Jediným použitelným klíčem, podle kterého seřadit množství různě pojmenovaných jpegů, je čas jejich pořízení. Ten je (včetně dalších jiných metadat) uložen v Exif hlavičce každého obrázku. Naším cílem tedy bude použít tento údaj pro nové názvy souborů, aby byly ve výsledku řazeny ve správném pořadí. Bohužel, velmi často to mívá jeden podstatný zádrhel. Ne každý má ve fotoaparátu přesně nastavené hodiny, v nejhorším případě (například po vybití baterií) může být čas zcela vyresetován a fotky jsou označené i několik stovek dní vedle. Takže nám nezbývá nic jiného, nežli čas před zmergováním fotografií u každé sady zkontrolovat a opravit. Mít v pořádku čas v Exifu se bude hodit i v jiných případech, například kvůli software pro správu alb. A pro dodatečné otagování polohy podle zaznamenané stopy z GPS je přesný čas pořízení snímku přímo nutností.

Naštěstí v Linuxu na toto všechno existuje šikovná utilita jhead, která zvládá manipulaci s daty v Exif hlavičce JPG i přejmenování souborů.
Upozorňuji, že se jedná o linuxový program používaný v příkazové řádce, takže kdo si s tímto nerozumí, má asi smůlu. Rovnež návod, jak si ve své distribuci nainstalovat program, není předmětem tohoto článku.

Korekce časových údajů

Abych pravdu řekl, vůbec se netrápím tím, abych doma kontroloval fotoaparáty a šteloval na nich přesné nastavení hodin. Stačí mi, když vykazují jen "informativní" čas. Pozdější korekce pomocí jhead mi přijde pohodlnější a výsledek je přesnější. Dělám to tak, že na výletě, nebo klidně až když se vrátím domů, vyfotím všemi aparáty display nějakých hodin. Samozřejmě nejlépe údaj včetně vteřin. Až přijde na řadu stahování fotek z karet, najdu si v každém adresáři tuto referenční fotku. Vyfocený správný údaj a údaj uložený ve fotce už dávají dostatek informací, o jaký offset posunout čas u všech fotek v sadě. Pro účely již zmíněného doplnění geotagů je dobré zachytit snímek se zcela přesným časem, třeba hodiny řízené rádiem nebo synchronizované ze sítě či družic (navigace, mobil, PC, ...).

Postup je docela jednoduchý. Příklad:
Dejme tomu, že naše referenční fotka se jmenuje IMG9999.JPG a je na ní toto:

IMG9999.JPG

V příkazové řádce si zavoláním jhead IMG9999.JPG necháme zobrazit informace o fotce. Dostaneme něco takového:

File name    : IMG9999.JPG
File size    : 10485760 bytes
File date    : 2012:08:28 9:04:02
Camera make  : MEOPTA PREROV N.P.
Camera model : FLEXARET VIIA
Date/Time    : 2012:08:28 9:04:02
Resolution   : 6000 x 6000
Flash used   : No
Focal length : 80.0mm  (35mm equivalent: 50mm)
Exposure time: 0.0100 s  (1/100)
Aperture     : f/11.0
ISO equiv.   : 100

Zajímá nás údaj Date/Time. Je vidět, že tento fotoaparát používal údaj asi o 10 minut zpožděný, takže to spravíme. Použijeme k tomu parametr -da a aplikujeme na všechny fotky v aktuálním adresáři: jhead -da2012:08:28/9:04:02-2012:08:28/9:14:37 *.JPG V parametru první časový údaj je ten správný, za ním za pomlčkou je čas který je špatný. O stejný offset se posune čas u všech souborů odpovídající masce v posledním parametru.

Když si posléze zkontrolujeme metadata obrázků, Date/Time údaj by měl být opravený, ale vadou na kráze zůstává File date. To není údaj z exifu, ale informace z filesystému - čas vytvoření souboru. Tak proč ho neopravit taky: jhead -ft *.JPG Tímto jednoduše přenastavíme timestampy všech souborů podle informace z Exifu.

Pokud máme fotky se špatným časem a nemáme ani nic jako referenční fotku, nezbyde nám, nežli improvizovat. Často se na fotkách podaří nalézt nějaký hint, jako například hodiny na věži či nádraží. Přinejhorším si vzpomenout v kolik jsem kde byl podle výpisů hovorů na mobilu, podle nevyhozené účtenky, záznamu trasy v navigaci, atd...

Přejmenování souborů

Když už máme u fotky se správným časem, nic nebrání zavolat parametr -nf, který provede přejmenování souborů s využitím informací z Exif hlavičky. Pomocí formátovaného řetězce můžeme definovat nové jméno, včetně pořadí jednotlivých časových údajů. Protože chceme řadit, musíme dosáhnout toho, aby rok měl v názvu větší váhu než měsíc, atd... až po vteřiny které budou na konci.
Například zadáním jhead -nftatry_%Y%m%d-%H%M%S_fotak *JPG docílíme následujícího přejmenování:

IMG9997.JPG --> tatry_20120827-201609_fotak.jpg
IMG9998.JPG --> tatry_20120827-201844_fotak.jpg
IMG9999.JPG --> tatry_20120828-091437_fotak.jpg

Stejným způsobem přejmenujeme soubory i v ostatních sadách. Nakonec všechny fotky můžeme přesunout do jednoho adresáře a výsledek bude vypadat nějak takto:

tatry_20120827-201609_fotak.jpg
tatry_20120827-201725_mobil.jpg
tatry_20120827-201736_mobil.jpg
tatry_20120827-201844_fotak.jpg
tatry_20120827-201853_mobil.jpg

Jhead má mnoho dalších užitečných funkcí, vše je dobře popsáno v jeho mauálové stránce.


Václav Vinklát 29.8.2012

TOPlist