Comments 187
Mail.ru Vision и Let's Enhance неплохо обрабатывали изображения, но они, к сожалению, не опенсорсныеТо ли дело Фотошоп)
бесплатноТо ли дело Фотошоп)
Ну и да, это подписка за 11,89 € /мес. включая НДС. Возможно я где-то не разобрался в их политиках лицензирования. Ну либо для разных стран/городов/платформ они показывают разные цены =)
Пару лет назад Adobe взяли с меня плату за неустойку при отмене подписки досрочно.
Ресайз до 25 дюймов в высоту с 100%-м подавлением шума.
Ресайз до оригинального размера.

Даже с исходным разрешением картинка выглядит немного чётче. Однако можно и больше действий вложить.
Filter-denoise
filter-sharpen edges
Дальше как автор статьи писал — ресемплинг с сохранением деталей 2.0 (в этот раз без возврата на исходное)


Основную проблему вижу в том, что там меняется прозрачность некоторых линий после начала штриха, ну и в том что оригинальный файл в слишком высоком разрешении. Ну и никто не мешает просто фильтром чёткости пройтись, однако это уже сразу даст определённую потерю авторского стиля.
Плюс, слишком уж много ненужных действий в принципе. Есть мнение что в ffmpeg, если подобрать подходящий набор параметров, можно быстрее получить идентичную картинку.
Каждый раз, когда будет сложный рисунок, будет эпик фейл.
ffmpeg -i input.mp4 -vf scale=3840:-2 \
-c:v libx264 -preset slow -crf 22 \
-c:a copy \
output.mp4
… да и фильтры для мультов вроде-бы были вроде ворпшарпа которого тут было-бы за глаза
А во вторых, месячная подписка стоит около 700 рублей — это фотошоп, лайтрум и что-то ещё. Вполне нормальная цена
Если хочется именно на месяц и только фотошоп, то это уже 1932 рубля.

Интересно, а сколько займёт ресэмплинг фильмов? ведь там более сложная картинка в плане количества фигур и цветов…
Вы не покрутили настройки waifu, думаю что удаление шума и профиль UpRGB могут дать результат лучше фотошоповского.
Ещё хотелось бы упомянуть Madshi Video Renderer — отрисовщик совместимый с многими видеоплеерами. С ним нет необходимости в конвертировании видео, только установить и раз покопаться в настройках проигрывателя. Если потянет видеокарта, то даже может нейросеткой NGU очень круто ресайзить. Там у него ещё есть удаление артефактов сжатия на нейросетях, удаление бандинга, да и вообще дофига всяких опций.
Интересно видеокарта уровня 1080 не потянет в реальном времени?
Нужен ускоритель нейросетей в который можно загрузить обученную сеть.
Думаю стартап с платой для улучшения мультиков/аниме который выпустит подобную карточку вполне может и взлететь.
Ведь давно есть SVP (SmoothVideo Project) который делает видео более плавным вставляя кадры. Можно прикрутить нейросеть которая будет еще и качество улучшать. Закинул любимый сериал запустил и через пару дней получил результат.
Offtopic, а ещё Windows по умолчанию конвертирует фоновую картинку рабочего стола в JPEG: https://www.reddit.com/r/pcgaming/comments/6kry64/protip_windows_automatically_compresses_wallpaper/
Единственный костыль, который заработал "в лоб" без сторонних программ: ПКМ по .bmp картинке и Set as desktop background в IE (Win7). Десятка вроде даже в PNG научилась, но тоже не всё так просто.
В нём есть множество методов для увеличения.
Среди них есть NGU, нейросетевой. Правда его результаты не сильно отличаются от Super-XBR (тоже очень крутой).
Есть два варианта применения:
1. Если есть мощная видеокарта, можно апскейлить в проигрывателе в реальном времени
2. Или разобраться, как можно направить поток от рендера в файл
p.s. для поиска проектов по true-нейросетевому апскейлу гуглить надо super-resolution neural upscale. Например:
А ведь по такому принципу можно и 60 фпс сделать… делаем твиннинг двух картинок, результат улучшаем, собираем всё с правильной скоростью, профит?
github.com/avinashpaliwal/Super-SloMo
Если так хочется играть то надо просто купить любую карту, а не придумывать костыли.
Если 4к то как бы перед покупкой надо понимать что берешь. 4к гейминг сейчас очень дорог.
У меня, например, 2к + 2080 fe. В самых тяжелых проектах 60-70 кадров есть, но для 4к это были бы неиграбельные 40-50.
Nvidia недавно как раз представила технологию «на лету улучшало», называется dlss.
неиграбельные 40-50
*Вспомнил детство с дай бог 20 фпс и заплакал...*
P.S. Не хотел вас задеть, просто как-то упустил момент, когда 40 фпс стали неиграбельными =)
Ну то есть я очень комфортно могу играть в Героев 3 на 12 фпс и совсем некомфотно — в КС или Пубжик.
И даже при таких условиях при панорамной съемке 24 кадрами (камера неспеша летит и показывает природу) видно строб, особенно в кинотеатре. И этот строб раздражает.
Хм, мне начало казаться что вы просто иронизируете.
в том-то и дело, что на CRT-мониторах. Они маленькие были.
Проблема в том, что 24 кадра на большом экране приводят к большому угловому смешению изображения между двумя кадрами. И на сценах где двигается весь фон, и достаточно быстро, выглядит это не как движение фона, а как прыжки. Впервые я заметил это на 27 дюймовом экране, а на 49 дюймовом я уже выбирал видеоплеер, который наиболее качественно уплавняет изображение. Даже купил 1 платный.
Вот сеговский, например
Во Flashback получается современный хипстерский графон без пикселей, мыла и странных артефактов.
Звучит конечно хорошо, но не работает пока кажется нигде
Есть аппаратные постобработчики сигнала вроде Marseille mCable. Эффект варьируется в зависимости от исходной картинки. Особенно заметно на низких разрешениях.
Ну и программный ReShade</>.
У меня 50 дюймовый 4к телек, я там 720р от 1080р отличу, только если в лоб сравнивать, а ели просто включить фильм с достаточным битрейтом — не факт что отличу.
15" 3840х2160
Позвольте предложить ещё такой вариант: сеть single-image-super-resolution-1011 из Intel OpenVINO:
Исходная картинка (1920x1080): https://habrastorage.org/webt/z-/wn/yy/z-wnyyf2a33hbporlp-cmsz4t5w.jpeg
Результат (3840x2160): https://habrastorage.org/webt/kx/3t/ng/kx3tngnwfxav7_rjps4tbzn95nc.jpeg
Запуск сети ровно 1 секунда (980ms — 990ms). Ubuntu пишет, CPU: Intel® Core™ i5-4460 CPU @ 3.20GHz × 4, 16GB RAM.
Пример обрабатывает только первый кадр. Если кому понравился результат — можно допилить до записи видео файла с помощью cv::VideoWriter
.
import numpy as np
import cv2 as cv
from openvino.inference_engine import IENetwork, IEPlugin
model = 'single-image-super-resolution-1011'
prefix = '/opt/intel/computer_vision_sdk_2018.5.445/deployment_tools/intel_models/' + model + '/FP32/' + model
# Load a plugin.
plugin = IEPlugin('CPU')
# Copy single-image-super-resolution-1011.xml and do global replacement of numbers:
# 1920 -> 3840
# 1080 -> 2160
# 960 -> 1920
# 540 -> 1080
# 480 -> 960
# 270 -> 540
w = 960
h = 540
print(h*4, w*4)
# Load network.
net = IENetwork(model + '.xml', prefix + '.bin')
exec_net = plugin.load(net)
cap = cv.VideoCapture('1080_sample.mp4')
while cv.waitKey(1) != 27:
hasFrame, frame = cap.read()
if not hasFrame:
break
cv.imwrite('img.jpg', frame)
frameResized = cv.resize(frame, dsize=(w*4, h*4), interpolation=cv.INTER_CUBIC)
frame = cv.resize(frame, dsize=(w, h))
blob = frame.reshape(1, h, w, 3).transpose([0, 3, 1, 2]).astype(np.float32)
blobResized = frameResized.reshape(1, 4*h, 4*w, 3).transpose([0, 3, 1, 2]).astype(np.float32)
outputs = exec_net.infer({'0': blob, '1': blobResized})
out = outputs['129'].reshape(3, 4*h, 4*w).transpose(1, 2, 0)
cv.imwrite('out.jpg', (np.clip(out, 0, 1) * 255).astype(np.uint8))
break
При выводе на экран 2560x1600 не видно отличий от изображения такого же размера с шарпом:
https://ucarecdn.com/e13a4480-a12b-40ca-a13d-984231c18ea2/-/quality/best/-/sharp/15/
Кажется, вы всё же ошибаетесь. Смотрим описание H.264:
Многокадровое предсказание… Использование сжатых ранее кадров в качестве опорных… Позволяется использование до 32 ссылок на другие кадры… Компенсация движения с переменным размером блока
Любое видео раскладывается на отдельные кадры и собирается обратно без каких-либо потерь качества (как визуально, так и по всяким шумомерам а-ля *SNR), потому что оно и есть отдельные кадры, как бы их не сжимали и не распространяли.
Смотрите, в видео 30 фпс будет тридцать отдельных кадров. I, B или P в нашем случае без разницы. Вот типичное распределение кадров в видео x265 с пресетом slower:
x265 [info]: frame I: 6, Avg QP:15.77 kb/s: 60673.84Все 1133+229+6 — отдельные кадры, любой из них можно взять и увеличить, либо сразу все. Если частота кадров и продолжительность остались прежними, никаких странностей не будет.
x265 [info]: frame P: 229, Avg QP:18.37 kb/s: 17777.54
x265 [info]: frame B: 1133, Avg QP:28.17 kb/s: 2385.00
Ведь переход от сжатия отдельных кадров (mjpeg ) к дельтам от предыдущих кадров в своё время был прогрессом и позволял повысить степень упаковки.Он и повысил. Благодаря P и B фреймам. Но кадрами они из-за этого быть не перестали. Можете сами проверить — разберите 30fps видео на кадры и соберите обратно тем же ffmpeg с тем же фреймрейтом.
Одна оговорка — смотря как вы его обратно в видео сжимать будете. Потому что кучка PNG это по-определению I-frame sequence.
I — P — B — B — B — P — B — B — B — I, каждый кадр — отдельное изображениеда ладно?
P- и B-кадры — как раз разностные, P — со ссылкой на один предыдущий, B — на несколько (предыдущих и/или последующих). Это после разжатия они становятся отдельными изображениями, а в файле (или потоке) представлены как разности от тех на которые ссылаются.
Поток только с I-кадрами по сути и будет MJPEG (впрочем, правильнее сказать — кодирование в MJPEG использует только I-кадры).
С тем что будет 30 кадров при 30 fps я не спорю.
Любое видео раскладывается на отдельные кадры и собирается обратно без каких-либо потерь качествада ладно? На ютубе при просмотре летсплеев зачастую на видео куча характерных артефактов сжатия заметна — и еще можно заметить что при движущемся фоне детализация падает по сравнению с моментами неподвижности.
P- и B-кадры — как раз разностные, P — со ссылкой на один предыдущий, B — на несколько (предыдущих и/или последующих). Это после разжатия они становятся отдельными изображениями, а в файле (или потоке) представлены как разности от тех на которые ссылаются.Смотрите, если вы скормите свое видео ffmpeg-у и скажете разложить на PNG (то есть в i-фреймы) он сразу же посчитает количество кадров и все их превратит в I-фреймы, не делая разницы между тем, что в видео было i, что было b и что — p, потому что отдельные изображения могут быть только i-фреймами. Вы, возможно, путаете\не различаете процесс сжатия видео и разжатия. Ту же самую кучку PNG наложите поверх своего видео в редакторе видео — не будет никакой разницы. Я этим чуть ли не каждый день занимаюсь. Хотя признаюсь — проще использовать даже тот же uncompressed mov в yuv или rgb и не возиться с кучей картинок, их банально импортировать дольше. Если в видео 30 кадров, то между этими кадрами ничего нет. Опять же, не важно какие они фреймы — разобрать эти 30 кадров на 30 картинок и собрать обратно в секундное видео 30 фпс можно без потерь. Не рассуждая сейчас о способах сжатия картинок в видео — там потери будут, если это не i-frame only кодек.
да ладно? На ютубе при просмотре летсплеев зачастую на видео куча характерных артефактов сжатия заметна — и еще можно заметить что при движущемся фоне детализация падает по сравнению с моментами неподвижности.Это банальное ограничение битрейта. Стоящему неподвижно изображению вполне может хватить 5 мбит\c или сколько там у твича. Чем больше движения в кадре, тем хуже качество — потому что большему количеству изменений в кадре нужно больше битрейта. H264, H265 и VP9 работают с макроблоками — если в каких-то нет движения, то там здорово экономится битрейт. Если движение везде — что-то сэкономить сложно. Но к вопросу конвертации видео-изображения-видео это не имеет отношения.
Смотрите, если вы скормите свое видео ffmpeg-у и скажете разложить на PNGне вопрос, но причём тут ваше исходное утверждение «в консюмерских кодеках нет связи между кадрами»?
Набор PNG — это как раз несколько нестандартный формат кодирования видео для «консюмерских» кодеков. Никто в здравом уме не использует такое ни для хранения видеофайлов, ни для передачи потока (вот когда станут общедоступны многотерабитные каналы и экза- и петабайтные хранилища, тогда может быть). Даже автор статьи изпользовал jpeg.
все их превратит в I-фреймы, не делая разницы между тем, что в видео было i, что было b и что — pестественно, после разжатия потока получаются полные изображения. Хоть для сохранения в отдельные файлы, хоть для вывода на экран. Это и есть функция декодера (в противовес функции кодера — выбросить из исходного набора изображений избыточную информацию, оставив необходимый минимум).
Но при этом b и p фреймы декодеру приходится «дорисовывать», основываясь на соседних i-фреймах в контейнере. Если из контейнера взять только голый b- или p-фрейм, никакой ffmpeg не сможет из этого фрейма построить полное изображение.
если в каких-то нет движения, то там здорово экономится битрейт— и за счёт чего же же оно экономится, по-вашему? За счет чего статичному изображению хватает низкого битрейта? Неужели за счет изменения степени сжатия каждого отдельно взятого изображения, независимого от соседних кадров?
Даже автор статьи изпользовал jpeg.Очень зря. PNG как бы архивировать не требуется — «использовал» и удалил.
Неужели за счет изменения степени сжатия каждого отдельно взятого изображения, независимого от соседних кадров?Мне казалось, что мы все это обсуждаем в контексте изначального комментария:
Это конечно интересный подход, но в нем не учитывается информация о связи последовательных кадров, т.е. о движении. Это может быть важным.Никакой таинственной информации о движении и связях последовательных кадров не нужно для того, чтобы их апскейлить — нужно просто разложить видео на отдельные кадры, раз уж апскейлер работает только с изображениями.
По всему остальному вы правы — воспроизведение и сжатие файлов нуждается во всех этих кадрах. Если без пары b или p еще можно выжить (просто артефакты полезут), то без i уже все совсем плохо будет.
Я говорю о вот таких вещах:
то при склейке увеличенных изображений могут появиться артефактыАртефакты от простых склеек не появляются, потому что видео безболезненно раскладывается на отдельные кадры — между ними ничего нет, только ссылки, которые в нашем случае нерелевантны.
Связь может быть важной для задачи апскейла, а может не быть — тут я судить не берусь (хотя склонен с вами согласиться — если мы после обычной распаковки не видим разницы между ключевыми и разностными кадрами — то и после их апскейла скорее всего не заметим).
Но вы-то утверждали «связи нет вообще», причём применительно к кодекам, а не набору полученных изображений.
Никто в здравом уме не использует такое ни для хранения видеофайлов, ни для передачи потока
Ну вот DNG используют.
нууу… тут можно придраться, что это не хранение и передача «готового продукта», а исходники. Вот, к примеру, фотографы raw хотя и хранят (и то не все), но в последующем повседневном обращении в Сети raw не встретишь.
Интересно, и какую длительность можно записать на одну карту (512G)? Так, говорят, в lossless по 7-8 Мб на кадр — при 60 fps где-то на полчаса получается. В принципе, не так мало.
Но где хранить такое, когда общий футаж фильмов перевалит хотя бы за полдесятка часов? В нынешних реалиях все равно получается — обработал, сжал, исходник выбросил. То есть «см. п. 1».
Не получится даже не столько из-за способностей карты памяти, сколько из-за пропускной способности интерфейса.
Но где хранить такое, когда общий футаж фильмов перевалит хотя бы за полдесятка часов?
Ну, нужна какая-то хранилка на 10++ полок с 10—12 ТБ винтами ;)
нууу… тут можно придраться, что это не хранение и передача «готового продукта», а исходники.Так в том-то и смысл, что любое сжатие ухудшает качество. Поэтому нужно количество этих сжатий минимизировать и на всех этапах (где это возможно) использовать не сжатый материал.
Интересно, почему не взлетели векторные мультики?
ждал появления 3D фильмов, которые рендерятся по принципу игрВ некотором смысле игры и являются таким фильмом.
Собственно, единственный плюс рендеринга на стороне пользователя — возможность выбора пользователем точки зрения. Игры это и дают. Ну еще они дают нелинейность (вариабельность последовательности нарратива), но это отдельная фича, перпендикулярная выбору ракурса, и не требующая рендеринга у пользователя. Были и «интерактивные фильмы» — именно фильмы (и даже по ТВ, не говоря уже о DVD), и игры, рассказывающие историю строго последовательно — где камеру вертеть можно, а изменить последовательность сюжетных сцен нельзя (большинство шутеров таковы). Хотя в играх, заточенных на пассивное восприятие истории зрителем, чаще всё же эти две фичи совмещены — см, например, What Remains of Edith Finch, Vanishing of Ethan Carter.
Берем сжатое видео.
Выгружаем ведро жипегов.
Апскейлим.
Пережимаем обратно в видео.
Наслаждаемся нормальным качеством.
habrastorage.org/webt/nf/wz/-h/nfwz-hslcnhsozwxmtqpm5rkpo8.jpeg
Бесплатно, потоком, без промежуточных jpeg и Фотошопа.
Это то, что нашлось за минуту гугления.

А так как текст сам по себе имеет ценность (в отличие от 100499 текстов с кликбейтными заголовками), то я бы сказал, что здесь громкое название почти оправдано (я вообще надеялся на какой-нибудь онлайновый сервис, но ладно).
Из доступных, butterflow показал себя весьма хорошо. Думаю, что на векторной графике он должен сработать отлично. Умеет работать на GPU через OpenCL.
Правда теперь вам понадобится в 2 раза больше места на жестком диске и ещё в несколько раз больше терпения.
Хотя вроде современные телевизоры и сами неплохо справляются с этой задачей.
Конечно, это было немного по-ламерски, что ли…
Зато понятно и доступно.

Разница между Ps и LetEnhance огромна. Если после Ps картинка осталась мыльной, то LetEnhance, похоже, дорисовывает текстуру. (хорошо видно через новую вкладку)



А вот Let's Enhance и правда иногда старается добавить «от себя», и даже классифицировать поверхности (например, к фотографии бородача сервис применит отдельный алгоритм прорисовки волос). Там даже при загрузке есть такая опция, как «Добавление текстур».
Интресно, только непонятно зачем лишние действия с аудиодорожкой — зачем её извлекать, зачем перекодировать в mp3 (что приведёт к потере качества)? Чтобы её не перекодировать, можно указывать -acodec copy
. А чтобы не извлекать, можно на последнем этапе указать исходный видеофайл, чтобы ffmpeg взял аудиодорожку прямо из него. Только в этом случае надо правльно указать параметр -map
, чтобы он не стал использовать видеоряд из этого файла.
Господа, а какой наиболее качественный метод порекомендуете для upscale JPG с фотокамер, с целью печати в большом размере?
Даже если это займет сутки для одного кадра, главное качество :)
Почему на официальных релиза 4к картинка тёмная?
К примеру — скриншот 4k издания «Короля Льва»

Пере выложите, и лучше под спойлер.
Вот и у меня такое же чувство что дела в нём.
я не работаю с видео и не знаю весь зоопарк программ и возможностей в них заложенных, может быть есть какие-то программы/плагины для умного увеличения видео… для умного увеличения фото в свое время было много плагинов…
прошу прошения, если это кто-то уже предложил раньше.
но его тренировать нужно желательно под разный тип контента, из приятного оно с GPU работает
Но есть же на Хабре замечательная статья-исследование в тему:
habr.com/ru/post/446032
Которую я нашёл в поисках подробностей о Topaz Gigapixel AI, который как раз и есть способ с нейросеткой, правда тоже для картинок.
Зато у него есть полноценный Trial на 30 дней. И судя по тестам, справляется с апскейлом анимации он лучше Photoshop Waifu2x и пр.
Морти, мы в UltraHD! Как посмотреть любой фильм в 4K, дорисовав его через малоизвестную нейросеть