LINUX.ORG.RU

Посоветуйте программу для определения формата файла у изображения и его конвертации

 ,


0

2

Imagemagick не берёт:

identify: Invalid input: No 'ftyp' box (2.102) `image-sitting-risks-730.avif' @ error/heic.c/IsHEIFSuccess/138.

хотя в браузере всё нормально открывается, через file:///; а больше не знаю, что попробовать. Непонятно, то ли расширение у файла указано неверно, то ли повреждён, то ли просто формат не распознается.

Файл для тестов тут.

Желательно программу опенсурсную и без гуя. Но можно и с гуем, если это просмотрщик таких файлов.

P.S. Другие авифки, которые у себя нашёл, identify нормально распознает и конвертирует, а вот с этой-то что?

★★★

Последнее исправление: mydibyje (всего исправлений: 4)

Для определения

$ mediainfo image-sitting-risks-730.avif 
General
Complete name                            : image-sitting-risks-730.avif
Format                                   : avif
Codec ID                                 : avif
File size                                : 300 KiB

Image #1
ID                                       : 1
Format                                   : av01
Codec ID                                 : av01
Stream size                              : 297 KiB (99%)
Auxilary                                 : 2
Codec configuration box                  : av1C

Image #2
ID                                       : 2
Format                                   : av01
Codec ID                                 : av01
Width                                    : 730 pixels
Height                                   : 1 441 pixels
Stream size                              : 2.92 KiB (1%)
Default                                  : No
Auxilary for                             : 1
Codec configuration box                  : av1C

Но в то же время

$ heif-info image-sitting-risks-730.avif 
MIME type: image/avif
main brand: avif
error reading brands: error reading ftyp box
Could not read HEIF/AVIF file: Invalid input: No 'ftyp' box

А в каком браузере (и какой версии) нормально открывается?

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 2)
Ответ на: комментарий от greenman

Спасибо, mediainfo помогло. Ещё бы сконвертировать в PNG могло или ошибку исправить…

В гуглохроме 87-ом нормально пашет. В свежих нет. 😁

Ммм… Видно разницу с другими моими авифками, что нормально открываются, те выглядят так:

Complete name                            : desk_126745-1193.avif
Format                                   : avif
Codec ID                                 : avif (avif/mif1/miaf)
File size                                : 133 KiB

Image
ID                                       : 1
Format                                   : av01
Codec ID                                 : av01
Width                                    : 1 060 pixels
Height                                   : 773 pixels
Color space                              : YUV
Bit depth                                : 8 bits
Stream size                              : 133 KiB (100%)
Matrix coefficients                      : BT.601
Color range                              : Full
Codec configuration box                  : av1C
mydibyje ★★★
() автор топика
Последнее исправление: mydibyje (всего исправлений: 1)
Ответ на: комментарий от mydibyje

Попробуй скачать из браузера, хз раз у тебя показывает может скачается внутренне исправленное представление браузера, а не просто то что браузер открыл, ну, а вдруг. Ну так как файл явно битый или кривой делать скриншот стандартными утилитами или браузерными этой картинки.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Да сделал я скриншот из браузера, иначе бы не носился с этой картинкой, потому что теперь знаю что она без видимых артефактов, но хочется найти программу которая понимает такие авифки и игнорирует всякие блоатные спековые поля, которых в этой авифке нет и на отсутствие которых ругаются современные «правильные» конвертеры.

Браузер не исправляет картинку, он просто при показе игнорирует такие варнинги из валидатора https://gpac.github.io/ComplianceWarden-wasm/avif.html п:

Compliance Warden, version v33-master-rev0-g9fe2057
+--------------------------------------+
| avif validation |
+--------------------------------------+

Specification description: AVIF v1.0.0, 19 February 2019
https://aomediacodec.github.io/av1-avif/

[avif][Rule #7] Error: [ItemId=1] The values of the AV1CodecConfigurationBox shall match
the Sequence Header OBU in the AV1 Image Item Data:
AV1CodecConfigurationBox:
seq_profile=0
seq_level_idx_0=0
seq_tier_0=0
high_bitdepth=0
twelve_bit=0
mono_chrome=0
chroma_subsampling_x=0
chroma_subsampling_y=0
chroma_sample_position=0
Sequence Header OBU in the AV1 Image Item Data:
seq_profile=1
seq_level_idx_0=31
seq_tier_0=0
high_bitdepth=0
twelve_bit=0
mono_chrome=0
chroma_subsampling_x=0
chroma_subsampling_y=0
chroma_sample_position=0

[avif][Rule #7] Error: [ItemId=2] The values of the AV1CodecConfigurationBox shall match
the Sequence Header OBU in the AV1 Image Item Data:
AV1CodecConfigurationBox:
seq_profile=0
seq_level_idx_0=0
seq_tier_0=0
high_bitdepth=0
twelve_bit=0
mono_chrome=0
chroma_subsampling_x=1
chroma_subsampling_y=0
chroma_sample_position=0
Sequence Header OBU in the AV1 Image Item Data:
seq_profile=0
seq_level_idx_0=31
seq_tier_0=0
high_bitdepth=0
twelve_bit=0
mono_chrome=1
chroma_subsampling_x=1
chroma_subsampling_y=1
chroma_sample_position=0

[avif][Rule #9] Error: Property "av1C" shall be marked as essential (item_ID=1)
[avif][Rule #9] Error: Property "av1C" shall be marked as essential (item_ID=2)

========================================
[avif] 4 error(s), 0 warning(s).
========================================

===== Involved rules descriptions:

[avif][Rule #7] Section 2.2.1
The values of the fields in the AV1CodecConfigurationBox shall match those of the
Sequence Header OBU in the AV1 Image Item Data.

[avif][Rule #9] Section 2.2.1
AV1 Item Configuration Property [...] shall be marked as essential.

+--------------------------------------+
| miaf validation |
+--------------------------------------+

Specification description: MIAF (Multi-Image Application Format)
MPEG-A part 22 - ISO/IEC 23000-22 - w18260 FDIS - Jan 2019

[miaf][Rule #1] Error: The HandlerBox shall be the first contained box within the MetaBox
[miaf][Rule #2] Error: compatible_brands list shall contain 'miaf' (not found) and 'mif1' (not found)
[miaf][Rule #4] Error: 'hdlr' not found in MetaBox
[miaf][Rule #10] Error: [ItemID=2] MIAF missing Image spatial extents property
[miaf][Rule #26] Error: Found no 'pixi' associated for 2 displayable (not hidden) images (ItemIds={1,2})

========================================
[miaf] 5 error(s), 0 warning(s).
========================================

===== Involved rules descriptions:

[miaf][Rule #1] Section 7.2.1.1
The HandlerBox shall be the first contained box within the MetaBox.

[miaf][Rule #2] Section 7.2.1.2
The FileTypeBox shall contain, in the compatible_brands list,
the following (in any order): 'mif1' (specified in ISO/IEC 23008-12)
[...]
Files conforming to the general restrictions in clause 7 shall include
the brand 'miaf' in the compatible_brands in the FileTypeBox.
/!\ this rule doesn't look for 'mif1' and 'miaf' brands rule-conformance:
if a brand is absent then its conformance rules won't be checked here /!\

[miaf][Rule #4] Section 7.2.1.5
The handler type for the MetaBox shall be 'pict'.

[miaf][Rule #10] Section 7.3.6.3
Every image item shall be associated with a Image spatial extents property

[miaf][Rule #26] Section 7.3.6.6
The pixel information property shall be associated with every image that is
displayable (not hidden)

+--------------------------------------+
| heif validation |
+--------------------------------------+

Specification description: HEIF - ISO/IEC 23008-12 - 2nd Edition N18310

[heif][Rule #0] Error: 'mif1' brand not found in 'ftyp' box
[heif][Rule #3] Error: 'hdlr' not found in MetaBox
[heif][Rule #11] Error: Item ID=2: missing Image spatial extents property
[heif][Rule #27] Error: Wrong arity for boxes { hdlr } in parents { meta }: expected in range [1-1], found 0

========================================
[heif] 4 error(s), 0 warning(s).
========================================

===== Involved rules descriptions:

[heif][Rule #0] Section 10.2.1.1
Files shall contain the brand 'mif1' in the compatible brands array of the
FileTypeBox.
/!\ this rule doesn't look for 'mif1' brands rule-conformance:
if a brand is absent then its conformance rules won't be checked here /!\

[heif][Rule #3] Section 6.2
The handler type for the MetaBox shall be 'pict'.

[heif][Rule #11] Section 6.5.3.1
Every image item shall be associated with one [image spatial extents property],
prior to the association of all transformative properties.

[heif][Rule #27] Section 9.3.1.1Box structure and arity for boxes defined in HEIF
This is rather a safety check than a formal rule.

+--------------------------------------+
| isobmff validation |
+--------------------------------------+

Specification description: ISO Base Media File Format
MPEG-4 part 12 - ISO/IEC 14496-12 - m17277 (6th+FDAM1+FDAM2+COR1-R4)

[isobmff][Rule #0] Warning: The major_brand "avif" should be repeated in the compatible_brands list
[isobmff][Rule #11] Error: Wrong arity for boxes { hdlr } in parents { meta }: expected in range [1-1], found 0

========================================
[isobmff] 1 error(s), 1 warning(s).
========================================

===== Involved rules descriptions:

[isobmff][Rule #0] Section 4.3.1: the major_brand should be repeated in the compatible_brands list

[isobmff][Rule #11] Table 1: box structure and arity
This is rather a safety check than a formal rule.
mydibyje ★★★
() автор топика
Последнее исправление: mydibyje (всего исправлений: 2)
Ответ на: комментарий от mydibyje

Импосибле, форматов туева хера, просто игнорировать поля нельзя, они разные, от некоторых игноров может и софт упасть потом обрабатывающий финальные битмапы извлечённые, глубина не та, разрешение не то, цветовая таблица не та и тд. Что уже говорить до недавнего времени TGA древний как мир и простой как палка формат воспринимался по разному в GIMP и Krita (перекрётно не открывали друг у друга TGAшки) спасибо @AP что передал мои бомбалейло по этому поводу куда надо.

Ну вот взять к примеру тот же TGA там V1 и V2 отличается с виду только подвалом, то есть если в конце файла в N байт есть волшебное слово то это формат V2. Суть улавливаешь? Например твой софт понимает только V1 и он этот подвал не чекает и он попадает в изображение в виде мусора. Ты такой, а тьфуу! Взял и этот подвал и отрезал и твоя программа упала или показала кашу, казалось бы а почиму! А потому что и там и там RLE кодирование только в V1 или V2 запрещает (или наоборот) кодировать длиннее 1 строки пикселей, а V2 разрешает и всё.

Я тут сейчас в моменте наврал, но не скажу где, пусть будет наглядно просто, суть в том что неверные метаданные == неверная интерпретация и обработка данных, а там уже до уязвимостей, сигфолтов и прочего рукой подать. =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Импосибле, форматов туева хера

Я, кстати, отдельно от этого очешуеваю, глядя в гит лог гимпа, потому что недели не прошло с последнего релиза, а они уже накодерастили поддержку вот этого ненужно: https://tools.suckless.org/farbfeld/.

Куда народ эти форматы изобретает – я ХЗ. Жрут они их что ли?

AP ★★★★★
()
Ответ на: комментарий от AP

farbfeld

Согласен, ещё одно ненужно, вернее это уже есть, чем оно отличается от того же TGA? Ну в заголовок 28 байт vs 16. Ой велика ли разница, а дальше идёт тупо битмап как у всех лол. Laslo Hunhold тупо придумал в начало данных картинки записать ширину и высоту лол и всё. И это новый формат?

Я тоже так могу, такое ощущение что подобное придумывают чисто для пиара. TOML конфиг из той же оперы, ini переизобрели и всё.

Опять же тот же, а по форматам которым 100500 лет и которые широчайше распространены и важны жопа, конечно чё бы примитивщину которую используют три калеки то не заимплементить!

Можно вообще вместо всех этих псевдоворматов сделать форму загрузки изображения просто как шаблон изображения где ты указываешь некий велосипед и битовую шапку мол на таком байте*N ширина, а тут высота, а тут RLE есть иди нету, а тут цветовая таблица может быть или нету, а дальше данные идут тупо. И так без всяких имплементаций спец форматов отличающихся парой байтов заголовка и авторами форматов сам пользователь может просто указать мол у такого то вот расширения вот такие вот поля в начале, а дальше данные и всююооо.

Вэрнёмся к реальности, давече мол вот я, как есть стою, и уже неделю у меня не получается из текстурного атласа красиво разукрашивать терреин, ну атрефакты из за LOD BIAS текстур, ну я такой пердолюсь, пердолюсь понимаю что я дебил ибо у меня не получается, неврено вычисляю мип-памы и всё рябит или мылит, ну никак, уже руки опустил и полез в интернеты глядеть как люди делают, а хочется ведь всё самому и не подглядывать и не списывать (заберу вперед и скажу что принял волевое решение поднять версию шейдера с 120 на 130 реализовать TEXTURE_2D_ARRAY и загружать тайловую карту в него тем самым снизив скорость и полностью избавившись от жирных шейдеров с тоннами расчётов UV и градиентов смешивания линейной интерполяции и 32 пиксельные бордеры убрал повысив качество текстур) ну так вот, вперёд я забежал, а тогда я хотел визуально как деды аля printf отдебажить mip-map расчёты, ну и я такой думаю в DDS текстурах можно хранить готовые миппамы, GIMP умеет при экспорте их генерировать при сохранении, а дельше магия, есть взять текстуру сохраниь как DDS с нужным DXT1/2/3 и выбрать генерирование мипов то всё ок, но если потом открыть этот же DDS где гимп вежливо предложит загрузить уже имеющиеся миппамы потом по моей идее дебага я вручную раскрашиваю мипы в разные цвета (для того что бы когда видеокарта выбирает нужный мип для отрисовки я видел на сцене где какой мип по тому какой у него цвет) ну так вот разукрасил я мипы, сохраняю значит и ставлю галочку, мол оставь всё как есть, мипы сохрани те что уже есть просто перезапиши файл и всё гимп мне, ой ошибка!!!!!

Вот после этого момента, когда я уже и так на нервах был и блин мне даже визуально по получается мипы посмотреть наглядно в 3д сцене я окончательно взорвался, пошёл в час ночи бахнул кофя с пряником, сел и трясущщимися руками вбил в шейдер

-#version 120
+#version 130

+#ifdef GL_ARB_texture_query_lod
+    #extension GL_ARB_texture_query_lod : enable
+#endif

+#ifdef  GL_EXT_texture_array
+    #extension GL_EXT_texture_array : enable
+#endif

И полез в код делать из квадратного изображения с тайлами вертикальное для загрузки напрямую в массив текстур через glTexImage3D(GL_TEXTURE_2D_ARRAY,...)

Знаешь как тяжко было, жесть! И до сих пор тяжко ведь я ниже в коде делаю #ifdef и если вдруг человек с OpenGL2.1 не сможет в шейдере притянуть эти расширения у меня всё упадёт, а что-бы не упало нужно в #else до #endif дописать то самое с чем я мучался, а я нимагуууу в DDS мип уровни цветиками залить ААААААААААААААААААААААААААААААААААААААААААААААААААААААА!!!! ПАМАГИТЯЯЯЯЯ.

И (офтоп для душеньки) это ещё не всё у меня фундаментальная претензия к хроносу и всем его поднагодным выпускающим стандарты мол какого фига textureGrad для вычисления правильных гадиентов между суб изображениями в текстуре с тайлами есть только в шейдерах 130 версии там дже где появились массивы текстур когда в 120 где все пологовно использовали тестурные атласы это решалось через жопу!!!! Хотя атласы были первостепенно важнымии и 20 лет назад и сейчас в суперсовременных играх с динамической подгрузкой всего и вся в атласы, чё за бредятина!!! Всё вверх тормашками.

Выдыхаю.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)