EXIF теги в Linux: зачем нужен EXIF

В различных форматах графических файлов возможность хранить дополнительные сведения, например, время выдержки, значение диафрагмы, время или ещё что-нибудь. Это обеспечивает формат EXIF (Exchangeable Image File Format). В Linux для работы с EXIF данными есть такой мощный пакет утилит, как exiftools, всю полезность которого автор этих строк испытал на себе. Вот, например, потребовалось вам сохранить какие-то пометки о том, где сделан этот снимок - тут-то вам exiftools и пригодится.


Например, выдираем теги из RAW-файла на примере цифровой камеры Canon EOS 400D
exiftool IMG_0383.CR2 :

beast@notebeast:~$ exiftool IMG_0383.CR2
ExifTool Version Number : 6.57
File Name : IMG_0383.CR2
File Size : 8 MB
File Modification Date/Time : 2008:10:22 12:48:10
File Type : CR2
MIME Type : image/x-raw
Image Width : 1936
Image Height : 1288
Bits Per Sample : 8 8 8
Compression : JPEG (old-style)
Make : Canon
Camera Model Name : Canon EOS 400D DIGITAL
Preview Image Start : 79450
Orientation : Horizontal (normal)
Preview Image Length : 68724
X Resolution : 72
Y Resolution : 72
Resolution Unit : inches
Modify Date : 2008:10:15 15:44:26
Exposure Time : 1
F Number : 6.3
Exposure Program : Manual
ISO : 100
Exif Version : 0221
Date/Time Original : 2008:10:15 15:44:26
Create Date : 2008:10:15 15:44:26
Components Configuration :
Shutter Speed Value : 1
Aperture Value : 6.3
Flash : Off
Focal Length : 55.0mm
Macro Mode : Normal
Self-timer : 0
Quality : RAW
Canon Flash Mode : Off
Continuous Drive : Single
Focus Mode : Manual Focus
Canon Image Size : Unknown (-1)
Easy Mode : Manual
Digital Zoom : None
Contrast : Normal
Saturation : Normal
Sharpness : +3
Metering Mode : Center-weighted averaging
Focus Range : Not Known
Canon Exposure Mode : Manual
Long Focal : 55
Short Focal : 18
Focal Units : 1
Max Aperture : 5.6
Min Aperture : 32
Flash Activity : 0
Flash Bits : (none)
Focus Continuous : Unknown (8)
Zoom Source Width : 0
Zoom Target Width : 0
Photo Effect : Off
Color Tone : Normal
Focal Type : Zoom
Focal Plane X Size : 23.04mm
Focal Plane Y Size : 15.37mm
Auto ISO : 100
Base ISO : 100
Measured EV : -6.12
Target Aperture : 6.3
Exposure Compensation : 0
White Balance : Auto
Slow Shutter : None
Shot Number In Continuous Burst : 0
Flash Guide Number : 0
Flash Exposure Compensation : 0
Auto Exposure Bracketing : Off
AEB Bracket Value : 0
Focus Distance Upper : 0.77
Focus Distance Lower : 1
Bulb Duration : 0
Camera Type : EOS Mid-range
Auto Rotate : None
ND Filter : Unknown (-1)
Self-timer 2 : 0
Canon Image Type : Canon EOS 400D DIGITAL
Canon Firmware Version : Firmware 1.0.4
Owner's Name : unknown
Camera Body No. : 0730325266
Set Button Cross Keys Func : Set: Picture Style
Long Exposure Noise Reduction : Off
Flash Sync Speed Av : Auto
Shutter-AE Lock : AF/AE lock
AF Assist Beam : Emits
Exposure Level Increments : 1/3 Stop
Mirror Lockup : Disable
E-TTL II : Evaluative
Shutter Curtain Sync : 1st-curtain sync
Magnified View : Image review and playback
LCD Display At Power On : Display
Canon Model ID : EOS Digital Rebel XTi / 400D / Kiss Digital X
Num AF Points : 9
Canon Image Width : 3888
Canon Image Height : 2592
Canon Image Width As Shot : 3504
Canon Image Height As Shot : 2336
AF Points Used : (none)
Serial Number Format : Format 2
Original Decision Data : 0
File Number : 128-0000
Bracket Mode : Off
Bracket Value : 0
Bracket Shot Number : 0
Noise Reduction : Off
WB Bracket Mode : Off
WB Bracket Value AB : 0
WB Bracket Value GM : 0
Filter Effect : None
Toning Effect : None
Lens Type : EF-S18-55mm f/3.5-5.6
Internal Serial Number : H0885505
Dust Removal Data : (Binary data 1024 bytes, use -b option to extract)
Tone Curve : Standard
Sharpness Frequency : n/a
Sensor Red Level : 0
Sensor Blue Level : 0
White Balance Red : 0
White Balance Blue : 0
Color Temperature : 5200
Picture Style : Standard
Digital Gain : 0
WB Shift AB : 0
WB Shift GM : 0
Sensor Width : 3948
Sensor Height : 2622
Sensor Left Border : 52
Sensor Top Border : 23
Sensor Right Border : 3939
Sensor Bottom Border : 2614
WB RGGB Levels As Shot : 2236 1024 1024 1507
Color Temp As Shot : 5211
WB RGGB Levels Auto : 2236 1024 1024 1507
Color Temp Auto : 5211
WB RGGB Levels Measured : 2236 1024 1024 1507
Color Temp Measured : 5211
WB RGGB Levels Daylight : 2236 1024 1024 1507
Color Temp Daylight : 5200
WB RGGB Levels Shade : 2615 1024 1024 1253
Color Temp Shade : 7000
WB RGGB Levels Cloudy : 2427 1024 1024 1367
Color Temp Cloudy : 6000
WB RGGB Levels Tungsten : 1589 1086 1086 2509
Color Temp Tungsten : 3200
WB RGGB Levels Fluorescent : 1889 1034 1034 2126
Color Temp Fluorescent : 3769
WB RGGB Levels Kelvin : 2236 1024 1024 1507
Color Temp Kelvin : 5211
WB RGGB Levels Flash : 2479 1024 1024 1339
Color Temp Flash : 6262
WB RGGB Levels PC1 : 512 1024 1024 512
Color Temp PC1 : 4255
WB RGGB Levels PC2 : 512 1024 1024 512
Color Temp PC2 : 4255
WB RGGB Levels PC3 : 512 1024 1024 512
Color Temp PC3 : 4255
WB RGGB Levels Custom : 1201 1133 1133 5999
Color Temp Custom : 2400
User Comment :
Flashpix Version : 0100
Color Space : sRGB
Exif Image Width : 3888
Exif Image Length : 2592
Interoperability Index : R98 - DCF basic file (sRGB)
Interoperability Version : 0100
Focal Plane X Resolution : 4433.295
Focal Plane Y Resolution : 4453.608
Focal Plane Resolution Unit : inches
Custom Rendered : Normal
Exposure Mode : Manual
Scene Capture Type : Standard
Thumbnail Offset : 78336
Thumbnail Length : 1114
Photometric Interpretation : RGB
Samples Per Pixel : 3
Rows Per Strip : 256
Planar Configuration : Chunky
Strip Offsets : 443086
Strip Byte Counts : 7543495
Aperture : 6.3
Drive Mode : Single-frame shooting
Flash : Off
Image Size : 1936x1288
Lens : 18.0 - 55.0mm
Preview Image : (Binary data 68724 bytes, use -b option to extract)
Scale Factor To 35mm Equivalent : 1.6
Shooting Mode : Manual
Shutter Speed : 1
Thumbnail Image : (Binary data 1114 bytes, use -b option to extract)
WB RGGB Levels : 2236 1024 1024 1507
Blue Balance : 1.47168
Circle Of Confusion : 0.019 mm
Focal Length : 55.0mm (35mm equivalent: 85.9mm)
Hyperfocal Distance : 24.97 m
Lens : 18.0 - 55.0mm (35mm equivalent: 28.1 - 85.9mm)
Light Value : 5.3
Red Balance : 2.183594

Забавно, да, а что ещё можно с EXIF делать? Например, чтобы выцедить из RAW-файла время выдержки, сделать надо вот что:
exiftool -shutterspeed IMG_0383.CR2
Shutter Speed : 1
Для того, чтобы использовать exif-теги, надо запросить список тегов в которые возможна запись. Пишем:
exiftool -listw IMG_0383.CR2

Так, например из кучи тегов мы хотим писать в тег City. Для этого:

$ exiftool -City=Moscow IMG_0383.CR2
1 image files updated
И теперь:

$ exiftool -City IMG_0383.CR2
City : Moscow

Ура, теперь мы в тег City записали, что хотели. Утилита exiftools может не только читать, но и записывать информацию в EXIF-теги. Это может быть полезно и нужно для хранения в RAW-файлах информации о съёмке.


И зачем всё это надо!?
Причины, по которым есть необходимость модифицировать EXIF-данные в RAW-файлах могут быть разные. Вот, например, ув. тов. jetxee хочет в фотографиях хранить геотеги, то есть где фотография была снята.

Мне это потребовалось вот для чего. Результатами моих научных экспериемнтов являются куча RAW-файлов, и в каталоге лежит небольшой файл с условиями эксперимента (что снималось и для чего). Разные не очень технически продвинутые коллеги любят эти файлы копировать и использовать их где-то ещё (типа проверить и посмотреть), а потом говорят: "слушай, вот я тут картинку обработал, и результаты такие и такие - не помнишь, откуда этот файл!?". Хуже дело, если взяли по одному файлу из нескольких разных экспериментов и вот теперь надо разобраться, что откуда взято.

В общем случае экспериментатор при таком вопросе бледнеет и начинает громко говорить плохими словами. Но этого можно не делать: внедрить информацию в сам RAW-файл в какой-нибудь хитрый тэг. Потом так проще отследить файлы.

И теперь, чтобы избавить себя от нервотрёпки, делаем так: находим любой записываемый тег, и пишем туда то, что относится к эксперименту. После этого записываем нужные данные во ВСЕ файлы RAW скопом:
exiftool -City='Moscow Engineering Physics Institute' *.CR2

10 image files updated

С удовлетворением видим:
exiftool -City *.CR2
======== IMG_0383.CR2
City : Moscow Engineering Physics Institute
======== IMG_0384.CR2
City : Moscow Engineering Physics Institute
======== IMG_0385.CR2
City : Moscow Engineering Physics Institute
======== IMG_0386.CR2
City : Moscow Engineering Physics Institute
======== IMG_0387.CR2
City : Moscow Engineering Physics Institute
======== IMG_0388.CR2
City : Moscow Engineering Physics Institute
======== IMG_0389.CR2
City : Moscow Engineering Physics Institute
======== IMG_0390.CR2
City : Moscow Engineering Physics Institute
======== IMG_0391.CR2
City : Moscow Engineering Physics Institute
======== IMG_0392.CR2
City : Moscow Engineering Physics Institute
10 image files read

И всё дела. И уж теперь ваши нерадивые коллеги не введут вас в ступор вопросом: а отуда этот файлик!?

Здесь же, кстати, следует отметить, что EXIF данные можно записывать не только в RAW-файлы, но и в TIFF например. Однако полей для записи в TIFF меньше, хотя их тоже можно использовать.

7 комментариев: |высказаться!| RSS-лента дискуссии.|
Анонимный комментирует...

А имееться ли какая-нить уменьшалка фотографий сохраняющая EXIF?

drakulavich комментирует...

Не знаю, поддерживает ли RAW встроенный XMP. Если - да, можно с помощью того же exiftool писать собственные тэги. Например, exiftool -xmp:where='Moscow Engineering Physics Institute' IMG_0383.CR2

Анонимный комментирует...

Хых. Я не подозревал, что exiftool умеет в RAW файлы писать. Надо будет попробовать со своими NEF такое.

@dnap, Image Magick прекрасно сохраняет теги, если мне не изменяет память. А может и нет. Но есть способ скопировать все мета теги из одного файла в другой.

virens комментирует...

2 dnap комментирует...
А имееться ли какая-нить уменьшалка фотографий сохраняющая EXIF?
ImageMagick должен сохранять. Да и вообще, программы обработки изображений не должны корёжить теги.

2 Dr.AKULAvich комментирует...
Если - да, можно с помощью того же exiftool писать собственные тэги.
Да там полей и без этого хватает. Хотя новые поля делать - это забавно. Я обычно пихаю данные в City. Скрипты проще писать :-)


2 Alexander Artemenko комментирует...
Я не подозревал, что exiftool умеет в RAW файлы писать.
Я тоже :-) А это очень и очень удобно: нет нужды хранить текстовые файлы в текущем каталоге, всё в самом файле есть. Местные Виндовс-пользователи на меня ругаются, правда, но они к моим "штучкам" уже привыкли :-)

Sergey комментирует...

Как мы с тобой одновременно об EXIF написали! :)

2dnap:

И GIMP, и ImageMagick по-умолчанию сохраняют EXIF. EXIF-данные могут быть потеряны, если один из промежуточных файлов, в который сохранялась работа, не подерживает метаданные EXIF (например, файл был сохранён как PPM и опять открыт, или изображение было скопировано через буфер обмена).

Kawaikunee комментирует...

Товарищи, а как насчет возможности вставки изображения с тэгами в PDF? Сохраняются ли они потом, когда их извлечешь обратно? TIFF файлы поддерживают EXIF?

virens комментирует...

2 Сергей комментирует...
Как мы с тобой одновременно об EXIF написали! :)
Это точно! :-)

2 Kawaikunee комментирует...
Товарищи, а как насчет возможности вставки изображения с тэгами в PDF?
Насколько я понимаю, никак.

TIFF файлы поддерживают EXIF?
Да, поддерживают. И на запись, насколько мне известно, тоже. Кстати, спасибо за идею - надо бы и в tiff пихать информацию :-)

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.