ffmpeg чистим видео от шума с помощью fftdnoiz

В начале ноября вышла свежая версия FFmpeg 4.1, названная в честь великого ученого древности al-Khwarizmi (Аль-Хорезми), математика, астронома, географа и историка.

Изменений в версии 4.1 было сделано очень много. Как всегда добавили поддержку очередных кодеков, список фильтров расширился 18-ю фильтрами и как водится пофиксили баги. Но среди всего этого изобилия меня заинтересовал один фильтр. А именно fftdnoiz filter. Фильтр позволяющий очистить видео от шума.

С этим фильтром я сталкивался и раньше, в рамках Avisynth (там он был представлен, как отдельный плагин). И мне он понравился тем, что в отличии от других denois’еров fft работает очень деликатно, не искажая исходное изображение и не добавляет подергиваний в видеопоток. В итоге я на нем остановился и пользуюсь только им.

А теперь fft есть и в ffmpeg, не надо выстраивать никаких конвейеров с привлечением дополнительного софта, можно чистить видео от шума непосредственно в момент кодирования.

Fftdnoiz для обработки изображения использует метод быстрого преобразования Фурье (Fast Fourier Transform). Этот метод основан на хитрых алгоритмах, которые позволяют за меньшее число итераций добиваться хороших результатов. Самая главная фича этого фильтра — это то, что даже при сильных настройках он дает хорошую картинку, никакого «пластика» и «мыла». Отфильтрованное изображение максимально приближено к оригиналу.

Опции:

  • sigma — уровень шумодава. По умолчанию — 1. Варьируется от 0 до 30.
  • amount — меняется от 0 до 1. 0  — шум не чистится вообще, 1 — чистим весь шум.
  • block — устанавливает размер блока.По умолчанию 4. Может быть 3, 4, 5 или 6. Реальный размер блока в алгоритме шумопнижения будет 2 в степени block, то есть по умолчанию 2^4 = 16.
  • overlap — перекрытие блоков. По умолчанию 0.5. Изменяется от 0.2 до 0.8.
  • prev — анализирует предыдущие кадры. По умолчанию — 0. Принимает значения либо 0, либо 1.
  • next — анализирует последующие кадры. По умолчанию — 0. Принимает значения либо 0, либо 1.
  • planes — каналы для шумопонижения. По умолчанию от шума чистятся все каналы кроме alpha.

Приведу пример использования фильтра fftdnoiz при кодировании видео из avi в mp4. Все настройки фильтра «выкручены» на максимум:

./ffmpeg -i DSCF2291.AVI -vf fftdnoiz=sigma=24:amount=1:block=6:overlap=0.8:prev=1:next=1 -c:v libx264 -crf 0 -preset veryslow DSCF2291.mp4

Ниже оригинальный и «почищенный» кадры. Как видно из картинки, даже на максимальных настройках fftdnoiz работает очень деликатно:



Наведите мышку, чтобы увидеть «почищенный» кадр.


Исходное видео:

Почищенное видео:

You May Also Like