{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Математик среди биологов: заметки с тегом ffmpeg",
    "_rss_description": "Я немного умею складывать, но от вычитания у меня всегда кружится голова",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/antonlyakh.ru\/blog\/tags\/ffmpeg\/",
    "feed_url": "https:\/\/antonlyakh.ru\/blog\/tags\/ffmpeg\/json\/",
    "icon": false,
    "author": {
        "name": "Антон Лях",
        "url": "https:\/\/antonlyakh.ru\/blog\/",
        "avatar": false
    },
    "items": [
        {
            "id": "464",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/uluchshaem-kachestvo-video-dvizheniya-protist-i-narezaem-ego-na\/",
            "title": "Улучшаем качество видео движения протист и нарезаем его на кадры",
            "content_html": "<p>Это заметка из <a href=\"https:\/\/antonlyakh.ru\/blog\/all\/seriya-zametok-ob-analize-traektoriy-dvizheniya-protist\/\">серии об анализе траектории движения протист<\/a>. В ней поговорим, как улучшить качество видео и нарезать его на кадры.<\/p>\n<p><br\/><br\/><\/p>\n<p>Для фиксации движения протист используем фотоаппарат, соединенный с микроскопом. Несмотря на сильный свет, наш фотоаппарат снимает темное видео с низким контрастом.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/some-frames.png\" width=\"1000\" height=\"333\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Темное низкоконтрастное видео<\/div>\n<\/div>\n<p>Поэтому интересующие нас простейшие незначительно отличаются от фона.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/frame__0001.png\" width=\"800\" height=\"450\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Кадр исходного видео<\/div>\n<\/div>\n<p>Если в графическом редакторе автоматически улучшить контраст, получится хорошо.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/frame__0001----contrast-enhance-example.png\" width=\"799\" height=\"450\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Автоматическое осветление<\/div>\n<\/div>\n<p>Если подправить гистограмму, тоже выйдет неплохо.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/frame__0001----hist-adjustmen-example.png\" width=\"800\" height=\"449\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Коррекция гистограммы улучшает заметность живых объектов и грязи на стекле; грязь мешает, но она неподвижна, поэтому после прослеживания траекторий, мы ее уберем<\/div>\n<\/div>\n<p>Очевидно, что использовать графический редактор для исправления всех кадров — нереально. Поэтому нагрузим работой компьютер: улучшим видео с помощью <a href=\"https:\/\/ffmpeg.org\/\">FFmpeg<\/a>.<\/p>\n<h3>Улучшаем видео с помощью ffmpeg<\/h3>\n<p>Фотоаппарат записыват видео в формате <kbd>mov<\/kbd> (мув). <kbd>FFmpeg<\/kbd> осветлит его и покадрово сохранит в заданном каталоге.<\/p>\n<p><b>Осветляем видео<\/b><br \/>\nСледующая команда читает исходный видеофайл <kbd>input.mov<\/kbd> и исправляет гистограмму каждого кадра так, чтобы черная точка сдвинулась до 64 (0,25~64\/255), а белая — до 120 (0,47~120\/255).<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ffmpeg -i input.mov \r\n-vf &quot;monochrome ,\r\n     colorlevels=romin=0.25:rimax=0.47:gomin=0.25:gimax=0.47:bomin=0.25:bimax=0.47 ,\r\n     smartblur=2.0:-0.7:-3.5:0.65:0.25:2.0&quot;\r\noutput.avi<\/code><\/pre><p>Опция <kbd>-vf<\/kbd> говорит, что мы применяем фильтры, влияющие на качество изображения.<\/p>\n<ul>\n<li>Фильтр <kbd>monochrome<\/kbd> делает видео черно-белым.<\/li>\n<\/ul>\n<ul>\n<li>Фильтр <kbd>colorlevels<\/kbd> выполняет коррекцию гистограммы. Его параметры:\n<ul>\n  <li><kbd>r|g|b|omin<\/kbd> задают уровень красной, зеленой и синей компоненты минимальной (черной) точки,<\/li>\n  <li><kbd>r|g|b|imax<\/kbd> соответственно максимальной (белой);<\/li>\n  <li>значения компонент лежат в диапазоне [0; 1], что соответствует уровням [0; 255].<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Фильтр <kbd>smartblur<\/kbd> немного шарпит границы — делает их более резкими.<\/li>\n<\/ul>\n<p>Команда записывает результат в файл <kbd>output.avi<\/kbd>.<\/p>\n<p>Чтобы фильтры обработали видео, выходной файл должен иметь иной формат, отличный от <abbr>мув<\/abbr>. В данном случае — это <abbr>avi<\/abbr>. Однако при конвертации в <abbr>ави<\/abbr> качество обработанного видео ухудшается. Поэтому поступим по иному.<\/p>\n<p><b>Запишем каждый кадр обработанного видео в отдельный файл<\/b><br \/>\nДля этого заменим последнюю срочку команды на следующую:<\/p>\n<blockquote>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">-compression_algo lzw -pix_fmt rgb24 enhanced\/frame_%04d.tif<\/code><\/pre><p>Она сохранит каждый кадр обработанного видео в сжатом тиф-файле (<kbd>-compression_algo lzw -pix_fmt rgb24<\/kbd>) в каталоге <kbd>enhanced<\/kbd>. Тифы получат префикс <kbd>frame_<\/kbd> и будут пронумерованы четырехзначным номером с ведущими нулями (<kbd>%04d<\/kbd>):<\/p>\n<ul>\n<li><kbd>frame_0001.tif, frame_0002.tif, frame_0003.tif, ...<kbd>.<\/li>\n<\/ul>\n<p>Вся команда выглядит так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ffmpeg -i input.mov \r\n-vf &quot;monochrome ,\r\n     colorlevels=romin=0.25:rimax=0.47:gomin=0.25:gimax=0.47:bomin=0.25:bimax=0.47 ,\r\n     smartblur=1.5:-0.35:-3.5:0.65:0.25:2.0&quot;\r\n-compression_algo lzw -pix_fmt rgb24 enhanced\/frame_%04d.tif<\/code><\/pre><p>Результат радует.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/some-frames_enhanced.png\" width=\"1000\" height=\"340\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Осветленные кадры видео<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"800\" data-ratio=\"1.7777777777778\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/frame__0001-enhanced.png\" width=\"800\" height=\"450\" alt=\"\" \/>\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/frame__0001.png\" width=\"800\" height=\"450\" alt=\"\" \/>\n<\/div>\n<\/div>\n<h3>Резюме<\/h3>\n<p>Чтобы осветлить видео и покадрово сохранить его в заданном каталоге, используйте приведенную команду <kbd>ffmpeg<\/kbd>.<\/p>\n<p>В дальнейшем тифы понадобятся для формирования многослойных тифов, которые будут использованы для выделения треков протист.<\/p>\n<p><br\/><br\/><\/p>\n<p>На сегодня все.<\/p>\n",
            "date_published": "2023-02-22T19:43:22+03:00",
            "date_modified": "2023-02-24T17:37:48+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/some-frames.png",
            "_date_published_rfc2822": "Wed, 22 Feb 2023 19:43:22 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "464",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/jquery\/jquery.js",
                    "system\/library\/fotorama\/fotorama.css",
                    "system\/library\/fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/some-frames.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/frame__0001----contrast-enhance-example.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/frame__0001----hist-adjustmen-example.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/some-frames_enhanced.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/frame__0001-enhanced.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/frame__0001.png"
                ]
            }
        }
    ],
    "_e2_version": 3559,
    "_e2_ua_string": "E2 (v3559; Aegea)"
}