Использование FFmpeg для генерации миниатюр графических файлов

#12 Merged at 0225b5f
Repository
Mithgol
Branch
ffmpeg-thumbs
Repository
Therapont
Branch
public
Author
  1. Mithgol the Webmaster
Reviewers
Description

Изменены комментарии в коде __config-sample.php и добавлен код в файле posts.php для поддержки употребления FFmpeg в качестве генератора миниатюр для графических файлов.

Идея такого употребления первоначально высказана в реплике https://nullnyan.net/b/thread/20928#P22458 и по замыслу автора реплики https://nullnyan.net/b/thread/20928#P22472 обеспечивает ускорение создания миниатюр по сравнению с принятым по умолчанию способом (GD). Кроме роста скорости, обеспечивает также возрастание наблюдаемого качества изображения за счёт возможности употребить фильтр Ланцоша. Так как установка FFmpeg в любом случае планируется (в качестве генератора миниатюр для видеозаписей), то рост скорости и качества достигается к тому же с экономией тех усилий, которых потребовала бы установка ещё и ImageMagick (единственной до сих пор альтернативы для GD) с той же целью.

Предлагаемые изменения ориентируются на первоначальную реализацию https://gitgud.io/devarped/instant-0chan/commit/351c5f0230ec52e2738a589c1ee0fefca08639b8 и превосходят её благодаря нескольким улучшениям.

Во-первых, простое сравнение $imagewidth > $imageheight заменено более сложным, учитывающим теоретическую возможность неравенства значений $new_w и $new_h (возможность, предполагаемую возможностями, имеющимися в конфигурационном файле у Кусабы, хотя и редко реализуемую на практике).

Во-вторых, параметр -quality, вовсе никак не действующий на FFmpeg, заменён указанием -q 1 для JPEG (согласно приведённым по адресу http://www.ffmpeg-archive.org/Create-high-quality-JPEGs-td4669205.html рекомендациям он обеспечивает качество JPEG около 89%); что же касается PNG, то по умолчанию FFmpeg и так ужé применяет для PNG максимальное сжатие.

В-третьих, используемый по умолчанию генератор GIF (создающий «крупнозернистые» результаты благодаря использованию неадаптивной палитры и довольно грубого алгоритма распределения ошибок) заменён на предложенный по адресу http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html двухпроходной алгоритм, на первом шаге подбирающий индивидуальную палитру, более всего подходящую для тех цветов, которые используются пикселами данного конкретного файла, а на втором шаге использующий алгоритм «тонкозернистого» распределения ошибок, предложенный Флойдом и Штейнбергом в 1976 г.

В-четвёртых, наложен фильтр Ланцоша.

В-пятых, исправлена оплошность, суть которой — указание scale= перед кавычками, а не внутри них.

Для работы в режиме $cf['KU_THUMBMETHOD'] = 'ffmpeg' миниатюризатор нуждается в программах «ffprobe» и «ffmpeg» из комплекта FFmpeg.

Во избежание ошибки, по адресу http://410chan.org/dev/res/17662.html#19790 упоминаемой, рекомендуется избегать употребления версии FFmpeg более новой, чем 3.4.2.

Comments (0)