Фильтр showpalette FFmpeg всегда возвращает палитру по умолчанию

Я хочу извлечь палитру файлов GIF с помощью FFmpeg и узнал из документа, что filter "showpalette" может это сделать. Но FFmpeg всегда возвращает одну и ту же палитру по умолчанию вместо пользовательской палитры.

палитра по умолчанию

FFmpeg возвращает одну и ту же палитру даже для двух примеров в pkh Сообщение пользователя .me. Вот мой код:

ffmpeg -i bbb-trans.gif -vf "showpalette" -y a%03d.png
ffmpeg -i bbb-nodither.gif -vf "showpalette" -y b%03d.png

Я использовал неправильную команду? Или это просто баг FFmpeg.


person Vej    schedule 18.03.2017    source источник


Ответы (2)


Как сказано в документации для showpalette, "Этот фильтр подходит только для pal8 кадры пиксельного формата". Ваши тестовые GIF-файлы полностью заполнены RGB.

Вы все еще можете бежать

ffmpeg -i in.gif -vf palettegen=stats_mode=single,scale=30*iw:-1:flags=neighbor a%d.png

Вы по-прежнему можете использовать showpalette для GIF-файлов pal8.

person Gyan    schedule 18.03.2017
comment
Спасибо! Я пробовал с вашей командой, и она возвращает определенные используемые цвета или пользовательскую палитру. А также попытался преобразовать GIF в pal8 ffmpeg -i bbb-nodither.gif -pix_fmt pal8 -y pal8.gif, все еще та же палитра по умолчанию для обоих входных GIF. Ты знаешь почему? - person Vej; 19.03.2017
comment
Если входной GIF-файл является RGB, то в GIF нет встроенной палитры, поэтому пользовательская палитра для отображения отсутствует. Следовательно, он показывает палитру по умолчанию. Если вы конвертируете в pal8 без запуска генератора палитр, он снова будет использовать палитру по умолчанию, так что это то, что будет показано. - person Gyan; 19.03.2017
comment
О двух файлах GIF, о которых я упоминал, примените к ним «xxd», и я смогу увидеть палитру внутри, также получил результат с помощью ImageMagick convert bbb-nodither.gif -format %c -depth 8 histogram:info:- | - person Vej; 21.03.2017
comment
Извините, я не знаю, что делает xxd. С IM похоже, что вы уменьшаете глубину до 8 бит, т.е. 256 цветов, а затем отображаете 256 наиболее часто используемых цветов. Это то же самое, что делает моя команда, чтобы сделать png. - person Gyan; 21.03.2017
comment
xxd — это просто инструмент для вывода двоичных файлов в шестнадцатеричном формате. IM используется для подтверждения того, что то, что я видел через xxd, является реальной палитрой — кстати, странно, что IM возвращает только 254 цвета, а не 256. - person Vej; 22.03.2017
comment
Итак, если я открою GIF в шестнадцатеричном редакторе, я должен увидеть то же самое? Куда мне смотреть, т.е. как определить раздел палитры? - person Gyan; 22.03.2017
comment
Обратитесь к Википедии или спецификация, вы можете найти палитру от 0x00D до 0x30A, 3 байта на цвет, всего 256 цветов. - person Vej; 22.03.2017

Вот мое резюме -

Используйте следующую команду, чтобы получить палитру по умолчанию в ffmpeg:

ffmpeg -v fatal -i input.mp4 -vf "showpalette=30" -y palette-default.png

Эта команда может создать определенную палитру на основе входного файла:

ffmpeg -v fatal -i input.mp4 -vf "palettegen,scale=30*iw:-1:flags=neighbor" -y palette-specific.png
person Vej    schedule 19.05.2017