Вопрос или проблема
Я использую ffmpeg, чтобы сделать мозаичный тайл сцен с
select=gt(scene\, 0.4),tile=4*10
.
Но это выбирает одноцветные кадры.
Как мне этого избежать?
Есть старая дискуссия по этому поводу в комментариях под этим ответом.
Чтобы избежать скучных изображений, таких как простые черные и белые: генерируйте больше миниатюр, чем вам нужно, сжимайте их в формате jpeg и выбирайте изображения с большим размером файла. Это удивительно хорошо работает само по себе для получения приличных миниатюр.
И здесь.
-vsync 0 добавляется, что в этом случае указывает подавить дублирование.
Ответ или решение
Вопрос: Как исключить кадры с одинаковым цветом в FFmpeg?
При работе с FFmpeg и создании мозаичных тайлов сцен, особенно с использованием фильтра select=gt(scene\, 0.4),tile=4*10
, можно столкнуться с проблемой выбора монохромных или однотонных кадров. Чтобы избежать этого и получить более разнообразные сцены, можно использовать несколько подходов.
1. Устранение однотонных кадров
Одним из способов избежать выбора кадров с одинаковым цветом является использование фильтра для анализа кадров на предмет текстурности или вариации цвета. Если вы хотите отобрать только кадры с более сложными текстурами, вы можете использовать select
в сочетании с фильтром lut
, который поможет в анализе цвета.
Пример команды:
ffmpeg -i input.mp4 -vf "select='gt(scene,0.4)*not(eq(lux,lux))+lt(lux,128)',tile=4x10" -vsync 0 output.mp4
В здесь lux
представляет яркость кадра, а условие not(eq(lux,lux))
позволяет исключить ровные цвета (черный, белый, и пр.).
2. Генерация большего количества кадров
Другой подход — это сгенерировать большее количество кадров, чем вам нужно, и затем выбрать только те, которые имеют более высокий размер файла. Это позволяет избежать слишком простых и однообразных изображений:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4)" -vsync 0 -frames:v 100 -f image2 output_%03d.jpg
Далее, проведите анализ полученных изображений в зависимости от их размера, выбирать только те, которые превышают заданный порог размера.
3. Работать с параметрами сжатия
Использование сжатия JPEG также может помочь избежать однотонных изображений. Сжать с использованием конкретных параметров, чтобы выбрать наиболее интересные изображения:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=320:240" -q:v 5 -vsync 0 output_%03d.jpg
Установив -q:v
с низким значением, вы получите более качественные изображения, позволяющие отфильтровать однотонные кадры по размеру файла.
4. Выборка по яркости
Также возможно использование фильтра по яркости для исключения чересчур темных или светлых кадров:
ffmpeg -i input.mp4 -vf "select='gt(scene,0.4)*lt(lum\,240)*gt(lum\,15)',tile=4x10" -vsync 0 output.mp4
В этом случае lum
представляет яркость, что позволяет вам исключить слишком яркие (близкие к белому) или слишком темные (близкие к черному) кадры.
Заключение
Итак, для исключения однотонных кадров в FFmpeg существует несколько подходов, включая использование фильтров для анализа текстуры и яркости, а также корректировку параметров сжатия и выборки. Важно экспериментировать с различными комбинациями фильтров и параметров, чтобы добиться наилучшего результата. Не забудьте протестировать различные пороги и фильтры, чтобы найти подходящий баланс для вашего конкретного случая использования.