Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Я сделал по этому проекту уже достаточно, чтобы начать говорить о нём, как о готовом к выходу, а не просто как о задумке, движущейся по бесконечной дороге к туманному и неопределённому «улучшению качества».
Большинство историй начинаются не с конца, но эту определённо стоит начать именно так. Последние девять месяцев я работал над ремастером сериала «Глубокий космос 9» – с тех пор, как на рынке начали появляться программы для увеличения разрешения видео с помощью ИИ. Увидев, какое качество можно выжать из старых файлов MKV, я решил, что начну с самого начала, используя оригинальный и более качественный источник – DVD. Через девять месяцев я достиг своей цели: создал метод ремастера и увеличения разрешения «Глубокого космоса 9», не основанный на ручном прочёсывании эпизодов и тонкой подстройке алгоритмов деинтерлейса в попытках минимизировать компромиссы, связанные с качеством картинки. И в данной статье я продемонстрирую результаты этого труда.
Я создал прогрессивную версию «Глубокого космоса 9» с частотой кадров 23.976 при помощи модели под кодовым названием «Рио-Гранде». Я пока не тестировал этот метод на всём сериале целиком – однако он хорошо показал себя на выборочных эпизодах из сезонов 2, 4, 5 и 6. Хочу выразить благодарность Сирилу Найдерприму, нашедшему смехотворно простое решение, указанное ниже. И хотя Рио-Гранде может выдавать ошибки – их примеры я приведу ниже – если она портит эпизод так сильно, что вы не можете с этим смириться, для неё есть альтернатива.
Также у меня получилось сделать конвертацию в вариант с 59.94 кадрами в секунду с идентичным качеством при помощи модели под кодовым названием «Ориноко». Ориноко корректно сохраняет движение во всех сценах, и прилагается к проекту для страховки. По качеству она сравнима с Рио-Гранде, но имеет в 2,5 раза больше кадров, на обработку которых уходит в 2,5 раза больше времени. Рио-Гранде должна работать – но если не сработает, тогда сработает Ориноко. Если обоих методов для какого-то эпизода окажется недостаточно, я придумал способ подстроить систему вручную.
Все включённые в статью видео с YouTube устанавливайте в 4К для наилучшего качества воспроизведения – меньшие разрешения не передают качество картинки.
Я сделал два варианта титров, чтобы продемонстрировать два разных варианта увеличения разрешения, которые предлагает система Topaz: Theia Detail (настройки по умолчанию) и Gaia-CG. Вот результат работы Gaia-CG:
Это не пошаговая инструкция, описывающая процесс обработки видео так, чтобы с ним мог справиться любой. Написание такой инструкции стало бы отдельным проектом. Однако я выдам достаточно информации для того, чтобы человек, поверхностно знакомый с AviSynth, смог повторить оба подхода.
Результат работы Theia Detail:
На несколько секунд пропадает часть кадра, когда баджорский грузовой корабль огибает станцию. Это уникальная ошибка, нигде более в шоу я её не встречал, и она достаточно часто возникает, вне зависимости от используемых фильтров. Она всегда проявляется на титрах, и почти не портит картинку – не стоит волноваться о том, что у случайных кадров из видео будут пропадать блоки.
Большинство видео получены не менее чем двумя разными способами. Если вам не нравится результат работы Theia, попробуйте Gaia-CG. Если не устраивает Gaia-CG, вам может понравиться Gaia-HQ – в статью я включил только один пример её работы.
Максимальный варп
Рио-Гранде и Ориноко стараются как можно реже идти на компромиссы, когда дело касается качества картинки. Каждый этап процесса продуман так, чтобы сохранить за счёт места на накопителе все детали до последнего кодирования, после которого вы уже вольны выбирать степень потери в качестве.
Все ролики, приведенные здесь, были закодированы в 0.0 H.264, а потом разрешение увеличивалось покадрово и без потерь. Я кодировал эти клипы в формат H.265 и с параметром CRF равным 6, что оказалось чрезмерно много. Век живи, век учись. Между значениями параметра CRF 14 и 20 есть едва заметная разница на стоп-кадрах, а 25 выглядит уже довольно уродливо.
Модели увеличения разрешения: избегайте Artemis и увеличения разрешения на 200%
Я записал не менее одного примера для каждого из режимов увеличения разрешения, который предлагает Topaz, за исключением Artemis-LQ и Artemis-HQ. Эти алгоритмы совершенно не подходят для «Глубокого космоса 9» – не то, чтобы они выдавали какой-то совершенный мусор, но на содержимое этого сериала они реагируют плохо. Считайте, что они не подходят для этой задачи. Результат работы Gaia-HQ меня не особо впечатлил, хотя один пример я всё же выложил. Остались две модели Theia и Gaia-CG.
Мне всегда больше нравилась Gaia-CG, поэтому большая часть сделана этой моделью, хотя я также продемонстрировал семейство алгоритмов Theia. У них есть настраиваемые параметры для шума, чёткости и восстановления деталей – всё это может быть очень полезным при попытке убрать шум с уродливого пятна на стене или ковре.
Стоит избегать увеличения разрешения на 200%. Оно порождает ошибки там, где в источнике их нет, а качество картинки значительно уступает тому, что получается при увеличении на 400%. Учтите, что у процесса восстановления есть особенность – он делает шов по правой или левой стороне кадра. Его можно потом легко отрезать, но это нужно учесть.
Topaz предлагает варианты увеличения разрешения без потерь через изображения, или через MP4 с потерями. Все ролики, что вы видите, сделаны через конвертацию в PNG без потерь.
Сколько дополнительных деталей было восстановлено?
Безумная идея, благодаря которой я отправился по этому пути, заключалась в том, что я могу извлечь дополнительную визуальную информацию, обратившись к оригинальным источникам на DVD вместо старых файлов резервной копии. Вот пример лучшей моей попытки увеличения разрешения от января:
Вот так было в прошлом.
Хотя некоторые улучшения стали возможными благодаря низкоуровневым улучшениям ИИ-программам для увеличения разрешения, программе нужно получить достаточно информации, чтобы увеличивать разрешения картинки, не превращая её в мешанину. Представьте себе кадр, где всё отрендерено в разрешении DVD, а волосы Одо – в 4К. Это выглядело бы очень странно. Чем больше деталей способна извлечь программа, тем больше шансов у неё выдать что-то красивое. Возврат к DVD дал программе больше материала для работы.
Так это выглядит сегодня.
Чтобы дать представление о прогрессе, привожу три кадра с изображением «Дефайнт» – то, как он выглядит на DVD, лучшее увеличение, которого я смог достичь в феврале, и лучший результат на сегодня:
«Дефайнт» на DVD. Лучше, чем на Netflix.
Февраль 2020: лучше, но я считал, что можно сделать ещё лучше.
Вот так-то лучше. Энкодер Ориноко.
Вот мой любимый кадр «Дефайнт» из всего сериала. В апреле я очень гордился тем, что из него вышло. И до сих пор выглядит неплохо.
Мне до сих пор нравится, но мы всё равно можем лучше
Тут очевидна помощь правильно подстроенной модели ИИ. Улучшение обработки может привести к тому, что модель будет подчищена немного по-другому, однако некоторые детали корпуса поменяли форму.
Преимущества очевидны. Каждый раз, когда я сравниваю видео с увеличенным разрешением, сделанную на основе старых файлов MKV с видео, сделанным на основе DVD, последнее выигрывает.
Так насколько хорош результат?
Тщательная обработка и тщательное увеличение разрешения, по моему мнению, способно дать «Глубокому космосу 9» чёткость, свойственную контенту, который обычно называют «HD» – хотя картинка всё равно ограничена особенностями цветовой гаммы NTSC, по сравнению с более поздними стандартами типа «Rec. 709». По крайней мере, если допустить отклонения от идеала, она выглядит лучше любого DVD, который вы когда-либо видели. А в лучших случаях – и я считаю кадр с Сиско одним из лучших – по меньшей мере, у полученной картинки детализация достигает уровня HD.
Предпринятые мною во время восстановления шаги починили некоторые огрехи источника, но не все. В эпизоде «Путь воина» есть одна последовательность кадров, которая выглядит так, будто на плёнку что-то пролили – как исправлять такое, я не знаю. Все результаты кодирования, приведённые ниже, сделаны на Рио-Гранде.
Путь воина: это не иллюзия
В эпизоде есть две лучших сцены битвы четвёртого сезона. В первой Сиско использует «Дефайнт», чтобы спасти кардассианский корабль, обстреливаемый клингонами. Видно, что специалисты по спецэффектам экспериментировали с повторным показом смерти персонажей, сделанным со сторонней точки зрения – а такого в «Следующем поколении» не увидишь. Очевидно, что ребята из спецэффектов от души развлеклись с «Дефайнтом».
Вторая большая сцена битвы приводится ниже. В ней присутствует прекрасная отсылка к пилотной серии сериала, когда Кира, блефуя, пытается заставить эскадрон кардассианских кораблей поверить в то, что станция вооружена гораздо лучше, чем на самом деле.
Но в этот раз всё сделано по-другому. Сначала у видео увеличено разрешение при помощи Theia Fidelity с настройками по умолчанию, а потом обработано в Gaia-CG. Последнюю я ранее использовал для создания скриншотов:
Я включил в обзор сцены общения персонажей, чтобы продемонстрировать, что эти технологии обработки работают не только с боями в космосе или с космическими кораблями. «Глубокий космос 9» – это далеко не только битвы, снятые на компьютере, просто в сериале есть несколько отличных примеров этих битв, особенно по стандартам 90-х годов. Ниже — Gaia-CG:
Потерянный рай
«Дефайнт» в этой битве сражается с «Лакотой», в то время как часть звёздного флота пытается совершить переворот. В клипе специально показано, что бывает, когда Рио-Гранде не совсем правильно обрабатывает сцену. По большей части всё работает, но в конце заметно дёргается. И я убедился, что дело тут в Рио-Гранде – Ориноко обрабатывает всё идеально гладко. Если вас не беспокоит небольшое дёргание, то используйте Рио-Гранде. Если беспокоит, попробуйте Ориноко.
Далеко за звёздами
Одно из преимуществ научной фантастики – создатели шоу могут легко обходиться с вопросами путешествий во времени. В этой серии Бенджамина Сиско забросили в 1950-е – по крайней мере, с его точки зрения – и он сталкивается с расовыми несправедливостями той эпохи. Разрешение увеличено в Gaia-CG:
В бледном лунном свете
Величайший из эпизодов «Глубокого космоса 9» заканчивается продирающим до дрожи монологом. Разрешение увеличено в Gaia-CG:
Та же сцена, рендер в Theia Detail с 10% увеличением четкости, 20% удалением шума и 20% восстановлением деталей.
Жертва ангелов
Вы же знали, что мы вернёмся к этому эпизоду? В эпизоде «Первый флот» (ниже, рендер в Gaia-CG) федерация решает сразиться с превосходящими совместными военными силами кардассианцев и доминионцев. Мне нравятся манёвры кораблей класса «Галактика». С определённых углов они часто кажутся толстыми и нескладными, а с других смотрятся очень хорошо. В «Глубоком космосе 9» ситуация с этим гораздо лучше, чем в «Следующем поколении».
Первое нападение не даёт Дефайнту проделать необходимую ему брешь. Звёздный флот решает попытаться прорваться через вражеский фронт, хотя силы противника превосходят их вдвое. Эту сцену я решил отрендерить различными способами. Сначала — Gaia-CG:
Затем Gaia-CG с CRF=20. Тут потеря качества получилась небольшая, но сильнее поднимать это значение не рекомендую. Проблема с использованием DVD в качестве источника состоит в том, что качество начинает страдать уже после потери небольшого количества деталей, и информация, полученная с интерполированной и увеличенной картинки и так не особенно хорошая. При постепенном понижении качества в какой-то момент оно падает очень резко. CRF=25 оказалось слишком много.
Gaia-HQ:
Theia Detail, настройки по умолчанию:
Наконец, Theia Fidelity с 20% резкостью, 30% восстановлением деталей, 20% уменьшения шума:
Хотя я сконцентрировался на последних сезонах шоу, такое кодирование и увеличения разрешения работает и на ранних. Просто учтите, что доступный нам исходный материал для ранних сезонов не такого хорошего качества.
С демонстрацией закончили. Поговорим о реализации.
Как кодировать Рио-Гранде
По непонятным мне пока причинам, файлы, которые создаёт StaxRip при помощи указанных методов, не проигрываются нормально в Windows Media Player или Apple Quicktime. Но они отлично проигрываются в VLC или MPC-HC. Если приведённые ниже скрипты возвращают ошибку, убедитесь, что редактор не заменяет кавычки.
Для кодирования методом Рио-Гранде нужно сграбить DVD программой DVD Decrypter и создать индексный файл D2V при помощи DGIndex или другой такой же программы. Затем запустите свой любимый интерфейс для AviSynth, если его используете. Лично я использую StaxRip.
Скрипт для AviSynth привожу ниже (наша CMS заменяет кавычки, поэтому вам, возможно, придётся это подредактировать).
TFM()
TDecimate()
QTGMC2 = QTGMC(Preset=”Very Slow”, SourceMatch=3, InputType=2, Lossless=2, MatchEnhance=0.75, Sharpness=0.5, MatchPreset=”Very Slow”, MatchPreset2=”Very Slow”)
QTGMC3 = QTGMC(preset=”Very Slow”, inputType=3, prevGlobals=”Reuse”)
Repair(QTGMC2, QTGMC3, 9)
Альтернатива моделям Рио-Гранде и Ориноко, которую я, правда, тестировал недолго:
TFM()
TDecimate()
QTGMC2 = QTGMC(Preset=”Very Slow”, SourceMatch=3, TR2=5, InputType=2, Lossless=2, noiserestore=0.1, NoiseDeint=”Generate”, grainrestore=0.1, MatchEnhance=0.75, Sharpness=0.5, MatchPreset=”Very Slow”, MatchPreset2=”Very Slow”)
QTGMC3 = QTGMC(preset=”Very Slow”, SourceMatch=3, Lossless=2, InputType=3, TR2=5)
Repair(QTGMC2, QTGMC3, 9)
Такой скрипт вроде бы выдаёт качество чуть получше, чем Orinoco Standard, в плане ряби.
Если ваша картинка искажается, попробуйте откатиться до TR2=4. Это же относится и к Ориноко, только нужно будет убрать “InputType=2” и “InputType=3” из Рио-Гранде.
Вот и всё. Также у вас будет возможность вставить шум обратно в видеоролик во время работы этих скриптов. Шум, добавленный в один из проходов QTGMC, останется на картинке после восстановления. Рио-Гранде не даёт на 100% идеальную картинку, всё же на частоте 29,976 к/с он работает почти идеально на всех сценах, что я протестировал, кроме одной. Если у него окажется больше проблем, чем я ожидал – как раз для этого я и сделал Ориноко. Технически возможно будет отрендерить какую-то конкретную сцену на 59.94 к/с, а потом включить её в версию на 23.976 к/с, собрав VFR-файл во время компиляции полученных изображений в видео.
Прогоны QTGMC требуются для улучшения картинки, и хотя я открыт для предложений, пока ещё ничего из того, что я пробовал, и близко не подошло к качеству, которое выдаёт этот скрипт. Его можно подправлять в плане глубины воздействия на картинку и времени обработки, но вы заметите, что при переходе от Very Slow к Slow или Medium качество ухудшится достаточно заметно. Если вы любите шум в картинке, и не против потратить время на выискивание артефактов (или знаете, как избавиться от них другим способом), тогда Slow будет вашим выбором.
Единственный минус такого способа прогона QTGMC – иногда он выдаёт рябь в какой-то части сцены. Мне проще её игнорировать, а все те решения этой проблемы, что я пытался найти, в итоге вредят ещё больше. И хотя мне хотелось бы от этого избавиться, пока это относится к разряду терпимой «особенности».
Последовательности “InputType=2” и “InputType=3” очень важны. Прогон единственной копии QTGMC не даст того же эффекта. Прогон двух копий с “InputType=2” не дадут того же эффекта. Существует девять возможных способов комбинирования входящих типов при прогоне восстановления картинке, и я испытал их все. Комбинация «2,3» работает лучше всего – от эпизода «Эмиссар» до «Что ты оставил за собой».
Также я испытал все 25 функциональных режимов Repair (восстановления), которые поддерживает AviSynth. Вам нужен режим ,9. Если по какой-то причине он вас не устраивает, попробуйте ,1. Большинство других практически не влияют на результат, а некоторые из них даже интересным образом ломают картинку. Я множество раз проверял их все, просто чтобы посмотреть, как меняется конечный результат в зависимости от выбранного режима.
Как кодировать Ориноко
Ориноко кодировать непросто, но он справляется куда как лучше, чем я имел право ожидать.
Всё начинается с того, что вместо одного файла мы создаём два. Закодируйте первую версию эпизода при помощи следующего скрипта:
TDeint(mode=1, type=2, tryweave=true, mtnmode=3, full=false, ap=10, aptype=2, slow=2)
Он даёт указание TDeint выдать удвоенный набор кадров, провести интерполяцию ядра [kernel interpolation], попытаться восстанавливать кадр при помощи переплетения [weaving], если в результате артефактов получается меньше, чем при деинтерлейсе, и применять деинтерлейс к тем кадрам, где есть интерлейс. Такой режим сохраняет прогрессивные кадры, включённые в NTSC-источник. На втором месте по качеству после опции Type=2 была опция Type=5, но она создавала больше проблем, чем решала.
Теперь отложим на время полученный клип и обратимся к другому. Его нужно прогнать через следующий скрипт:
QTGMC2 = QTGMC(Preset=”Very Slow”, SourceMatch=3, Lossless=2, MatchEnhance=0.75, Sharpness=0.5, MatchPreset=”Very Slow”, MatchPreset2=”Very Slow”)
QTGMC3 = QTGMC(preset=”Very Slow”, prevGlobals=”Reuse”)
Repair(QTGMC2, QTGMC3, 9)
Скрипт похож, но не идентичен тому, что мы использовали для Рио-Гранде. Та реализация QTGMC работает в прогрессивном режиме. В случае с Ориноко нам нужно удвоить частоту кадров, с базовой 29.97 к/с до 59.94 к/с. После того, как частота кадров у QTGMC и TDeint совпадает, мы запускаем восстановление и на них. Если запустить два клипа с разными частотами кадров в режиме Repair, вы это сразу увидите – на экране будет виден странный подвижный шов.
Это, конечно, как я понимаю, поставленный вверх тормашками подход к редактированию видео – однако в моём безумии есть смысл. Причина, по которой люди обычно не вставляют кучу кадров видео с целью поднять частоту с VFR 23.976 / 29.97 до 59.94 к/с, состоит в том, что интерполированные таким образом карты, увеличивающие частоту, могут приводить к появлению визуальных ошибок и других проблем. Возникает уловка-22: если их не включать, выходной файл получится дёрганым. Если их включать, то смена границ кадра иногда будет выглядеть очень странно, или разные части кадра будут сливаться вместе. Ситуация так себе.
Но есть способ её исправить.
clip1=FFVideoSource(“C:\DS9S6D2\Sacrifice-TDeint.mkv”)
clip2=FFVideoSource(“C:\DS9S6D2\Sacrifice-QTGMC-ToPairWithTDeint.mkv”)
Repair(clip1, clip2, 9)
Мы создаём интерполированный файл QTGMC для того, чтобы он стал чётким и чистым источником для файла Sacrifice-TDeint. Как я уже сказал, я использую QTGMC потому, что другого такого метода для получения чистого видео я не нашёл. Для уменьшения шума в картинке используйте настройку Very Slow.
На полученном ролике можно по желанию снова прогнать QTGMC, однако тогда видео станет выглядеть чересчур обработанным. Модели Theia способны несколько компенсировать этот эффект благодаря достаточно эффективному алгоритму удаления шума.
С точки зрения качества Ориноко и Рио-Гранде дают примерно одинаковый результат, и я часто даже не могу заметить разницу при их покадровом сравнении (не считая интерполированных кадров, естественно). Я предпочитаю Рио-Гранде, поскольку она проще и работает быстрее, но не могу гарантировать, что она сработает на всех 176 эпизодах шоу. Если вы наткнётесь на эпизод, движение в котором дрожит или скачет, попробуйте вместо Рио-Гранде прогнать его через Ориноко.
Недостатки и проблемы
Ориноко и Рио-Гранде не идеальны. Я всё ещё ищу метод устранения ряби. Это небольшая проблема, но, практически, единственная из нерешённых. Наилучшим решением на сегодняшний день будет использование MCTemporalDenoise, однако, похоже, этот метод полностью однопоточный, и, кроме того, доставляет мне и других проблем с качеством.
Если хотите поэкспериментировать с MCTemporalDenoise, рекомендую устанавливать количество пикселей до 7, а силу эффекта не задирать выше 2-3. Рябь полностью не исчезает, но кое-где становится получше. Если вам не нравится получающееся качество, разбирайтесь с моделями увеличения разрешения Theia и попробуйте применить уменьшение шума на 10-20%.
Моей целью было создать универсальный темплейт для всего проекта, но я буду записывать все изменения, которые необходимо внести в модели, чтобы справляться с проблемными эпизодами.
Важное замечание по поводу считывания первого сезона с DVD
StaxRip очень странно себя ведёт при загрузке файла D2V, содержащего 98-99% видео. У меня он не один раз менял частоту кадров – с автоматической 29.97 на 23.976. И в таких случаях он перезаписывает файл, созданный DGIndex. Если вы примените к файлу с частотой кадров 23.976 модель Рио-Гранде, получите контент в 19 к/с, который будет очень плохо выглядеть.
Я пока пытаюсь разобраться, из-за чего это происходит. На эпизодах с 98,5-99,5% видео обычно можно предположить, что с частотой 29.97 идут только титры, и закодировать эти эпизоды, опустив сегменты TFM/TDecimate.
В следующий раз… на проекте увеличения разрешения «Глубокого космоса 9»
Закончив проект, я могу начать грабить эпизоды с дисков и кодировать. Я собираюсь написать набор обучающих материалов с инструкцией о том, как это делать, сделать тест на скорость для рабочих станций и решить проблемы с конкретными эпизодами. Я придумал совершенно свободный метод увеличения разрешения, который, хотя и работает не так хорошо, как Topaz, очевидно улучшает картинку. Также хочу разобраться с PAL.
ViacomCBS не считает «Глубокий космос 9» достойным ремастеринга. Я думаю, что они неправы. То качество, что можно выжать из DVD, нельзя назвать идеальным, поэтому я не называю результаты своего труда 4К или UHD, хотя в подобных проектах часто люди бросаются такими терминами. Можно растянуть «Глубокий космос 9» до разрешения в 4К, но нельзя выжать такое качество из DVD-источника. Решение не идеальное, но оно на много световых лет обгоняет все предыдущие варианты. Если окажется, что Рио-Гранде часто допускает ошибки с частотой 23.976, мы найдём решение для этих эпиодов. Есть все основания полагать, что новая карта Nvidia GeForce RTX 3080 серьёзно ускорит подобное увеличение разрешения, что облегчит преобразование до частоты кадров 59,94.
Больше ни одному фанату «Звёздного пути» не придётся ждать, пока ViacomCBS найдёт финансовый смысл во вложениях в собственный архив. DVD и ПО будет стоить вам денег, а также вам придётся потратить на проект много вычислительного времени. На карточке RTX 2080 уходит порядка 8-11 часов на увеличение разрешения одного эпизода с частотой кадров 23.976. Частота в 59.94 отнимает пропорционально больше времени, хотя кодирование можно ставить на паузу и продолжать по необходимости. На сегодня наилучшим показателем было 10-14 часов на эпизод. Это порядка 2464 часов, или около 103 дней для всего сериала. Проект находится примерно на границе возможного для отдельного человека.
Повторюсь, что вы можете просто прогнать DVD через AviSynth, чтобы значительно улучшить качество и увеличение разрешения отдельных эпизодов. Я, к примеру, задумывался над тем, чтобы совсем пропустить 1-й и 2-й сезоны. Также я ожидаю, что Ampere сможет значительно улучшить эффективность своего ИИ-движка.
Будет ли большинство людей этим заниматься? Нет. Большинство людей посмотрит сериал на Netflix, где качество будет гораздо ниже, чем на DVD.
Но с сегодняшнего дня никто уже не обязан этого делать. Теперь вы можете увидеть работу специалистов по визуальным эффектам и актёров в том виде, в котором они это задумывали. Ориноко и Рио-Гранде не идеальны, но они показывают, сколько качества можно выжать с DVD конца 90-х. GPU становятся всё быстрее. ИИ0-увеличители разрешения становятся умнее. Даже если сегодняшний ваш компьютер или GPU не сможет справиться с подобным проектом, то следующему он может оказаться по плечу.