Я твердо решил, что хочу увидеть этот мультсериал в 4К, хотя и совершенно не умею писать нейросети. Однако решение было найдено! Любопытно, что нам даже не придется писать код, понадобится лишь ~100 ГБ места на диске и немного терпения. А результат — четкое изображение в 4К, которые выглядит достойнее, чем любая интерполяция.
Подготовка
Во-первых, надо сразу понять, что в открытом доступе нет технологии по увеличению видео с помощью нейросетей. Вообще. Но зато есть несколько проектов, которые способны увеличивать фотографии. А раз так, давайте перекодируем наше видео в огромную кучу кадров!
Это можно сделать через Adobe Premiere Pro или другую программу для работы с видео, но я уверен, что такая установлена далеко не у всех. Поэтому давайте воспользуемся консольной утилитой ffmpeg. Я взял первую серию первого сезона, и понеслось:
$ ffmpeg -i RiM01x01_4K.mp4 -q:v 1 IM/01x01_%05d.jpg
К слову, параметр -q:v 1 означает, что мы выводим JPG в максимально возможном качестве.
Подождав примерно 10 минут, мы получим большущую папку с изображениями. У меня она заняла 26 ГБ.
Осталось обработать каждый из этих кадров!
Как будем обрабатывать?
Я нашел три варианта, работающих более-менее нормально — это небезизвестный Let's Enhance, waifu2x (натренирован на аниме) и Mail.ru Vision.
Чуть позже я обязательно покажу примеры.
Mail.ru Vision и Let's Enhance неплохо обрабатывали изображения, но они, к сожалению, не опенсорсные, то есть для обработки 31000 картинок нам придется писать создателям на почту и, вероятно, немало заплатить. Поэтому я пригляделся к оставшемуся waifu2x, но он не порадовал меня качественным результатом, были шумы и нечеткости. Все-таки «Рик и Морти» — это не аниме.
Я уже было отчаялся бесконечно листать Github и тематические форумы, но… Спасение вдруг пришло! Нашелся вариант, который работает на машине локально, обрабатывает картинку меньше, чем за секунду, и показывает отличное качество. И вы не поверите, кто в очередной раз пришел нам на помощь!
Adobe Photoshop!
И нет, я не буду рассказывать true story о том, как там можно парочкой фильтров сделать хорошую картинку. Adobe действительно натренировали самую настоящую нейросеть, которая при масштабировании внутри программы может дорисовать изображение!
Для начала нужно открыть исходное изображение, затем перейти через верхнее меню в Изображение > Размер изображения… и выбрать ресамплинг «Сохранение Деталей 2.0».
Результат приятно удивил! Пожалуй, впереди только Let's Enhance. Вот и обещанное сравнение (исходное изображение приближено примерно в 8 раз):
— И что теперь, вручную обрабатывать каждый кадр через фотошоп?
Конечно, нет! В фотошопе есть инструмент Actions, который позволяет сначала записать последовательность действий, а потом применить ее на целую папку с изображениями. Не буду расписывать весь процесс, он легко гуглится.
Я оставил свой ноутбук обрабатывать тридцать одну тысячу кадров на ночь по шаблону «сделай апскейл в два раза и сохрани». Проснулся утром — все готово! Еще одна папка с кучей кадров, но теперь уже в 4К и с размером в 82 ГБ.
Назад, в видео
Нам снова поможет ffmpeg.
Понимаем, что мы совсем забыли про аудиодорожку, и достаем ее из оригинального файла:
ffmpeg -i RiM01x01_1080p.mp4 -vn -ar 44100 -ac 2 -ab 320K -f mp3 sound.mp3
А потом скидываем саунд в папку со всеми 4К-кадрами. Все наши труды прошли не зря, мы готовы к финальной склейке!
ffmpeg -i 01x01_%05d.jpg -i sn.mp3 -vcodec libx264 -preset veryslow -crf 10 -r 23.976 RiM_01x01_4K.mp4
Будьте внимательны: после -r ставьте именно такое количество кадров, какое было в оригинале, иначе звук не будет совпадать с картинкой!
Готово!
Мы получили первую серию «Рика и Морти» в 4К. Вот сэмпл. Конечно, это было немного по-ламерски, что ли… Но на самом деле у такого подхода есть серьезное преимущество. При работе с другими фильмами или мультиками мы можем удобнейшим образом, прямо через Photoshop доводить их кадры до идеала. Подобрали идеальную резкость и балансировку цветов под несколько кадров из фильма, потом записали свои действия в Action, распространили на весь фильм, и получили отличный результат без всяких математических сложностей. Это делает чудо-апскейл чуть ближе к обычному пользователю. Сложнейшие вещи, к которым люди шли веками, воспроизводятся быстро и без специальных знаний — что это, если не будущее?
Комментарии (176)
staticmain
05.02.2019 17:59+3Полагаю, что это валидно только для современных мультиков без отрисованных фонов.
ganqqwerty
06.02.2019 12:48а почему тут не сработает?
staticmain
06.02.2019 12:55Потому что современные мультики — это вектор без рисованных красками фонов — посмотрите на скриншоты в статье. Вернуть векторизацию изначально векторному изображению — тривиальная задача (я так для своего лазера беру с платных сайтов ч\б сжатые векторные изображения предпросмотра, удаляю вотермарк, прогоняю через векторизацию Inkscape и получаю исходный вектор без малейших артефактов.
Старые мультики рисованы двумя техниками — акварелью\маслом\гуашью фон на который накладывается прозрачный целл с персонажами и статичной равномерной заливкой — персонажей можно овекторить и как угодно растянуть. Фоны — нет. Максимум можно получить их целыми в конкретной сцене где вычитая персонажа можно перекрыть на фоне все недостающие места.
amarao
05.02.2019 18:03+1С векторной анимацией задача проста: восстановить вектор по картинке и отрендерить вектор в большем разрешении.
Каждый раз, когда будет сложный рисунок, будет эпик фейл.
alexyr
05.02.2019 18:19+7а самим ffmpeg не пробовали?
ffmpeg -i input.mp4 -vf scale=3840:-2 -c:v libx264 -preset slow -crf 22 -c:a copy output.mp4
SADKO
05.02.2019 19:17+5Вот и мне думается, нафига фотожоп, если в ffmpeg выбор методов по богаче будет…
… да и фильтры для мультов вроде-бы были вроде ворпшарпа которого тут было-бы за глазаtyderh
06.02.2019 13:16И их можно не конвертируя в том же mpv на лету применять github.com/mpv-player/mpv/wiki/Upscaling
alexanster
05.02.2019 18:22+1Прям захотелось немедленно проверить на первых 4-х сезонах Футурамы, но необходимость пирать Фотошоп остановила от немедленных действий. А что за версию вы использовали?
alfemy
05.02.2019 19:39Ну во первых, есть триальная версия фотошопа
А во вторых, месячная подписка стоит около 700 рублей — это фотошоп, лайтрум и что-то ещё. Вполне нормальная ценаmarkmariner
06.02.2019 10:48Справедливости ради, это годовой план. Так что ты всё равно будешь платить целый год, если пользовался месяц.
Если хочется именно на месяц и только фотошоп, то это уже 1932 рубля.bearoxide
06.02.2019 11:04Выбираете годовой план с помесячной оплатой. Платите с виртуальной карточки. Оставляете на ней нулевой баланс. Адоб попытается списать с нее деньги за второй месяц и, после пары неудач, отменит готовую подписку.
darthmaul
06.02.2019 12:51Если уже нарушаем договор, то не проще ли спиратить?
bearoxide
06.02.2019 23:44А мне просто не нравятся программы (кряки, кейгены и тп), сделанные непонятно кем, которые надо запускать с правами администратора.
Фотошопом и лайтрумом я пользуюсь пару раз в год, разгребая очередную порцию фотографий после поездки какой-нибудь. Проще Адобу заплатить за эти разы.
alfemy
06.02.2019 13:34Он только называется годовым. На самом деле он помесячный, в любое время можно отказаться, и платишь раз в месяц. И стоит он 644 рублей в месяц. Думаю, что почти все себе могут это позволить)
advan20092
05.02.2019 20:20+17 дней пробный период
alfemy
06.02.2019 03:51Откуда инфориация про 7 дней? Мне три месяца назад дали 30, и в прошлом году дали 30 дней. В этом году я купил
advan20092
06.02.2019 08:45Раньше был 30 дней, теперь 7. Информация из первых рук, только недавно накатывал пробную версию. Есть конечно вероятность что на разных ОС разный период, на винде я не проверял.
Купили — в смысле оплатили подписку?
vicsoftware
05.02.2019 18:24+1Ну почему же. Та же waifu2x неплохо снижает количество артефактов и сглаживает ступеньки.
staticmain
05.02.2019 18:54Артефакты уменьшились, но лестницы остались.Плюс половина артефактов осталась как есть — правая (для него левая) лапа кролика и чуть выше нее.
sadfun Автор
05.02.2019 19:10+1Инструмент, встроенный в фотошоп, называется не «Восстановление деталей», а «Сохранение деталей». Входные данные должны содержать максимально качественную картинку, а фотошоп в свою очередь старается сохранить качество, увеличив разрешение. Поэтому да, способ наиболее эффективен с современными мультиками. А предварительное удаление артефактов и лесенок — это работа для других нейросетей.
timahvey
06.02.2019 14:21В том же Photoshop есть инструмент/фильтр Filter Camera Raw. В нем переходим на вкладку «Детализация» (два треугольника) и в графе «Уменьшения шума» двигаем (прежде всего) ползунок «Светимость». На нескольких разных картинках данного видеоряда нужно выбрать оптимальное значение и тогда просто добавить этот фильтр в список действий Action.
vicsoftware
06.02.2019 08:39А это уже вторая проблема. Сложность вашего скриншота — в большом количестве артефактов MPEG-сжатия. Тут по сути нужен не только апскейл качественный, но и шумодав соответствующий.
zuborg
05.02.2019 18:33Сработает только для рисованных мультиков. Фотошоп порезал кучу деталей изображения, особенно видно на артефактах кодирования, например нижняя стрелка часов или левая двойка. Да, границы разноцветовых областей стали четче, а однотонные фоны ровнее, но кроме мультиков такое больше нигде не встречается.
TheShock
05.02.2019 18:55+1Простите, но я не вижу, какие именно детали он отрезал. Вы о том, что картинка стала не так JPG-стой? А мне казалось, это фича. Без тестов на реальных кадрах нельзя сказать, как оно будет на самом деле.
barkalov
05.02.2019 19:08+3Кстати, в фотошопе из action можно сделать dropplet — это exe файл, который принимает в качестве параметра путь к изображениям и запускает для них нужный action. Можно использовать в .bat файлах, в контекстном меню проводника (send to) или с помощью drag'n'drop.
vvzvlad
05.02.2019 21:50И обрабатывать по одной картинке, разбирая файл последовательно
QDeathNick
06.02.2019 10:16Ну да, если для одних сцен подходит одно, для других другое или третье, сделать несколько дропллетов, повесить их на кнопки в directory opus и кусками фильм обработать. Так можно, например, раскрашивать старые фильмы.
gltrinix
05.02.2019 19:19+3Можно автора попросить прикрепить 10 сек семпл до и после?
Dark_Daiver
05.02.2019 19:27+1Поддерживаю, интересно посмотреть, насколько результат темпорально стабилен.
sadfun Автор
05.02.2019 19:48Что-то я не подумал. Спасибо, ловите!
yadi.sk/d/3TvUrOPQXS_WrgDark_Daiver
05.02.2019 22:47Спасибо, оч. круто получилось, как мне кажется. Единственное но — у меня, почему-то, возник какой-то странный дискомфорт на кадрах где движется фон.
PsyHaSTe
07.02.2019 14:13Подтверждаю! Как-то в глазах зарябило… У меня такое бывало от разогнанных 30->60FPS фильмов иногда. С тех пор не пользуюсь подобным софтом, но прогресс наблюдать интересно.
AngReload
05.02.2019 20:43+5Вы не покрутили настройки waifu, думаю что удаление шума и профиль UpRGB могут дать результат лучше фотошоповского.
Ещё хотелось бы упомянуть Madshi Video Renderer — отрисовщик совместимый с многими видеоплеерами. С ним нет необходимости в конвертировании видео, только установить и раз покопаться в настройках проигрывателя. Если потянет видеокарта, то даже может нейросеткой NGU очень круто ресайзить. Там у него ещё есть удаление артефактов сжатия на нейросетях, удаление бандинга, да и вообще дофига всяких опций.
red_andr
05.02.2019 20:46А может стоит попробовать потренировать waifu2x? И, кстати, как насчёт производительности?
Arxitektor
05.02.2019 21:09Спасибо. Классная идея. Переделал картинку на рабочий стол в 4К. Стало реально лучше.
Интересно видеокарта уровня 1080 не потянет в реальном времени?
Нужен ускоритель нейросетей в который можно загрузить обученную сеть.
Думаю стартап с платой для улучшения мультиков/аниме который выпустит подобную карточку вполне может и взлететь.
Ведь давно есть SVP (SmoothVideo Project) который делает видео более плавным вставляя кадры. Можно прикрутить нейросеть которая будет еще и качество улучшать. Закинул любимый сериал запустил и через пару дней получил результат.vitaliy2
06.02.2019 01:01waifu2x не может улучшить аниме за исключением некоторых случаев. Надо доработать именно под аниме или взять другой продукт, где таких проблем нет. Но вот с артом waifu2x справляется превосходно.
VADemon
06.02.2019 04:23Offtopic, а ещё Windows по умолчанию конвертирует фоновую картинку рабочего стола в JPEG: https://www.reddit.com/r/pcgaming/comments/6kry64/protip_windows_automatically_compresses_wallpaper/
Единственный костыль, который заработал "в лоб" без сторонних программ: ПКМ по .bmp картинке и Set as desktop background в IE (Win7). Десятка вроде даже в PNG научилась, но тоже не всё так просто.
redpax
06.02.2019 10:51Там всё очень сложно и не понятно. Ставлю png на фон, пару дней вижу png, затем начинаю наблюдать артифакты сжатия jpg, смотрю и в правду уже jpg, ставлю опять png, но через пару дней опять появляется jpg на фоновоц картинке. Причину так и не смог выяснить windows 10.
putinBog
05.02.2019 21:25+1Есть такой рендер-движок для видеопроигрывателей: 'MadVR' (win only)
В нём есть множество методов для увеличения.
Среди них есть NGU, нейросетевой. Правда его результаты не сильно отличаются от Super-XBR (тоже очень крутой).
Есть два варианта применения:
1. Если есть мощная видеокарта, можно апскейлить в проигрывателе в реальном времени
2. Или разобраться, как можно направить поток от рендера в файл
p.s. для поиска проектов по true-нейросетевому апскейлу гуглить надо super-resolution neural upscale. Например:
uLow
05.02.2019 22:14А ведь по такому принципу можно и 60 фпс сделать… делаем твиннинг двух картинок, результат улучшаем, собираем всё с правильной скоростью, профит?
katzen
05.02.2019 22:46Вообще-то нужно распознавать движущиеся объекты в кадре и дорисовывать фазы движения в дополнительных кадрах.
nidalee
06.02.2019 10:20SVP это делает. В платной версии есть конвертер. И вроде бы он бесплатный под Linux. В Adobe AE вроде тоже что-то недавно (?) прикрутили на эту тему…
PsyHaSTe
07.02.2019 17:09Пользовался им. С одной стороны и правда улучшает. С другой стороны артефакты иногда просто дикие. Для примера попробуйте посмотреть заставку «футурамы», особенно момент когда выскакивает название в начале, и буквы формируются. Там лютые косяки алгоритма.
Zmiy666
05.02.2019 22:35+1Хм а для игр можно что-то подобно сделать?) Чтоб картинку на лету улучшало… хотя бы на 60 фпс
springimport
05.02.2019 23:08В fhd уже можно на калькуляторе играть в 60fps. Даже на нулевой встройке от интела в 20fps будет.
Если так хочется играть то надо просто купить любую карту, а не придумывать костыли.TRIMER
06.02.2019 09:39Речь о 4К.
springimport
06.02.2019 18:01Вы с другого аккаунта пишите или вы догадались какое разрешение у пользователя выше?
Если 4к то как бы перед покупкой надо понимать что берешь. 4к гейминг сейчас очень дорог.
У меня, например, 2к + 2080 fe. В самых тяжелых проектах 60-70 кадров есть, но для 4к это были бы неиграбельные 40-50.
Nvidia недавно как раз представила технологию «на лету улучшало», называется dlss.ftdgoodluck
08.02.2019 15:13+1неиграбельные 40-50
*Вспомнил детство с дай бог 20 фпс и заплакал...*
P.S. Не хотел вас задеть, просто как-то упустил момент, когда 40 фпс стали неиграбельными =)juray
08.02.2019 15:37Вот да. Еще б сказали, что киношные 24 fps (или телевизионные 25) несмотрибельны.
TheShock
08.02.2019 17:54+1Стоить учесть, что в киношных 24 ФПС — отличный, честный Motion Blur, а не то мыло, которое в играх. Плюс там нет необходимости прицеливаться в точку с быстрой реакцией.
Ну то есть я очень комфортно могу играть в Героев 3 на 12 фпс и совсем некомфотно — в КС или Пубжик.
И даже при таких условиях при панорамной съемке 24 кадрами (камера неспеша летит и показывает природу) видно строб, особенно в кинотеатре. И этот строб раздражает.
springimport
08.02.2019 18:03Ну вообще-то да, они не смотрибельные. Посидите хотя бы час за 144/165гц монитором, а потом посмотрите (попробуйте посмотреть) час фильма типа боевика. Вы вероятно вообще не сможете понимать что происходит из-за чуть ли не покадровой картинки.
Хм, мне начало казаться что вы просто иронизируете.DistortNeo
08.02.2019 20:28Во времена CRT-мониторов герцовка была выше (100-160 Гц в зависимости от видеорежима). И ничего, нормально боевики смотрелись.
putinBog
06.02.2019 00:00В эмуляторах потихоньку появляются штуки, основанные на распознавании форм
Вот сеговский, например
Во Flashback получается современный хипстерский графон без пикселей, мыла и странных артефактов.
irsick
06.02.2019 01:51Есть аппаратные постобработчики сигнала вроде Marseille mCable. Эффект варьируется в зависимости от исходной картинки. Особенно заметно на низких разрешениях.
nevzorofff
05.02.2019 22:48+1Проблема только не в источнике, а в устройстве, что upscale делает для вывода на ретину.
У меня 50 дюймовый 4к телек, я там 720р от 1080р отличу, только если в лоб сравнивать, а ели просто включить фильм с достаточным битрейтом — не факт что отличу.OlegKrikun
05.02.2019 23:07Вот тоже пытался найти отличия в предложенных выше семплах и не смог =(
15" 3840х2160ivgrin
06.02.2019 06:46Яндекс Диск воспроизводит оба видео в 1080p. Чтобы увидеть разницу, нужно скачать ролики и проиграть в своём плеере.
Cepg
06.02.2019 07:40Залогинился только что бы написать — что автор купил дисплей который не предназначен для просмотра видео и\или игры в HD1080 или 4k т.к. его разрешение не кратно 3840, на дисплеях с 3840 будет «гореть» 4 мелких пикселя вместо 1 большого и все будет выглядеть ровно так же как при просмотре на дисплее с разрешением 1080, у автора же «горит» неравное-нечетное число пикселей и вы никогда не доведете картинку до такого же вида как на дисплее с нормальным разрешением. Так что проблема вовсе не в низком качестве Рика и Морти — на нормальном экране ваше рукоблудие выглядит не лучше чем оригинал, а если проводить детальное исследование то окажется хуже…
Raspy
06.02.2019 12:40Потому что у телевизора современного встроенный перекодировщик, который делает апскейл до 4к. Вы сравните 720р и 4к, разница будет, как говорится, на глаз.
dkurt
06.02.2019 00:07+1Позвольте предложить ещё такой вариант: сеть 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
homm
06.02.2019 12:11При выводе на экран 2560x1600 не видно отличий от изображения такого же размера с шарпом:
https://ucarecdn.com/e13a4480-a12b-40ca-a13d-984231c18ea2/-/quality/best/-/sharp/15/
KvanTTT
06.02.2019 01:07+1Почему JPG, а не PNG?
Все же сколько в гигабайтах? Не думали использовать JPEG 2000 или WebP?
Это конечно интересный подход, но в нем не учитывается информация о связи последовательных кадров, т.е. о движении. Это может быть важным.
nidalee
06.02.2019 10:26Видео — последовательность кадров. Между ними нет никакой связи, по крайней мере в консьюмерских кодеках. Optical Flow, о котором вы говорите, при таких манипуляциях не страдает, потому что количество кадров и продолжительность видео не меняется.
KvanTTT
06.02.2019 12:54Даже если и нет в оригинале, то при склейке увеличенных изображений могут появиться артефакты. Ниже расписали мою мысль подробней.
nidalee
06.02.2019 14:41Если эти артефакты создал способ увеличения — да, особенно если это нейронная сеть, потому что нет гарантий в том, что она сохранит пропорции деталей со своими умными алгоритмами. Если вы в кратное количество раз увеличиваете изображение (то есть например 1080p в 2160p) — может только мыло появиться, но никаких артефактов.
juray
06.02.2019 13:10+1Вы хотите сказать, что в развитии кодеков был сделан шаг назад? Ведь переход от сжатия отдельных кадров (mjpeg ) к дельтам от предыдущих кадров в своё время был прогрессом и позволял повысить степень упаковки.
Кажется, вы всё же ошибаетесь. Смотрим описание H.264:Многокадровое предсказание… Использование сжатых ранее кадров в качестве опорных… Позволяется использование до 32 ссылок на другие кадры… Компенсация движения с переменным размером блока
nidalee
06.02.2019 14:38Давайте еще раз: видео — последовательность кадров. В консьюмерских кодеках (тех, которые вы можете использовать без жутко дорогого железа в профессиональной среде) это отдельные изображения, объединенные в контейнер. Вы процитировали процесс сжатия экнодером видео: он выбирает i-фреймы (ключевые кадры), а потом рисует между ними другие кадры (b- и p- фреймы). Все они в итоге превращаются в последовательность типа (грубо говоря, для примера) I — P — B — B — B — P — B — B — B — I, каждый кадр — отдельное изображение. С видео как динамичным объектом, непрерывным, движущимся — работает только профессиональное ПО и профессиональные кодеки (или вообще их отсутствие в виде несжатых I-фреймов (где нет никаких B- и P- кадров)).
Любое видео раскладывается на отдельные кадры и собирается обратно без каких-либо потерь качества (как визуально, так и по всяким шумомерам а-ля *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 с тем же фреймрейтом.juray
06.02.2019 15:14I — P — B — B — B — P — B — B — B — I, каждый кадр — отдельное изображение
да ладно?
P- и B-кадры — как раз разностные, P — со ссылкой на один предыдущий, B — на несколько (предыдущих и/или последующих). Это после разжатия они становятся отдельными изображениями, а в файле (или потоке) представлены как разности от тех на которые ссылаются.
Поток только с I-кадрами по сути и будет MJPEG (впрочем, правильнее сказать — кодирование в MJPEG использует только I-кадры).
С тем что будет 30 кадров при 30 fps я не спорю.
Любое видео раскладывается на отдельные кадры и собирается обратно без каких-либо потерь качества
да ладно? На ютубе при просмотре летсплеев зачастую на видео куча характерных артефактов сжатия заметна — и еще можно заметить что при движущемся фоне детализация падает по сравнению с моментами неподвижности.nidalee
06.02.2019 15:22P- и 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 работают с макроблоками — если в каких-то нет движения, то там здорово экономится битрейт. Если движение везде — что-то сэкономить сложно. Но к вопросу конвертации видео-изображения-видео это не имеет отношения.juray
06.02.2019 15:47Смотрите, если вы скормите свое видео ffmpeg-у и скажете разложить на PNG
не вопрос, но причём тут ваше исходное утверждение «в консюмерских кодеках нет связи между кадрами»?
Набор PNG — это как раз несколько нестандартный формат кодирования видео для «консюмерских» кодеков. Никто в здравом уме не использует такое ни для хранения видеофайлов, ни для передачи потока (вот когда станут общедоступны многотерабитные каналы и экза- и петабайтные хранилища, тогда может быть). Даже автор статьи изпользовал jpeg.
все их превратит в I-фреймы, не делая разницы между тем, что в видео было i, что было b и что — p
естественно, после разжатия потока получаются полные изображения. Хоть для сохранения в отдельные файлы, хоть для вывода на экран. Это и есть функция декодера (в противовес функции кодера — выбросить из исходного набора изображений избыточную информацию, оставив необходимый минимум).
Но при этом b и p фреймы декодеру приходится «дорисовывать», основываясь на соседних i-фреймах в контейнере. Если из контейнера взять только голый b- или p-фрейм, никакой ffmpeg не сможет из этого фрейма построить полное изображение.
если в каких-то нет движения, то там здорово экономится битрейт
— и за счёт чего же же оно экономится, по-вашему? За счет чего статичному изображению хватает низкого битрейта? Неужели за счет изменения степени сжатия каждого отдельно взятого изображения, независимого от соседних кадров?
nidalee
06.02.2019 15:59Даже автор статьи изпользовал jpeg.
Очень зря. PNG как бы архивировать не требуется — «использовал» и удалил.
Неужели за счет изменения степени сжатия каждого отдельно взятого изображения, независимого от соседних кадров?
Мне казалось, что мы все это обсуждаем в контексте изначального комментария:
Это конечно интересный подход, но в нем не учитывается информация о связи последовательных кадров, т.е. о движении. Это может быть важным.
Никакой таинственной информации о движении и связях последовательных кадров не нужно для того, чтобы их апскейлить — нужно просто разложить видео на отдельные кадры, раз уж апскейлер работает только с изображениями.
По всему остальному вы правы — воспроизведение и сжатие файлов нуждается во всех этих кадрах. Если без пары b или p еще можно выжить (просто артефакты полезут), то без i уже все совсем плохо будет.
Я говорю о вот таких вещах:
то при склейке увеличенных изображений могут появиться артефакты
Артефакты от простых склеек не появляются, потому что видео безболезненно раскладывается на отдельные кадры — между ними ничего нет, только ссылки, которые в нашем случае нерелевантны.juray
06.02.2019 16:28Я возражаю именно вашей сентенции про кодеки, которая довольно существенно вылезает за пределы контекста этого «изначального комментария».
Связь может быть важной для задачи апскейла, а может не быть — тут я судить не берусь (хотя склонен с вами согласиться — если мы после обычной распаковки не видим разницы между ключевыми и разностными кадрами — то и после их апскейла скорее всего не заметим).
Но вы-то утверждали «связи нет вообще», причём применительно к кодекам, а не набору полученных изображений.
nidalee
06.02.2019 16:52Согласен, здесь некорректно высказался:
Между ними нет никакой связи
Нет никакой связи для целей апскейла.
BigElectricCat
06.02.2019 19:00Никто в здравом уме не использует такое ни для хранения видеофайлов, ни для передачи потока
Ну вот DNG используют.juray
06.02.2019 20:29Жесть.
нууу… тут можно придраться, что это не хранение и передача «готового продукта», а исходники. Вот, к примеру, фотографы raw хотя и хранят (и то не все), но в последующем повседневном обращении в Сети raw не встретишь.
Интересно, и какую длительность можно записать на одну карту (512G)? Так, говорят, в lossless по 7-8 Мб на кадр — при 60 fps где-то на полчаса получается. В принципе, не так мало.
Но где хранить такое, когда общий футаж фильмов перевалит хотя бы за полдесятка часов? В нынешних реалиях все равно получается — обработал, сжал, исходник выбросил. То есть «см. п. 1».DistortNeo
06.02.2019 20:37Писать по 400-500 мбайт/сек на карту памяти?
Не получится даже не столько из-за способностей карты памяти, сколько из-за пропускной способности интерфейса.juray
06.02.2019 22:20UHS-III до 624 МБ/с.
Но для raw видео эта камера использует карты CFast 2.0 (440 MB/s на запись).
BigElectricCat
06.02.2019 23:25Он там дальше на 1ТБ SSD пишет: RAW без сжатия — 35 минут.
Но где хранить такое, когда общий футаж фильмов перевалит хотя бы за полдесятка часов?
Ну, нужна какая-то хранилка на 10++ полок с 10—12 ТБ винтами ;)
nidalee
07.02.2019 08:45нууу… тут можно придраться, что это не хранение и передача «готового продукта», а исходники.
Так в том-то и смысл, что любое сжатие ухудшает качество. Поэтому нужно количество этих сжатий минимизировать и на всех этапах (где это возможно) использовать не сжатый материал.
serafims
06.02.2019 01:30Интересно, почему не взлетели векторные мультики?
DiKey
06.02.2019 14:40Вот, да. Я наоборот, ждал появления 3D фильмов, которые рендерятся по принципу игр. А они даже «Масяню» убили, как формат. (
juray
06.02.2019 15:27ждал появления 3D фильмов, которые рендерятся по принципу игр
В некотором смысле игры и являются таким фильмом.
Собственно, единственный плюс рендеринга на стороне пользователя — возможность выбора пользователем точки зрения. Игры это и дают. Ну еще они дают нелинейность (вариабельность последовательности нарратива), но это отдельная фича, перпендикулярная выбору ракурса, и не требующая рендеринга у пользователя. Были и «интерактивные фильмы» — именно фильмы (и даже по ТВ, не говоря уже о DVD), и игры, рассказывающие историю строго последовательно — где камеру вертеть можно, а изменить последовательность сюжетных сцен нельзя (большинство шутеров таковы). Хотя в играх, заточенных на пассивное восприятие истории зрителем, чаще всё же эти две фичи совмещены — см, например, What Remains of Edith Finch, Vanishing of Ethan Carter.Taciturn
07.02.2019 11:18Не единственный — рендеринг на стороне пользователя можно выполнять в нужном разрешении и без артефактов сжатия. Та же Масяня во флеше выглядит куда лучше, чем видео в YouTube. И с увеличением разрешения монитора разница всё заметнее.
juray
07.02.2019 14:34Для чисто векторных данных — да, экономия значительна.
Для реалистичного же изображения все равно придется тянуть растровые текстуры, причём некоторую часть еще до начала рендеринга, что задержит начало воспроизведения.
0o0
06.02.2019 02:17+1Берем сжатое видео.
Выгружаем ведро жипегов.
Апскейлим.
Пережимаем обратно в видео.
Наслаждаемся нормальным качеством.Utopia
06.02.2019 04:36Берем фотошоп, создаем холст с размерами исходного объекта, прямо в него закидываем перетаскиванием видео, добавляем если нужно эффекты, апскейлим, смотрим прямо в Фотошопе если лень выгонять avi. Если комп мощный даже не тормозит. Я так когда то экранки убитого качества смотрел, с наложением фильтра Shadows|Highlites
habrastorage.org/webt/nf/wz/-h/nfwz-hslcnhsozwxmtqpm5rkpo8.jpeg
Avaja
06.02.2019 08:11Это бы всё автоматизировать, а еще исключить всю работу с жёстким диском, думаю скорость должна подняться в разы.
sshmakov
06.02.2019 08:58www.infognition.com/super_resolution_avisynth
Бесплатно, потоком, без промежуточных jpeg и Фотошопа.
Это то, что нашлось за минуту гугления.denisshabr
06.02.2019 15:28Именно этот движок и хочу посоветовать, в виде Video Enhancer (при желании можно найти Video Enhancer 1.9.10.1, иначе Trial рисует водяной знак, в том числе и в Avisynth). Работает довольно быстро, использую его чтобы заливать 1080p видео на Youtube, в 4к там просто тупо больше битрейт.
epsonic
06.02.2019 09:40А разве эффект Detail-preserving Upscale в After Effects не то же самое делает? И не нужно генерировать десятки тысяч изображений — MP4 или любой формат, который принимает AE можно напрямую импортировать в AE.
sadfun Автор
06.02.2019 10:07Он делает не совсем то же самое. В AE содержится первая версия «Сохранения Деталей», которая основана только на математике, а в фотошопе уже версия 2.0. С тестовым кадром ваш метод сделает следующее:
epsonic
06.02.2019 10:19Да… Видимо, он все же больше «для общих задач», т.к. с обычным видео справляется достаточно хорошо, но контрастные мультфильмы с четкими линиями — несколько иной случай.
SAnatoly
06.02.2019 11:30Подозреваю, что количество 4к апскейлов в ближайшую неделю увеличится вдвое
5erg
06.02.2019 13:17погодите, осталось дождаться объявления астрологов
SomebodyElse
06.02.2019 13:58ОбъявлениеOnelaW
06.02.2019 15:47Парку а бы и не па? Куча мульт-сериалов которые не против посмотреть в 4к, а и если даже не в 4к, то в фулхд тоже неплохо.
DistortNeo
06.02.2019 11:34Основная проблема видео — реальные кадры не являются независимыми, а ресамплер обрабатывает их как независимые изображения. Проблема может возникнуть, когда последовательные кадры обрабатываются несогласованно. Дело в том, что информация для восстановления изображений не берётся из ниоткуда. Она представлена в виде закономерностей в самом алгоритме. И вполне возможно, что на последовательных кадрах нейросеть может дорисовать изображения по-разному, что визуально может привести к дрожанию и мерцанию деталей.
FadeToBlack
06.02.2019 12:09Ну к чему приплетать сюда нейросети? Объясните мне! Ведь можно написать обычные не нейросетевые фильтры, которые мультяшную графику такого стиля неплохо заапскейлят. Чтобы написать громкое название для статьи?
sadfun Автор
06.02.2019 12:29Про какие конкретно «обычные фильтры» вы говорите?
spc
06.02.2019 12:30Тссс, не спугните :)
FadeToBlack
06.02.2019 15:11Я имею ввиду фильтры, которые написаны руками. Я вот сходу могу предложить построить SDF по разным областям, разделенным edgedetection фильтром, поскейлить SDF bicubic и получить векторное изображение обратно. Гладкое, четкое, с антиалиазингом и прочими фишками. Я про то, что все скейлят мультики, которые и так можно неплохо поскейлить. А фильмы, например, старинные — слабо (я видел статьи и фотки, но почему-то мультики важнее)? А делать стереопары? А тут решение такой задачи с помощью нейросетей, котороая и без нейросетей нормально решается.
spc
06.02.2019 12:30+2Вы упускаете одну вещь. Автор текста ничего не писал. Он искал подходящий инструмент. И, внезапно, им оказался инструмент на основе нейросети.
А так как текст сам по себе имеет ценность (в отличие от 100499 текстов с кликбейтными заголовками), то я бы сказал, что здесь громкое название почти оправдано (я вообще надеялся на какой-нибудь онлайновый сервис, но ладно).
ganqqwerty
06.02.2019 12:50можно еще 60fps сделать кстати
eatfears
06.02.2019 13:12Согласен. 30 в секунду невозможно смотреть (хотя некоторые считают с точностью наоборот).
Из доступных, butterflow показал себя весьма хорошо. Думаю, что на векторной графике он должен сработать отлично. Умеет работать на GPU через OpenCL.
Правда теперь вам понадобится в 2 раза больше места на жестком диске и ещё в несколько раз больше терпения.
Хотя вроде современные телевизоры и сами неплохо справляются с этой задачей.
DistortNeo
06.02.2019 14:05Можно, но нужно учесть, что в мультфильмах вообще рисуют в 12 fps (особенно в аниме), а потом сохраняют в видеофайл с 25/30 fps.
Destructive
06.02.2019 13:23+1Попробовал раскукожить арт, оригинал которого тщетно пытался найти ещё лет 10 назад
Артsadfun Автор
06.02.2019 13:38+1Интересный опыт! Но это закономерно, потому что инструмент фотошопа только старается сохранить существующие детали при масштабировании, а не добавить новых. Загонять в него изначально мыльную картинку — не вариант.
А вот Let's Enhance и правда иногда старается добавить «от себя», и даже классифицировать поверхности (например, к фотографии бородача сервис применит отдельный алгоритм прорисовки волос). Там даже при загрузке есть такая опция, как «Добавление текстур».
stepik777
06.02.2019 13:38Интресно, только непонятно зачем лишние действия с аудиодорожкой — зачем её извлекать, зачем перекодировать в mp3 (что приведёт к потере качества)? Чтобы её не перекодировать, можно указывать
-acodec copy
. А чтобы не извлекать, можно на последнем этапе указать исходный видеофайл, чтобы ffmpeg взял аудиодорожку прямо из него. Только в этом случае надо правльно указать параметр-map
, чтобы он не стал использовать видеоряд из этого файла.
Highlander
06.02.2019 14:08Господа, а какой наиболее качественный метод порекомендуете для upscale JPG с фотокамер, с целью печати в большом размере?
Даже если это займет сутки для одного кадра, главное качество :)
Anzipex
06.02.2019 16:54А как быть с сильно пережатыми исходниками? Например видео сжатое Xvid кодеком? По идее после апскейла артефакты сжатия станут более резкими и заметными
sadfun Автор
06.02.2019 16:55Думаю, можно попробовать подобрать такие алгоритмы для фотошопа, которые смогуть удалить эти артефакты, а уже после этого производить апскейл. В любом случае, в фотошоп лучше загонять как можно более качественную картинку, чтобы получить налучший результат.
tynega
06.02.2019 21:51Может тогда поясните заодно один момент!
Почему на официальных релиза 4к картинка тёмная?
К примеру — скриншот 4k издания «Короля Льва»
Popadanec
06.02.2019 22:53Как всегда хабр ломает всё кроме текста(сколько лет этому багу уже), если акк не подтверждённый.
Пере выложите, и лучше под спойлер.
pia3333
07.02.2019 07:47Скриншот сломан, но скорей всего дело в HDR.
tynega
07.02.2019 10:43Вот и у меня такое же чувство что дела в нём.
Popadanec
07.02.2019 12:59Пока у вас не пройдут модерацию первые десять комментариев у Разных авторов, так и будет резать html код. Этому багу уже черт знает сколько лет. И никак не поправят.
Под этой публикацией уже можно нормально выкладывать, т.к. модерации тут уже не будет.
noanswer
08.02.2019 01:03А почему собственно сразу видеоролик не увеличить фотошопом, не разбирая его на кадры? PS CC умеет работать с видео как «с картинкой».
я не работаю с видео и не знаю весь зоопарк программ и возможностей в них заложенных, может быть есть какие-то программы/плагины для умного увеличения видео… для умного увеличения фото в свое время было много плагинов…
прошу прошения, если это кто-то уже предложил раньше.
SergeyMax
sadfun Автор
И правда, нестыковочка. Но я имел в виду, что их нельзя запустить локально и бесплатно обработать большой объем данных)
barkalov
TheShock
Всем очевидно, что у большинства жителей наших стран уже есть купленный Фотошоп)
red_andr
Причём последней версии.
Popadanec
В смысле: «Купленный»?
alan008
Леонард_Хофстедер.jpg
Popadanec
Я смайлик :-) забыл поставить, что вы сразу.
psman
На купленой винде
AotD
Ну а почему бы и нет? 644 руб/месяц вполне подъёмны для типичного программиста, особенно если нужен он на тот самый единственный месяц чтобы чуть-чуть «поиграться со скриптами»
genuimous
Я недавно смотрел, уже сильно больше 1000. 20 баксов. Где купить за 644р?
fsmorygo
Тут. Тариф «работа с фотографиями» — 644 руб.
Mr_Boshi
Это же без НДС, реальная стоимость — 773 рубля\месяц.
genuimous
А, ну я смотрел отдельный фотошоп. Так и не понял чем «фото» отличается, кроме того что шрифтов нет и еще кой-чего новомодного.
AotD
www.adobe.com/ru/creativecloud/plans.html
Ну и да, это подписка за 11,89 € /мес. включая НДС. Возможно я где-то не разобрался в их политиках лицензирования. Ну либо для разных стран/городов/платформ они показывают разные цены =)
irsick
Пару лет назад Adobe взяли с меня плату за неустойку при отмене подписки досрочно.
genuimous
Так надо было блокировать карточку. Не 100% что это поможет, в худшем случае может и в дебет загнать, но в интернетах пишут, что помогает.
nidalee
Если уж говорить о пиратстве, то у того же Adobe есть Premiere, а для него есть Shooter Instant 4K