Синопсис

Раскраска фильмов до этого года стоила сотни тысяч долларов, требовала участия массы специалистов и занимала много времени. Теперь всё изменилось. Развитие проекта Deoldify дошло до такого состояния, что результаты его работы можно комфортно смотреть, расслабив фейспалм. Из текста вы узнаете подробности успешного эксперимента по оцветнению фильма без денежных затрат, завершенного за несколько недель силами одного человека.


верни картинку взад


10 begin

Эта история начиналась так же, как и любая другая подобная история. Сумасбродный алгоритм рекомендаций youtube выдал нечто, что привлекло моё внимание и что имело самые неожиданные дальнейшие последствия. В предпоследний раз это привело к залипанию на канале Forgotten Weapons. Сложно наверняка понять, почему мне было выдано тогда такое предложение, но, скорее всего, было так:

1. user_id смотрит ролики по RDR2.
2. В RDR2 есть Volcanic pistol.
3. На канале Forgotten Weapons есть обзор Volcanic pistol.
4. Люди, интересующиеся RDR2, часто хотят узнать про Volcanic pistol.
5. Тысяча чертей, да ему точно зайдёт Forgotten Weapons!

Не прошло и двух дней, а я уже изучал партизанскую литературу по изготовлению разного рода огнестрельного оружия, просматривал фотографии карамультуков из третьих стран, отсматривал, как же проще всего сделать нарезку ствола дома. Разрывался между вариантами: купить полуигрушку и привести её в правильное состояние или же собрать комплект деталей в строительном магазине. В конечном счёте рассыпуха из магазина выиграла по юридическим причинам. К счастью, не нашлось ответа на вопрос «зачем», и активные действия в эту сторону сошли на нет.


И заверте....

В этот же раз не было никаких явных оснований предлагать взглянуть на цветного Чарли Чаплина. Пути ответов нейросети неисповедимы. Наблюдаемое зрелище вызвало сначала замешательство и вопросы, а потом бурное мыслительное слюноотделение. В отличие от виденных ранее плачевных потугов автораскраски, этот видеоряд воспринимался как вполне правдоподобное зрелище. Докопаться, конечно, было к чему, но:

а. не было раздражения от странностей
б. действительно появлялось ощущение глубины картинки, убирая сложность восприятия ч/б изображения современным мозгом

Любопытство потащило за собой, уже изучаю проект на github'е. После теста облачной версии на паре фотографий, после разглядывания роликов, во мне явно стало зреть какое-то желание. Возможность возвращать в актуальный медиаконтекст настоящие свидетельства прошлого, без вложения сотен тысяч денег, хм, в этом есть что-то захватывающее, что-то вполне достаточное, чтобы взбодрить остывший разум.

«Давайте пробовать», эта сакральная фраза, которая произносится робко, но где-то в глубинах души есть уже зёрнышко понимания, что сейчас начинается годная история.


Пристрелка

Ну, предположим, мотор, action. Берём первый попавшийся видеоряд на 4 минуты. Что сначала? Убрать мерзкую тряску камеры и плёнки, которые есть в таком материале по умолчанию всегда. Ищется какие есть варианты с широким диапазоном контроля, и вне видеоредакторов. Поскольку предстояло использовать целую цепочку разных программных средств, использование любых стандартных пакетов редактирования видео сразу отпадало. Только отдельные кадры файлами, только хардкор. И, конечно, надо не просто как-то стабилизировать, а киношно стабилизировать, имитируя ограниченные и плавные движения киноаппарата. Хоть какое-то доверие вызвал один-единственный модуль для python. Ну, ок, значит, код пойдёт сразу.

Стабилизировали. Долговато что-то, ну ладно. Вау, круто, получилось, да, то что надо, конечно, надо допиливать напильником, но иначе зачем мы здесь собрались? Далее само оцветнение. Ставим то, ставим это, ставим другое, опять конфликт, ещё ставим, поверху, сбоку, не сдаёмся, может мануал почитать, кажется, пошло, нет, delete dir, ещё раз, о, вот так, хорошо, наконец-то. Запуск. Блин, чо-то совсем долго. Зато цвета, цвета, ух ты прямо да, а во всем этом, правда, есть смысл и стоит продолжать.

Что теперь? Наверное, в 2019 году интерполяция кадров не является чем-то выдающимся, и можно нарыть проект для условно профессионального применения. И таки да, опять успех, такой проект свободно доступен. Ставим то, ставим это… Запуск. Блин, чо-то опять небыстро. Зато как плавно, как плавно кадры сменяют друг друга, чудо, как будто обычные 24 кадра.

Так, это что же выходит, всё получилось? Весь конвейер здесь вот, готов к применению, надо только бросить в него что-то и получить результат?

:: решается ::


Временные трудности

На каждом этапе обработки фиксировалось потраченное время. Экстраполирую на 90 минут: нападает уныние, мягко говоря. Даже пару раз перепроверил замеры и расчёты, потому что полученные цифры превращали первоначальную задумку из «просто-быстро-легко-весело» в «просто-долго-легко-грустно». Хотя впоследствии ещё два слова в этой формуле изменятся в худшую сторону, но уже было над чем всерьёз призадуматься.

Итак, на выбранный фильм уйдёт 4 часа стабилизации, 420 часов оцветнения и 30 часов интерполяции кадров. Да-а-а… Вот уж спасибо тебе, Чарли.

Чо делать-то? Восьмиядерный mac mini 2012 это единственное, что можно запрячь. Перед глазами стояло видео с линуксом, запущенным на PS4. Зубы скрежетали в бессильной злобе от невозможности откатить апдейты прошивки, которые ставились с гордой убеждённостью, что jailbreak не нужен. ?Как бы там работали все эти питонопроекты? ?был бы ли доступ к расчетам на GPU? Эти вопросы мне не суждено было изучить.

Оставалось или сдаться, или смиренно запустить и ждать. Сдаться — не вариант. Несколько недель ждать тоже. Но другого варианта не сдаваться не было.


Стабилизируй это


Про инструмент для стабилизации
Ссылка на проект для стабилизации видео: pypi.org/project/vidstab
Описание: Проект использует функции opencv для определения смещения кадра от ожидаемой величины, рассчитывает необходимую компенсацию смещения и выполняет обрезку для скрытия прыгающих краёв, создавая плавно двигающееся изображение. За счет возможности выбора метода поиска различий между кадрами, позволяет получать разную степень соотношения стабилизация/потери_пикселей. Обладает очень полезной для отладки функциональностью по графическому отображению входящих и рассчитанных значений.


Наконец, суровая реальность начинает прорываться в уютный мир. Кроме проблем с железом, появляются программные проблемы. То, что в хоть как-то дефолтном виде отработало на тестовом видеофрагменте, на полноценном фильме начинает давать то тут, то там сбои. (Неожиданно, да?)

Приходится признаться себе, что пора тапки поменять на резиновые сапоги, а рукава лучше закатать, потому что как бы не не хотелось, но погружения во внутренности модуля не избежать.

Главную сложность вызывает смена сцен. Проект рассчитан на обработку только коротких фрагментов, в которых контекст не меняется. После изучения, что там и как происходит, находится место для грубого патча, смысл которого в отключении стабилизации при высоких значениях смещения кадра. Без этого патча негативный эффект проявлялся как плавное выползание следующей сцены откуда-то с края в черное поле.

Вместо запуска готового скрипта в итоге появился свой скрипт, суть которого заключена в предварительной обрезке кадра и настройке оптимальных значений. Приведенный код ценности не имеет, потому что в основном повторяет пример автора модуля, но надо же чем-то разбавлять текст.


верни картинку взад

Интересная находка была ровно одна: для пары сцен crop был сделан линейно сужающимся, что создает эффект приближения, но на деле скрывает совсем дикие скачки кадра в сцене. Если сразу настроить узкий crop, то теряется много информации, в итоговом варианте зритель не замечает ничего подозрительного, поскольку «наезд камеры» сочетается с драматическим ритмом.


Дорогой длинною


Про инструмент для оцветнения
Ссылка на проект: github.com/jantic/DeOldify
Описание: Проект делает цветные картинки из черно-белых. Имеет три режима работы: фотографии, художественные изображения, видео. Для каждого режима требуется скачивать своё состояние модели. Предусмотрена возможность тренировки модели пользователем. Автор проекта использовал нестандартный подход для архитектуры нейросети, за счет чего и получен устойчивый, отличный от других реализаций эффект.


верни картинку взад

Компьютер уносится на кухню, поскольку обычно абсолютно тихий mac mini под нагрузкой безостановочно громко шумит. Редко кому из владельцев этих штуковин удается услышать этот звук, поскольку то, что они считают шумом вентиляторов (который бывает раздается на серьезной нагрузке), это лишь половинная частота вращения от возможной. Запускается оцветнение.

Файлы проекта пришлось немного пропатчить, чтобы научить работать с моими входящими данными, и складывать их в нужном формате, порядке и виде. Хоть и пришлось написать небольшой скрипт для запуска, будем считать, что проект работает без допила напильником. Вопросы могут возникнуть только по параметру render_factor.

Влияние на результат следующее:
0-7 полная каша
8-12 перенасыщенные цвета, грубая раскраска (для плохо распознаваемых сцен дает хоть какой-то эффект)
13-18 такое себе, для нераспознанных сцен стоит попробовать сначала этот диапазон
19-20 для экспериментов (выполним шинопровод из берёзовой коры)
21 — оптимальное число
>=22 начинает теряться насыщенность, смысл использования падает

Чем меньше это число, тем меньше расход памяти и быстрее происходит расчет.


верни картинку взад

М-да. На другой день в голове всплывают воспоминания о том, что процессор i7 имеет режим turbo, и даже как-то проверялась его работа. Находится информация, о том как его активировать под Windows, и тестовые утилиты начинают показывать более бодрые значения частоты ядер. Температура процессора скачет в диапазоне 85-99 °C. Сверху ставится кастрюля с водой для отбора тепла. Снизу дует охладитель от ноутбука. Если раньше в сутки обрабатывалось 5% кадров, то в ускоренном режиме это значение стало 7%. Хоть какая-то радость.


верни картинку взад

Нас ждут приключения

Любая программа может упасть. Конечно оцветнение упало. Ну упало, перезапустим. И тут настал «ой». Иногда в прод попадают версии для экспериментов, ну вы понимаете, так вот, когда я патчил модули проекта, то, отвлекшись, забыл просмотреть всю цепочку и смысл каждой инструкции и считал патчинг завершенным. Проект изначально удаляет временную папку, создает новую, складывает туда вытащенные кадры из видео… в общем вы уже догадались, что папку с результатами за сутки мне снесло.

Дальше был R.saver, несколько часов вместо оцветнения мы сканируем диск, а ведь это минус из времени рендеринга. Переходим на другой компьютер со спасенным. Дальше конечно выясняется, что поскольку проблема замечена не сразу, куча файлов не имеет полного содержания. Приходится писать чекер, чтобы, во-первых, оценить потери, а во-вторых составить список кадров на переоцветнение.

Смаку добавляет, что оцветнение удаляет исходные кадры, и это нормально, чтобы при перезапуске не путаться, в том что надо обрабатывать, а что нет. Ненормально иметь одну папку стабилизированных кадров, не «ну чо пойдет не так» и «если что, всегда можно стабилизировать заново». Ну да, всё можно, потратив время.


Дела, заботы

Ладно, вроде как-то жизнь наладилась, миник спокойно гудел, можно было уже планировать дальнейшие работы и писать скрипты для постобработки.

Просмотр оцветненного материала вызвал кроме радости еще и досаду. Было две неприятных вещи. Во-первых, тон цвета скакал между кадрами, скорее всего из-за неравномерной яркости исходника.


верни картинку взад

Во-вторых, обнаружилась куча дублирующихся кадров. Казалось бы зачем, но, видимо, чтобы бытовые видеоплееры не сходили с ума от чего-то меньшего чем 24 кадра/с.

Проблемы есть и их надо как-то решать. Становится очевидным, что поток кадров необходимо разбивать на сцены. Чтобы регулировать тон/яркость, нужно иметь границы. А чтобы не поудалять тексты вместе с дублирующимися кадрами, нужно разделить кадры на текст и не_текст.

Начинаются долгие эксперименты с определением похожести кадров. Ну, здравствуй, opencv, что ты такое?
Пропустим душевные метания (их будет видно по коду), количество версий, испробованных методов (видно по количеству вспомогательных функций).


верни картинку взад

Попробую объяснить финальную версию.


верни картинку взад

Загружаем последовательно два кадра. Делаем легкое размытие, черт знает зачем, но раз так, значит эксперименты показали улучшение результатов (возможно, исключается влияние шума). Находим ключевые точки в кадрах и производим их сравнение.


верни картинку взад

Пояснение для незнакомых с opencv:

Поиск ключевых точек (keypoints, kp) — выделение характерных особенностей, которые остаются неизменными при изменении изображения. Очень грубо, но просто, это можно представить как массив микрохешей.

ORB — это один из многих методов выделения ключевых точек.

des — descriptions, параметрические описания ключевых точек.

BFMatcher — хренота, для проведения сравнения ключевых точек, используя des. Её задача, выделить одну и ту же точку в двух массивах и рассчитать величину ухода каждой заматчившейся точки с первоначального положения. Сорри ми майн инглеж.

Получается, что чем меньше суммарное расстояние смещения точек, тем идентичнее кадры.


верни картинку взад

Если score больше магического числа, то стоит провести дополнительные проверки, возможно это действительно уже другая сцена? Для начала проверим, не является ли какой-нибудь кадр из двух текстом, во-первых, нам нужен этот признак, во-вторых, если произошло изменение типа кадра(текст -> не_текст), то сцена точно сменилась. Приводим цветное изображение к монотонному и отправляем в детект текста нездорового человека (хотя is_text еще прекраснее).


верни картинку взад

Если попробовать описать суть, то происходит поиск замкнутых контуров, и если получается так, что мы имеем множество контуров, попадающих по своим размерам в наши магические ожидания, то высока вероятность, что это текст. Как можно догадаться, этот код пришел на замену is_text, можно считать его удачным, хотя есть фейлы на очень БОЛЬШИХ буквах и сценах вроде бликов на черной воде. Словами тут сложно будет передать все метания между разными вариантами «просто, но работает» и «точно работает, но overkill». Какое-то инженерное жлобство не позволяло уходить далеко от решения «черные полосы по всем краям = текст».


верни картинку взад

Если текстом тут не пахнет, тогда пробуем сравнить черно-белые гистограммы, если подозрения усиливаются, то сравниваем цветные, если прямо очень подозрительно, то сравниваем через один кадр, чтобы уж прямо наверняка.


верни картинку взад

Здесь чисто практические действия: если скрипту захотелось сделать короткую сцену, то, вероятно, ему показалось и лучше добавить эту сцену в предыдущую. А если кадров в сцене стало больше 90, то это увеличит время дальнейшей обработки сцены.

Найти что-то по компенсации тона оказалось непросто. Явно гуглится лишь одна научная статья и связанный с ней проект.

Про инструмент для стабилизации цветового тона
Ссылка на проект: github.com/Al-th/MVA_Project_TonalStabilization
Ссылка на статью, описывающую математическую суть: www.cse.huji.ac.il/labs/cglab/projects/tonestab
Описание: Проект сначала просматривает кадры видео, вычисляя за счет хардкорного матана локальные различия кадров. На втором проходе эти различия сводятся к вычисленному «правильному» значению.


Есть небольшая проблема. Это Matlab. Почему-то мне очень не хотелось сразу ставить этого монстра и меня потащило в сторону GNU Octave. Код, конечно, не совсем оказался совместим, пришлось разбираться как читать и писать картинки, удовлетворять ожидание тех функций, которые в Octave работают иначе, в общем язык не в полной мере конгруэнтен мейнстриму, плюс надо было вникнуть в разные матановские нюансы, вот и сутки потеряны.

Когда это всё наконец заработало, скорость обработки мягко говоря огорчила. 20 секунд на кадр. Пусть и на старом процессоре, это перебор. Ладно, давайте смотреть, а как там Matlab. «Выберите пакет». Э, а хз что мне надо, ну давайте с DSP. И, запуск! «В вашей версии не установлен пакет обработки изображений». Ну, ок, у меня есть ещё свободные адреса для регистрации.

Наконец запустилось и даже работало сильно быстрее, чем в Octave, но всё равно слишком долго, сопоставимо с оцветнением, это раз, а во-вторых результаты полученных исправлений не соответствовали моим завышенным ожиданиям.


Если хочешь что-то сделать, сделай это сам. Делать самому не хочется, но придется. Гуглёж с пристрастием наконец помог найти в opencv хоть что-то, что могло мне помочь. Обнаружился набор классов, для сшивки панорамных фото, среди которых был механизм для коррекции различий освещенности и тона. Не совсем то что надо, но это хотя бы вариант.

После долгих экспериментов с единственным (да!) примером использования этой штуки, наконец получился полезный код.


верни картинку взад

Вся магия заключалась в опытном установлении подходящего для моих целей класса, и выяснении формата маски. Дальше очевидно: накормить компенсатор изображениями для расчета усредненного значение общей экспозиции и уровня каждого цветового канала, потом повторно подсунуть ему исходники уже для преобразования.

Первый результат меня опять не устроил. Эффект был виден, но цвета все еще заметно плавали. Очевидно, что разброс выходил за возможности алгоритма, предназначенного для других целей. Надо было что-то придумать дополнительно. Пришла идея добавить автоматическую балансировку белого цвета, которая по идее должна была привести остающийся небольшой разброс к общему значению.

Найти хороший алгоритм оказалось непросто.


верни картинку взад

Миниатюрный размер на фоне других меня тоже смутил, но в отличие от прочих он действительно нормально работает. Сначала хочется сказать «даже не спрашивайте, что тут происходит». Но если разобраться, то он нормализует гистограммы, притягивая минимум и максимум к концам диапазона, и в большинстве случаев это дает искомый результат.

К сожалению, радость нахождения этого алгоритма омрачалась тем, что его применение после выравнивания тона, ничего хорошего не добавило, тон все так же скакал. На автомате переношу вызов small_wb до компенсации, нажимаю run, захожу в папку с результатами и подпрыгиваю, протираю глаза, подумал что показалось, что это просто один кадр из-за какой-то ошибки размножился. Просматриваю в полный размер, и вот тут мне похорошело. Кадры были разные, то есть результат был просто идеальнейшим.

Оставалось придумать как вычислять дубликаты. Логично предположить, что с этим справится тот же самый код, что находил окончание сцен, но с другими параметрами. Почти так и оказалось. Почти.


К завершению оцветнения вроде было всё готово, но каждый раз натыкаясь на сцены с миниатюрными моделями, вызывал раздражение их ненатуральный вид. Стало интересно, можно ли что-то с этим сделать. Проектов, позволяющих изменять перспективу кадра не нашлось совсем. Попалось только нечто, предназначенное для преобразования фотографий в видео. Судя по описанию, в проекте есть алгоритм, который мне нужен.

github.com/sniklaus/3d-ken-burns

Поставил, стал патчить, получил искомый результат. Но. Функция отделения объекта от фона еще далека от идеала. И куски модели оставались на «небе». Как ни крутил «камеру», но подобрать ракурс, чтобы и перспектива была правильная и артефактов не было, не вышло. Жаль.

Надо снова браться за opencv.


верни картинку взад

Ничего интересного не происходит, просто приведение одно матрицы к другой. Сложно только подобрать параметры, чтобы получился нужный эффект.


верни картинку взад

Результат сильно зависит от исходного материала и, возможно, приведенный пример не объясняет зачем надо было это делать, но сцены, которые раздражали, больше не беспокоили.


верни картинку взад


Черный понедельник

Зайдя в очередной раз попить водички, насторожился, вентилятор миника шумел как-то, ну не так. Монитор не включался, чертыхнулся и попробовал выключить-включить. Вентилятор завелся, но звука, сообщающего о начале загрузки не было. Началась диагностика с разным подключением мониторов, зажиманием разных секретных комбинаций клавиш, и пару раз компьютер ненадолго включился с появлением изображения, но через несколько секунд все обрывалось, либо же сразу начиналась радужная цветомузыка. Потом хоть какие-то включения прекратились. Пришлось признать неизбежное: отчалил чипсет. Сняв сервисную крышку, я понял, кто тут дурак, и что следовало очень серьезно отнестись к вопросу охлаждения. Честно говоря наивно полагал, что схемотехники эпл оставили хорошую защиту по теплу от дураков, но видимо эти люди не рассчитывали, что найдутся идиоты, гоняющие десятки суток (да, к этому моменту уже прошло больше недели) mac mini без перерыва в экстремальном температурном режиме.

Сняв защитную крышечку, стал пробовать включать, надавливая на кулер в месте расположения чипсета и это действительно влияло на успешные запуски, хотя загрузка обрывалась и эффект от надавливания вскоре совсем пропал.

Вокруг образовалось тьма. Было вот совсем не до этих проблем, но что-то делать придётся. Почитав истории про утюг и духовку, посмотрев каким станком делают нормальную установку чипа, пришлось смириться с реальностью и начать поиск сервиса.


Не всё то золото

Понятия не имею как поздно ночью найти сервис, способный провести данную операцию разумно, быстро и за нестрашные деньги. Что-то там нашел, вызвавшее доверие. Смутило конечно, что телефон не гуглился, ну да ладно. Компьютер отдан, общение было приятным, при мне другому клиенту объясняли, что ремонт его приставки будет дороже б/у и обещали предложить варианты. Еще подумалось, «какие милые пупсики, о клиенте заботятся».

Вечером позвонил менеджер с результатами диагностики, он подтвердил мою версию про чипсет и сообщил, что гарантия на замену чипа не предоставляется (э, да как так, сайт же обещал?), и что правильнее будет купить б/у аналог. Всё это стало странно попахивать, но допустим. Стал ждать результатов поиска «аналога». На второй день сомнения усиливались, зашел на авито и стало совсем невесело, поскольку цена была равна цене нового в 2014. Это мягко говоря «не соответствовало ожидаемым размерам бюджета проекта». Менеджер что-то не отзванивался, набрал его сам послушать новости. Он вроде узнал меня, но вместо предложений «аналогов», на вопрос «фигли так долго?», пробормотал что-то про поиск доноров для ремонта в Москве. А? Чо? Какой ремонт? Кажется пришло время искать отзывы о сервисе. Уже можно! Вот теперь пора!

Полчаса поисков и уже бегу вызволять своё сокровище из грязных лап мерзких обманщиков. Да, пришлось заплатить денежку за «диагностику», но ты же сам подписал договор? Страдай, ъуъ.

Было обидно потерять 3 дня, а главное было непонятно что же делать дальше. Искать новый сервис что-то не хотелось. Покупать часы в облаке нелогично, черт его знает сколько еще доделок и переделок понадобится, и всё это без привычного инструментария и полного контроля. Выходило, что нужен новый комп. В концепцию «просто-быстро-легко-весело» явно закралась какая-то ошибка. Но бросить всё после потраченных сил уже просто нельзя.


Денег нет, но это уже неважно

Собрать компьютер для GPU-рендеринга без денег выглядит невозможным. И таковым и является. Пришлось потратить еще половину дня, чтобы разобраться в современных железках и вычислить оптимальный конфиг нищего датасаентолога.

Собираем, включаем, не работает. Допустим. Вставляем видеокарту. Появляется сообщение про нехватку питания, и предложение подключить кабель от блока питания. Какой еще кабель, ну бывает, забыл проверить его наличие у блока питания, зато 720 рублей за 400 Вт. Откладываем карту, потом разберемся. Надо понять почему не включается сама плата. Идем на балкон, вынимаем динамик из Pentium 133 (На самом деле Cyrix 100, но кто поймет). Подключаем динамик, сигналит необычно. Гуглим. Точно не понять, производитель напрямую не предоставляет таблицу под эту плату, но все источники сходятся на том, что нет видеокарты. Ну как это нет? Вон у вас два видеовыхода на матплате. Непонятно, неужели опять беда, и надо менять по гарантии.

Через 2 часа войны, решаю переключиться, чтобы не замыкаться в нерешаемой проблеме. Втыкаю видеокарту, обрезаю провода питания для привода, вот твои 12 Вольт, радуйся.

Включаю, компьютер стартует без всяких вопросов, заранее подготовленный ssd с образом винды начинает установку. У меня замыкание, чувствую, что в мире появилось что-то чего раньше не было, и именно это является сутью моего непонимания.

Начинаю гуглить в эту сторону и выясняется, что наличие видеовыходов на матплате не коррелирует с наличием графического процессора в чипсете. Воу! Да как вы выживаете в этом мире? Вот бы удивился, если бы всё-таки склонился в сторону конфига без GPU. И ведь главное, ни в доках, ни на коробке не обращено жирным внимание на этот неприятный факт, только скромная сноска «if APU available», ну раз выходы есть наверное этот APU эвейлебл, и не стоит разбираться о чем речь, логично? Нет.


верни картинку взад

Не стесняемся разгонять и получаем бесплатный 1 ГГц, долгий выбор кулера и его стоимость оправдали себя. Ставим оцветнитель. Запускаем. Бум! CUDA out of memory. Классно, отлично, утром разберемся.

На утро памяти не прибавилось. Гугл сообщал, что эта ошибка означает, что размер доступной видеопамяти меньше необходимой. В это очень не хотелось верить, потому что этому не следовало быть правдой. Ведь, я не мог ошибиться, купив версию видеокарты с урезанной памятью, нет не мог, я же никогда не ошибаюсь.

Начались эксперименты с принудительной очисткой памяти, изменением параметров, надежду давал тот факт, что падение происходило не сразу, что несколько кадров успевали появиться на выходе. Можно было конечно запустить в цикле перезапуск оцветнения, но время подготовки к запуску составляет порядка 2 минут, и смысла это не несло.

Внезапно, отладочный скрипт стал исправно работать, и обработка полетела, понятия не имею, что там навертел, решил ничего трогать, и просто получить уже свои цветные кадры. Остававшиеся 60% кадров закончились через 5 часов. К этому дню обработка на минике только бы начала подходить к концу, о, бедный миник.


Всё еще только начинается

Запускаем скрипт поиска сцен и заполняем директории. Пробегаемся, проверяем, если что-то попало не туда, исправляем. В целом все нормально. Далее надо вычистить дублирующиеся кадры, чтобы исключить в дальнейших манипуляциях пустую трату времени. Одна загвоздка, как быть уверенным в том, что скрипт удалит только нужное и ничего не пропустит. Если думать логически, то добавление лишних кадров не должно быть хаотичным, а должно иметь какой-то алгоритм. Привязываться к нему конечно не следует, но учесть это следует. Делаем так: копируем в другую папку все сцены без дублирующихся кадров, потом каждую папку сравниваем с исходной, используя сравнение директорий файлового менеджера. Если визуально наблюдается повторяющийся ритм в удаленных файлах, значит считаем, что всё нормально. Это на первый взгляд сработало.

Всего полчаса и можно ехать дальше. Запускаем тоновую компенсацию. Через пару часов пробуем порадоваться результату, но радость половинная. Небольшая часть сцен плохо оцветнена. Еще небольшой части сцен от тоновой компенсации поплохело. Если со вторым можно было, или просто взять то, что было до компенсации, или попробовать выравнять тон без использования автобаланса белого. То с переоцветнением было все сильно сложнее. Часть сцен улучшилась от уменьшения параметра render_factor, оставшиеся просто так не поддавались. Алгоритм просто не находил ничего похожего в обученной модели и выдавал странные результаты. Пришлось каждую такую сцену многократно оцветнять с разным render_factor, и потом выбирать лучший кадр, чтобы он хоть как-то напоминал истину. Сложно передать насколько это занятие выматывает мозг. Пришлось написать скрипты, собирающие для каждого кадра варианты в отдельную папку, что повысило производительность и уменьшило поток брани.


Прежде чем двигаться дальше, нужно вырезать лишние тексты и переставить несколько сцен местами. Понадобилось какое-то простое средство для видеомонтажа. Загружаем структуру папок с кадрами прямо в текущий редактор.


верни картинку взад

Удаляем сцены, меняем местами, выгружаем обновленную структуру на диск в новую папку.


верни картинку взад

Теперь можно преобразовывать 12 к/с в 24 к/с.

Инструмент для замедления видео
Ссылка на проект: github.com/avinashpaliwal/Super-SloMo
Описание: Проект рассчитывает промежуточные кадры, используя обученную модель. Можно скачать готовые настройки. Можно обучать самостоятельно. При правильном выборе обучающих данных, результат феерически прекрасный.


Патчим проект для работы с отдельными кадрами, в остальном он просто работает. Запускаем, отсматриваем результат. Вместе с «вау» приходит новая проблема, некоторые сцены наполнены артефактами, потому что для получения из 12 кадров 24 нужно специально тренировать модель.

Стоят два варианта. И оба тебе не понравятся. Либо вручную удалять неудачные кадры, либо заниматься тренировкой модели. То есть, или потратить кучу времени, или потратить неизвестное количество времени с непредсказуемым результатом. Победила ясность.

Ну, отсмотреть 200 000 кадров. В чем сложность? В том что, удалять все плохие кадры нельзя. Нужно удалить ровно те, что бьют по глазам, и оставить те, что как бы незаметны. То есть пробовать, повторять, брутфорсить правильную комбинацию. Где-то на второй половине кадров, органическая нейросеть тоже обучилась, и стало интуитивно понятно в каких моментах ждать дефектов, и какие кадры нужно удалять, а какие можно не трогать. Всего 4 дня и у нас есть плавная версия.

Собираем видеофайл. Смотрим. Вроде прекрасно. Но что-то как будто подзаедает. Что же это? Воу, воу, воу дублирующиеся кадры, но как, откуда, почему? Становится понятно, что это прилетел бумеранг из прошлого. Стабилизация, обрабатывала дублирующиеся кадры тоже, и вписала каждый из них в дугу движения отдельно, добавив уникальное смещение каждому. А алгоритм поиска дубликатов, резонно посчитал, что это разные кадры, раз они смещены, все логично.

Здорово, супер. Но не пересматривать же все кадры снова, не попробовав написать хоть немного кода?

Начались эксперименты с алгоритмами сравнения похожих изображений. Сложность была в том, что большинство из них позволяет сообщить, что картинки совсем разные, или сравнительно сильно похожи. Для меня же почти похожи были действительно разные кадры в одной сцене, и нужно было поймать изображения, которые являются смещенными копиями. Все перепробованные алгоритмы мешали в одну кучу и то, и другое.

Хоть какую-то пользу смог принести compare_ssim из skimage. Не буду притворяться будто помню что это, это просто хотя бы иногда давало правильные результаты и позволило выявить сразу некоторую часть дубликатов. Остальное пришлось искать глазами. На второй день моя естественная нейросеть натренировалась замечать незаметное. К этому моменту меня уже мучила профдеформация: попадающиеся на глаза черно-белые изображения, воспринимались как незавершенная работа, а любое подёргивание стороннего видео-контента отдавалось резью «опять дубликаты!».

Собираем следующую версию видео, смотрим. Приходит понимание, что часть сцен имеет кислотную насыщенность. И это опять проблема, потому что нельзя просто так взять и понизить насыщенность всех сцен на общее значение, часть из них наоборот не сильно яркая.

Начинается насыщенность-challenge. Изменить этот параметр несложно, но невероятно сложно адекватно измерить. Это было понятно в теории, на практике это только подтвердилось. Любой наивный способ сравнивать насыщенность кадров натыкался в ходе тестирования на сцены, которые были яркие, но их показатель был в норме, или блеклые, но их показатель был очень высоким.

К концу дня родилось хоть как-то рабочее решение.


верни картинку взад

К медиане разброса насыщенности пикселей добавляем стандартное отклонение насыщенности, и получаем условную максимальную насыщенность кадра. Это неидеально, но с таким способом измерения выравнивание насыщенности начало работать. Оставалось только подставить полином величина_коррекции = f(измеренная_величина). Составляем руками табличку на тестовых данных «замер» -> «величина коррекции, которая дала приятный результат», загоняем табличку в любой инструмент умеющий в аппроксимацию.

Итоговая функция коррекции насыщенности:


верни картинку взад

Переходим из пространства BGR (дефолтное представление opencv) в HSV. Характеризуем матрицу насыщенности одним числом. Вычисляем усиление/ослабление насыщенности. Обрезаем вылеты за диапазон. Сливаем скорректированную матрицу насыщенности с исходной яркостью и тоном, возвращаемся в пространство BGR.


Когда уже релиз?

Ну кажется видео наконец готово. Можно заняться музыкой.

Так как ни одно из существующих музыкальных сопровождений мне не показалось адекватным, ничего другого не оставалось кроме как сделать что-то самому.

С самого начала возникла глупая проблема: половина диска была забита бекапами разного состояния фильма. А программе, в которой предполагалось делать музыкальное сопровождение, требовались десятки гигабайт для библиотеки треков. Подумал: «что может пойти не так?» и удалил предфинальные бекапы, ведь допредфинальные бекапы у меня есть на двух дисках, и ничего существенного не теряю, да и вряд ли что-то надо будет переделывать.

На третий день работы с музыкой, количество сцен, потерявших насыщенность уже нельзя было игнорировать. Часть кадров стала совсем черно-белой, причем до этого именно эти кадры были самыми яркими. Вот интересно, что бы это могло быть? Неужели полином третьего порядка за пределами исходной таблицы резко улетает в космос? Вот ведь неожиданность, правда? Тут надо заметить, что в очередной раз пересматривать фильм целиком после коррекции насыщенности мне не хотелось, ограничился просмотром одного кадра из каждой сцены, что дало иллюзорное ощущения достаточности результата.

Проблемы добавить граничные условия в код коррекции насыщенности не было. Проблема была в отсутствии исходников, с которых можно было бы получить ту же последовательность кадров, для которой уже закончена синхронизация со звуком.


Варианта два: выпускать в мир кривую картинку с классным звуком или возвращаться на два шага назад. Случайно получившийся идеальный синхрон терять жалко, но ведь весь смысл работы был в цвете.

Повторяем вычищение дублей, перемонтаж, корректируем насыщенность, естественно, получаем сильный рассинхрон по звуку, начинаем переподгонять ключевые точки треков, расстраиваемся, что волшебный синхрон почти пропадает. Вот и прошла еще неделя.


Про музыку

Писать забесплатно новую музыку совсем не вариант, но приклеивать что-то из доступных вариантов сопровождения (хотя их минимум 5) тоже не хватает честности. В процессах поиска бесплатных треков натыкаюсь на интересную штуку.

filmstro.com

Из описания становится понятно, что она позволяет сделать что-то промежуточное между подстановкой чужих треков и сочинением с нуля. Она обладает обширной библиотекой композиций, каждую из которых можно представить как проект из условного Fruity Loops. Все дорожки одной композиции сгруппированы в три секции: Интенсивность, Глубина, Напряжение. Изменяя «силу» секции, можно изменить количество активированных дорожек. Итого: одна композиция в среднем содержит 11 вариантов звучания, которые образуются как результат взаимовлияния секций. С помощью расстановки ключевых точек вдоль видеоряда осуществляется привязка изменения звучания композиции к происходящему на экране. Такой вот доширак. Вкусно, если не знать, как это получилось.


верни картинку взад


Про ютуб

Наконец можно сделать канал и залить видео. Казалось бы уже всё, финиш, можно отдохнуть. Но реальность не отпускала, и если исходное видео можно условно считать HD, то после заливки оно оказывалось омерзительного качества. По всем признакам и мнениям из интернета выходило, что гугл намеренно для всех новых каналов использует очень низкий битрейт. К счастью, где-то проскочил дельный совет: залить в размере 1440p, будто это заставляет ютуб бережнее относиться к пережатию. Совет правда помог, стало хотя бы смотрибельно.

После загрузки сразу прилетели жалобы на использование чужих видеоматериалов. Очень интересно, оказывается великий Youtube до сих пор не имеет работающей базы произведений, находящихся в общественном достоянии, поможем ему в этом, отправив возражения.

Результат: www.youtube.com/watch?v=r3NQyCInZiQ
Ссылка на скачивание в оригинальном качестве: drive.google.com/uc?id=1dEPcjKbjNowxsfaNcbV6DsbAr3kbACKH&export=download


Outro

То что получилось, мне в целом нравится. Конфетку бы сделала команда оплачиваемых специалистов. В данном случае: 70% нормальных кадров, 20% плохих, 10% эпичных. Бесплатно, автоматически. Все проблемы, что мне пришлось устранять руками, обусловлены лишь тем, что это делалось в первый раз. Следующий фильм оцветнить будет несоизмеримо легче. Не знаю, что это будет, в эпохе немого кино мне пока не попалось других произведений, которые бы просили, чтобы их перенесли в наше метапостбытиё. Вероятно, это будет что-то из раннего звукового кино, а значит надо восстанавливать звук, приводить его в 20-20 Кгц, преобразовывать в стерео. Столько еще разных нейросетей можно потрогать =) На сегодняшний день качество оцветнения сильно зависит от исходного материала, чем больше сохранилось оттенков серого, чем выше четкость, тем лучше результат. Скорее всего, следующие поколения подобных инструментов будут синтезировать новые высококачественные изображения, а не вписывать цвет в старые контуры, это будет похоже на проекты, которые делают имитации фотографии по рисунку от руки. А пока, чтобы получать превосходный результат, нужно вытягивать черно-белое изображение и индивидуально тренировать оцветнитель на видео-материалах, соответствующих целевому фильму.

Наша жизнь меняется быстрее и быстрее, сроки с которыми мы переходим в очередную реальность, сокращаются. Мы пишем нейросети, чтобы успевать отслеживать всё новое, что происходит с нейросетями. Но успеваем всё меньше. Всего полгода назад мне задали вопрос, можно ли автоматически сделать произвольную фотографию достоверно цветной, мой ответ был: «нет, это всё еще фантастика».

Комментарии (64)


  1. morozovsk
    24.12.2019 03:01

    Нельзя просто так сесть и начать писать код
    Напоминает дни, в которые видишь что-то интересное и просто хочется сделать хотя бы «hello world», ничего не предвещает подвоха, а потом недели летят в тартарары:
    • знакомишься с новой интересной штукой
    • на первый взгляд всё выглядит понятно, только… не хватает одной маленькой софтины
    • софтина есть в deb-пакетах, пытаешься её установить, но её зависимости конфликтуют с тем, что у тебя уже установлено
    • гуглишь, пытаешься сделать, чтобы и новое установилось и старое не сломалось, в итоге обновляешь убунту (давно было пора, но всё руки не доходили) всё получается, но неожиданно слетают дрова на видюху
    • проходишь 3 круга ада, вспоминаешь, что подобную проблему ты уже решал пару лет назад и пообещал себе больше никогда не обновлять то что и так нормально работает
    • убиваешь пару вечеров, чтобы вернуть как было
    • убиваешь ещё пару вечеров, чтобы софтина всё таки встала
    • наконец-то пишешь код
    • ничего не работает
    • гуглишь, находишь специальный магический параметр запуска софтины
    • но в последней версии его выпилили
    • ищешь предпоследнюю версию, находишь её в npm, понимаешь, что можно было обойтись без deb-пакета, посыпаешь голову пеплом
    • ставишь из npm, АЛЛИЛУЙЯ, всё работает, но нет крутых фишек, которые добавили в последнюю версию
    • сидишь, пишешь код, чертыхаешься каждый раз, когда не хватает фичи из новой версии
    • спустя 2 недели узнаёшь, что 13 дней назад вышла новая версия софтины, в которой есть все новые фичи и при этом поддерживается нужный тебе старый параметр
    • осознаёшь, что все твои страдания были зря, кроешь диким матом себя, софтину, всё вокруг
    • пытаешься поставить новую версию, читаешь описание, вроде всё просто, ничего не предвещает никаких проблем...
    • правда в зависимостях у софтины в npm появилась одна маленькая новая зависимость… но как раз она стала поперёк горла у гитхаба и npm уже не позволяет выкачать её (наверно делается много запросов) и просит авторизоваться через гитхаб.
    • Пытаешься авторизоваться на гитхабе, вспоминаешь, что используешь двухфакторную авторизацию, а второй фактор у тебя как раз пару дней назад накрылся и в ближайшие пару недель его никак не восстановить.
    • Пытаешься зарегистрировать новый аккаунт на гитхабе, а для него новый email
    • Все имена почтового ящика, которые тебе приходят в голову уже заняты, рандомно стучишь по клаве — всё равно занято, повторяешь несколько раз, находишь свободное имя
    • теперь просят номер телефона, но говорят, что он уже использован в этом почтовом сервисе, укажите другой номер телефона, а другого у тебя его нет.
    • думаешь, что лучше бы я за это всё не брался, а лежал и смотрел сериалы, но как сдаваться тут ведь совсем немнооооожко осталось
    • проходишь ещё пять кругов ада, получаешь результат, в конечной точке обернувшись назад становится ясно, что всё было не зря, все страдания остались где-то там позади, а результат — он вот тут, в руках, осязаем. конечно не совсем оптимальный маршрут получился, но что поделать, в следующий раз вряд ли соберу столько граблей, скорее всего всё заработает из коробки...


    1. igorp1024
      24.12.2019 09:41

      Очень знакомо. А для некоторых вещей (по типу десктопного вайбера) даже начинаешь юзать snap, к которому до недавнего времени относился с брезгливостью.


    1. Eldhenn
      24.12.2019 10:18

      Как установить SCO на PC 2019


    1. WBuilder
      24.12.2019 12:11

      прочитал как хороший детектив, "на одном дыхании"


  1. yarryozzo
    24.12.2019 03:06

    Похоже, что нейросеть не была готова встретить в фильме про броненосец столько мяса: )


    1. pda0
      24.12.2019 13:44

      Учитывая, что по сюжету оно гнилое — по моему норм получилось. :) А вот спасательные круги она зря синим раскрасила…


      1. putinBog Автор
        24.12.2019 16:00
        +4

        А это специальные круги военного времени, для повышения скрытности. Впрочем, в моменте с палаткой они бывают оранжевые


  1. sibidor
    24.12.2019 04:05

    Фотку с кастрюлей обязательно в Apple, пусть сделают современный дизайн и маркетинговый слоган для устройства придумают.
    Не супом единым,
    Кастрюля полна,
    Для мака любимого
    Выполняет задачи она!


    1. bodqhrohro
      25.12.2019 01:53

      Это ж баян.

      Сейчас разгоряченный модем производства компании
      "Кенга и К535РУ Communication Industries" понемногу
      остывал, политый водой из остывшего за трое суток чайни-
      ка.
      Он выпил из чайника немного воды и остальное вы-
      лил на яростно дымящуюся крышку модема. Вода зашипела, и
      Винни Пух испуганно отскочил, чтобы не обжечься паром.
      Он почесал в затылке и решил зажарить на модеме яичницу.

      http://lib.ru/ANEKDOTY/9600.txt

      У меня, кстати, CDMA2000/EVDO-свисток прилично так грелся при активной передаче данных, так что история по спирали ходит :) Использовать его в качестве кипятильника дури не хватило, впрочем.


  1. smrl
    24.12.2019 07:38

    А примера «контрольной» раскраски у вас нет? Ну то есть минута цветного видео, превращенного в черно-белое, затем раскрашенного (вслепую, без оглядки на оригинал) — и попиксельная разница с оригиналом?
    (По первому ощущению, из самых заметных багов — все время плещут лиловыми оттенками.)


    1. putinBog Автор
      24.12.2019 10:14

      1. Результат будет зависеть от выбора видео и текущей «обученности» модели. Однократный эксперимент ничего не покажет. Мне непонятен смысл, что мы измеряем? Пиксель в пиксель соответствия не будет никогда. Нейросеть «придумывает» цвет исходя из контуров объекта и фактуры, связанной с этими контурами. Например, некоторые странные лица раскрашивались плохо, обратный пример, куча железок уникальной формы раскрашены хорошо.

      2. Цвета копируются из видео для обучения, как научите так и будет выглядеть. Нейросеть возвращает полный спектр rgb без перекосов и обрезаний. Дальше ручной цветокоррекцией можно добиться любого вида, как с обычным производством кино


      1. smrl
        25.12.2019 00:42

        Да это все понятно. Of course, of course это все очень круто, и понятны границы применимости. But maybe все равно было бы забавно посмотреть, где и как сеть ошибается? Ну, лично я бы, если бы столько сил отдал проекту, не мог бы не поиграть, натравливая обученную под «Броненосец» сеть на кусок из каких-нибудь «Приключений Шурика», а потом бы и вовсе пустился в садистские штучки — подсовывая эпизоды из мультиков.


        1. putinBog Автор
          25.12.2019 07:20

          Если наберете в поиске YouTube deoldify, там полно разных роликов. До начала работ играться было очень долго по времени обсчета, а когда появилась видеокарта, уже неинтересно, так как примерно понятно как и что будет выглядеть


  1. HiMem-74
    24.12.2019 07:48
    +1

    А так ли необходим цвет в старых фильмах? Мне кажется, раскрашивая черно-белое наследие, мы больше теряем, чем приобретаем.

    Ну и пост был бы не полон без ЭТОЙ картинки.

    Картинка
    image


    1. fuser
      24.12.2019 07:58
      -2

      Большая разница, 17 мгновений весны в цвете


      1. Aquahawk
        24.12.2019 08:20

        Такая хорошая идея и такая бездарная игра.


        1. HiMem-74
          24.12.2019 09:14
          +1

          Это просто буффонада, гэг, призванный в гротескной форме донести до нас необходимость бережного отношения к культурному наследию. Да, технологии достигли новых вершин, но не нужно Венере Милосской приделывать руки и не надо раскрашивать Аполлона в анатомические цвета!


          1. SantrY
            24.12.2019 10:50
            +2

            Не умаляя справедливости вашего тезиса о бережном отношении, но правды ради — судя по всему большинство античных и римских скульптур при современниках были раскрашены.


          1. bentall
            24.12.2019 11:08
            +2

            Ну и Венера без рук осталась при вывозе с территории Греции, находившейся тогда под властью Стамбула. Драка была с турецкими таможенниками. А если бы её тогда не уронили, ну или хотя бы подобрали отломившиеся конечности, известная всем статуя могла бы выглядеть заметно по-другому.


        1. inferrna
          24.12.2019 11:22

          Поздние выпуски скатились, но первые были очень даже

          неплохи


          1. rvt
            24.12.2019 12:20

            Шедевр! Жалко только, качество такое низкое!


    1. lxsmkv
      24.12.2019 08:23

      Я думаю правильно рассматривать такие проекты как самостоятельные производные художественные работы. Эмоциональное восприятие картины от раскраски действительно в некоторой степени меняется. И, конечно, не везде от этого фильм приобретает. Например в «Семнадцати Мнговениях» его монохромность исключительно удачно подчеркивает вдумчивую неторопливость размышлений, воспоминаний, и переживания героев. После раскраски фильм хоть в смысловом наполнении ничего и не потерял, но границы восприятия каждой отдельной сцены немного размылись, говоря проще, картина немного «опопсела». Хотя тем кто ее не видел, и сравнивать им не с чем, этого совсем не увидят. Для них это будет возможность приобщиться к культурному наследию. В чем я лично не вижу ничего плохого. Это как пищевой краситель, он просто делает блюдо более привлекательным, не меняя его сути.


      1. Ark_V
        24.12.2019 11:21
        +1

        Для них это будет возможность приобщиться к культурному наследию. В чем я лично не вижу ничего плохого.

        а потом возникает недоумение, и чего это «старичье» от этой попсы тащится и мне про обязательно посмотреть все уши прожужжало. Девальвация ценностей она такая, не навязчивая, прям как окно овертона.


      1. staticlab
        24.12.2019 11:54

        Для них это будет возможность приобщиться к культурному наследию.

        Вот только цветная версия отредактирована. Вырезаны некоторые фразы или эпизоды.


        1. Tatikoma
          24.12.2019 12:57
          +1

          Есть версия сделанная умельцами сочетающая в себе цветные кадры и отсутствующие ч/б. На мой взгляд получилось очень круто.


          1. staticlab
            24.12.2019 14:15

            А убогое 3D-досье они, случайно, не откатили?


  1. Vbeerby
    24.12.2019 09:36
    +2

    Только меня стабилизация кадра и удаление плёночного «шума» в старых фильмах бесит даже больше, чем цвет?


    1. putinBog Автор
      24.12.2019 09:57

      Всё в порядке. Это абсолютно нормально.


  1. REPISOT
    24.12.2019 11:21

    убирая сложность восприятия ч/б изображения современным мозгом
    А предки-то наши, оказывается, ого-го! У дедушек-то у наших мозги — настоящие компьютеры были. Не то что нынешние. Всего каких-то 50 лет и вот уже все, мозги атрофировались. Как быстро эволюция взяла свое. @сарказм@


    1. putinBog Автор
      24.12.2019 12:26

      Люди такие же, изменилось информационное окружение. /не_сарказм


  1. dlinyj
    24.12.2019 11:53

    Статья просто бомбическая. Восхищает упорство с которым автор шёл к цели. На этапе сгоревшего компа я наверное бы уже сломался. А тут результат есть! И он очень крутой!
    Мой респект! Это реально вдохновляет на подвиги.


  1. Renatk
    24.12.2019 12:43
    +1

    Скажите пожалуйста, сколько места (итого) на жёстком диске понадобилось под всю обработку данного материала?


    1. putinBog Автор
      24.12.2019 13:00

      80 Гб для активной фазы, учитывая перенос черно-белых исходников на другой диск. Я бы ориентировался на 200 Гб, чтобы ни в чем себе не отказывать. Это если картинка 720p jpeg 95% качества. Папка с одним комплектом кадров занимает условные 16 Гб


      1. nidalee
        24.12.2019 13:19

        Чтобы ни в чем себе не отказывать, я бы все-таки предложил PNG или TIFF, чтобы не терять в качестве на перегонах жпегов туда-сюда.
        Если место есть, конечно.


        1. putinBog Автор
          24.12.2019 13:49

          Чисто теоретически поддержу. На практике это увеличивает расход места в 5 раз, может я ошибаюсь в возможностях png, но именно такую разницу я наблюдал. Jpeg 95% даже при 5 пересохранениях превосходит по качеству кадр сжатого видео (речь про вменяемые битрейты). После первого выбрасывания «ненужной» информации, дальнейшие выбрасывания не столь агрессивны. В обществе сложился некий миф, что jpeg это днище. На практике всегда вопрос в мере


          1. nidalee
            24.12.2019 14:05
            +1

            На практике это увеличивает расход места в 5 раз, может я ошибаюсь в возможностях png, но именно такую разницу я наблюдал.
            Да, примерно так и есть, можно сжать сильнее и потратить больше времени, сэкономив место, но поскольку это быстроживущий proxy, смысла в этом нет, проще с минимальным сжатием сохранять большие файлы, желательно на SSD.
            Jpeg 95% даже при 5 пересохранениях превосходит по качеству кадр сжатого видео (речь про вменяемые битрейты).
            Тут проблема в том, что по-хорошему сжимать видео нужно через стратегию CRF, и предоставить энкодеру возможность самому решать, что выкидывать, а что оставлять. Если пережатия JPEG-ов — это эдакие «сложения» сжатий, то JPEG -> H.264 — уже их «перемножения», потому что тот же деблокер и прочие SAO H.264\H.265 слыхом не слыхивали о том, как сжимает JPEG, а заточены под сжатие видео. Поэтому артефакты могут полезть оттуда, откуда не ждали. Плюс вылезающая лишняя резкость JPEG-ов (который при понижении качества очень неловко отрабатывает границы объектов) может раздуть требуемый битрейт и, как результат, размер файла.
            Так что если позволяет диск, лучше не экономить.


  1. CyberAP
    24.12.2019 14:10
    +1

    С замедлением старых видео есть проблема: кадры в секунду там не фиксированные, потому что оператор вручную управлял этой частотой. Питер Джексон столкнулся с этой проблемой когда восстанавливал материалы с Первой мировой войны. Им приходилось вручную ускорять или замедлять видео и опираться больше на ощущения что такая скорость правильная.



    1. putinBog Автор
      24.12.2019 15:45
      +1

      Этот фильм собран из разных документалок. Очень локальная проблема. Сомнительно, что можно столкнуться с художественным фильмом, в котором скорость настолько заметно скачет. Если вы говорите про кинохронику, то там основная сложность вытащить картинку из шума, именно вытащить, а не подавить шум. И с самой картинкой там обычно беда страшная, коррекция скорости на этом фоне не проблема


      1. CyberAP
        24.12.2019 16:09
        +1

        Эта проблема есть на всех фильмах где снимали камерой с ручным приводом, либо использовали несколько разных камер (у каждой своя частота кадров). Я написал этот комментарий как раз потому что посмотрел какой результат получился и для меня сильно бросилась в глаза разница в скорости воспроизведения. Например на 1:15 начинается как будто бы замедленная съёмка, сравните с 5:47. Не берусь судить что такая разница в скорости вызвана именно этим, данных о том на какую камеру (или камеры) снимали Броненосец Потёмкин я не нашёл.


        1. putinBog Автор
          24.12.2019 17:17
          +1

          Спасибо за пояснения. Посыл понятен. Не забывайте про потери кадров. До нас дошел фильм с обрывами. Часть таких обрывов я компенсировал повторным удвоением. Часть дерганных моментов совсем убрал. Возможно, что это замедление вы заметили зорким взглядом. Конечно, ваш вариант с плаванием скорости не исключаем, ни на что не претендую. Меня смутило что википедия считает что снято в 19 фпс. Но по факту получилось как будто 12. Потому что удвоенные кадры только на 24 фпс смотрятся не медленно и не быстро. Загадка.


  1. 3263927
    24.12.2019 14:58

    впечатляет! столько инструментов использовано, но похоже без распознавания самих объектов сложно будет адекватно передать их цвет… задумался какого цвета должно было быть гнилое мясо и понял что моя нейронная сеть недостаточно обучена!
    очень круто получилось! интересно, в поточном режиме прямо во время просмотра удастся сделать оцветнение?..


    1. putinBog Автор
      24.12.2019 15:30

      Нужна топовая видеокарта. Прямо совсем. И то будет на грани.
      browser.geekbench.com/cuda-benchmarks
      У меня 1060, он выдает 3 fps на обработке. По этим тестам он хуже верха в 7 раз. Это мы не обсуждаем сколько сил надо, чтобы это запустить.

      Про мясо ремарку не понял, если натренировать на сюжетах с мясом, то и его раскрасит нормально. Ничего нового добавлять в архитектуру не надо


  1. AigizK
    24.12.2019 15:24

    Очень круто!!!


  1. philfreeeu
    24.12.2019 15:37
    +1

    Впечатлил масштаб проделанной работы. Любопытно, чего было больше — настойчивости или прухи.


    1. putinBog Автор
      24.12.2019 15:47
      +1

      Вы постеснялись написать слово «дури». Madskillz&otvaga

      Если без шуток, весь текст описывает типичную рабочую неделю разработчика нестандартного уникального ПО, так что наверное просто навык


      1. philfreeeu
        24.12.2019 20:31
        +1

        Я долго искал слово, которое бы означало как и искреннюю добровольную внутреннюю мотивация, так и добрую долю отвала башки. Ваше, пожалуй, наиболее точно.


  1. JamboJet
    24.12.2019 15:44
    +2

    Очень круто, вы молодец!
    Но столько мучений из-за слабого железа… я бы стал решать эту проблему не как инженер, а как менеджер: не проще ли было обратиться к коллеге/другу/знакомому с мощным системником и запустить у него эту задачу на ночь?


    1. putinBog Автор
      24.12.2019 15:55
      +5

      Зачем делать по уму, если можно через задницу?

      Серьезный ответ: в силу разных обстоятельств такой вариант решения проблемы не находился в поле возможных решений


      1. alex1478
        24.12.2019 16:35
        +1

        Просто полезная информация: В Microsoft Azure новым клиентам выдают 200$ на 30 дней и у них есть виртуалки с GPU.


      1. nidalee
        25.12.2019 06:41

        Если будете обрабатывать еще видео, можете написать мне, могу поставить на 3900Х+1080ti.


  1. denisshabr
    24.12.2019 16:40
    +1

    Чем Super-SloMo лучше одного из лучших решений SVP?
    Удивительно что авторы SloMo не сравнивают решение с самым известным SVP. Да, я понимаю, это немного другой мир Avisynth, да и библиотека только под Windows, но всё же. Да и вообще, что может дать нейронка, кроме медленной работы, в отрасли Frame Rate Conversion?
    Кстати недавно появилась ещё одна очень продвинутая штука DAIN у них улучшение качества FRC идёт за счёт создания карты глубины.

    p.s. что за музыка на 45:10?


    1. putinBog Автор
      24.12.2019 17:29
      +3

      Я серьезно работаю только под виндоуз и про svp знаю. Мне вот чисто инженерное чутье подсказывает, что математический алгоритм не может дать результат лучше, чем модель, берущая из памяти данные. Вот как вы проинтерполируете ладонь человека, если в первом кадре она к вам повернута узкой стороной, в следующем кадре она в другом месте и повернута пальцами. Алгоритм не сумеет нарисовать ее в полоборота с правильным количеством пальцев.

      Svp делает из плавного изображения еще более плавное. А при переходе из 12 в 24 кучи информации о движении просто нет. Хоп и лошадь появилась уже в середине кадра. До этого ее нет

      P.s. Это кастомная музыка. Ее в таком же виде нигде больше нет, в отдельном разделе статьи это описано


  1. rboots
    24.12.2019 16:59

    Ждём когда нейронные сети научатся озвучивать немое кино


  1. Oleg_Dolbik
    25.12.2019 00:09

    Так, исторический факт — на первых печатных копиях фильма красный флаг, поднимаемый над «Потемкиным» раскрашивали вручную…


    1. putinBog Автор
      25.12.2019 07:23

      И эта раскраска перенесена копированием цвета. Нейросеть про цвета флагов ничего не знает.


  1. bodqhrohro
    25.12.2019 01:59

    тон цвета скакал между кадрами
    А это ведь можно использовать как имитацию NTSC с помехами. Там в основном тон и плывёт. В PAL вместо тона плывёт насыщенность, что не так заметно, а в SECAM ни то, ни другое, но сигналы яркости и цветности часто путаются, приводя к «бахроме» после резких изменений яркости.


  1. ruslan_baturshin
    25.12.2019 07:24

    Мои аплодисменты!


  1. KMU
    25.12.2019 07:24

    Интесно! А вы не пробовали использовать NVidia Jetson Nano (производительность хорошая и цена до 100$, поддержка от NVidia)? Собираюсь ее купить.


  1. IndustrialV
    25.12.2019 07:26

    то реально круто!!!
    реально смотрится. ну конечно видно ИИ и подобные алгоритмы, но тем не менее смотрится!
    Работа программистская реально не малая! А главная рассудительная! Тут прям ваще почёт и уважение!

    (рекомендация запили прогу содержащую в себе все сделанные тобой наработки и сделай ей цену в 4.99$ или бесплатно вариант с ограниченным функционалом и полная версия за 4.99$ (бесплатно полностью для некоммерческого использования на территории России и бывшего СССР на авторизацию тест на вопросы из старых фильмов ;))) индийцам, кубинцам, северокорейцам, тоже в принципе можно бесплатно :D у них тоже много старого кино) ты конечно можешь даже потрясти так мир видеомонтажа ей с ног на голову врятли перевернёшь (но это будет бомба!!! как минимум петарда заметная у которой есть шанс стать проф продуктом что ППЦ!!!) если ещё будет возможность каждый модуль включать отдельно(отдельно стаб, отдельно цвет, отдельно тональность и т.п.), но для людей в этом мире ты сделаешь реально доброе дело, мак окупишь с лихвой, и народу приятно будет за 4.99$ инструмент такой для работы… это будет шикарно!!!) колво копий ну 10000-100000 реально и больше того, подписка на продукт за символические деньги типа 1$ в год… вообще куче народа будет не в напряг вовсе а вот людям будет приятно!!! ты сделаешь хорошее для этого мира! :)
    (вариантов капитализации могу рассказать ВАГОН!!! $_$ )

    Знаю малость рынок свадебщиков, видеоператоров, монтажёров и подстать, им реально подобный софт нужен. Т.е. много каких фишечек из перечисленных былибы очень в пользу людям для ряда не сложных задач и их автоматизированного решения. Может в первой версии проги она у тебя и не стала бы лучшей в мире по всем пунктам, но мне кажется год, 2 на этом поприще и у тебя будет уже вполне конкурентный продукт!!! Реально востребованный! (делать из Г вполне приемлемые сладости :) а из сладостей даже реально кулинарные шедевры (ну мне кажется что есть шанс!) )
    Об наборах этих фунций меня друг оператор один все время спрашивает о том кто какбы сделал(вплоть даже чтобы на краундфайндинговой основе там организовать чтонть) что либо на эти темы а ты тут прям козырными тузами и джоккерами ходишь )))
    у тебя тут вся колода джоккеров!!! :D

    П.С. вообще наверно в тонкомпенсации и яркости появляется реально интересная задача, типа создать сеть как глубинную остаточную сеть (deep residual networks, DRN), но по виду работы близкую к потоковой чтобы в ней накапливалось, и в ней одновременно пребывала информация о группе кадров(ну например какойто результат интерполяции в точки группы участков с кадра) и типа пока они там оно это дело вроде как и выбивающиеся нормировало но пока выходит с другой стороны и входящий влияет на выходящий, и выходящий на входящий… слоёв на… хрен знает сколько чтобы там одновременно в ней было под 12-25 кадров. былобы интересно таким макаром попробовать…
    одно заранее понятно: стробоскоп — НЕПРОЙДЕТ!!! :D

    П.П.С. есть ещё ряд того что можно прикрутить к проге чтобы это стало реально востребованным коммерческим продуктом для реально крутых пацанов! ;)
    и вообще былобы интерсно пообщаться на тему такой проги :D


    1. putinBog Автор
      25.12.2019 07:28

      Писать программы для себя и для людей это так же отличается как снимать на телефон Хуавей или Алексу. В планах умирать у меня пока нету.


  1. toivo61
    25.12.2019 10:51

    Прикольно!
    Но, в virtualdub-e и avisynthe уже есть большая часть инструментов. И дешейкеры, и построители промежуточных кадров, и шумодавы, и BW корректоры.
    Почти все с исходниками.


    1. putinBog Автор
      25.12.2019 13:29

      Да, да, помню-помню, в 2000 году записанные эфиры в нём обрабатывал.


  1. Tomasina
    26.12.2019 00:57

    Упорство и стиль изложения бомбические.
    Но работать с видео из консоли — это выше моего понимания.


    1. 3263927
      26.12.2019 12:07

      есть проект где можно даже смотреть видео из консоли!
      https://youtu.be/p0RWDyL1k80