Как апскейлить аниме с опен сорсом и нейросетями
В аниме Наруто есть эпизод, который очень сильно на меня повлиял. Я решил, что хотел бы активнее его распространить. У Наруто есть две основные проблемы - ужасное качество видео и русского дубляжа.
Сегодня мы посмотрим, как можно решить эти проблемы. Я здесь решаю очень специфичную задачу, поэтому, наверное, правильнее будет рассматривать это как шоукейс технологий, а не как туториал
Исходные видео
Старое аниме в хорошем качестве в интернете можно найти только на торрентах.
Оказалось, выкладыванием аниме на рутрекер оказывается занимаются какие-то берсерки. Они собирают по всему интернету японские двд, файлы с озвучками и субтитрами, синхронизируют их какими-то специальными программами. Затем выкладывают это все и прикладывают сравнения с десятком других раздач, где объясняют, чем они лучше. Я был сильно впечатлен фанатичностью и скурпулезностью.
Сначала я нашел раздачу с самым лучшим качеством интересующей меня серии, это оказался рип с японского DVD без русской озвучки. Поэтому я нашел раздачу с единственной профессиональной озвучкой сериала на русском - от 2х2. Это был TV рип с плохим качеством и логотипом телеканала.
Сводим видео и аудио
Оказалось, что два видеофайла из двух расходятся на несколько секунд. Чтобы решить эту проблему, мне нужно было узнать, на какое время они расходятся. Я положил их на таймлайн в монтажной программе и двигал покадрово, чтобы узнать точное время разницы. У меня под рукой оказалась бесплатная версия DaVinci Resolve.
Для работы с видео есть очень мощная программа командной строки - FFmpeg. С его помощью я объединил аудио из одного файла и видео из другого из выясненной задержкой. Такая команда сдвигает первый источник видео на 1 минуту 5 секунд, маппит видео сигнал из первого входного файла на видео выходного файла и аудио сигнал из второго входного файла на аудио выходного файла.
ffmpeg \ -i NARUTO\ Shippuuden\ 165\ RAW.mp4 \ -i Naruto.Shippuuden.165.IPTVRip.2x2.XviD.Rus.avi \ -ss 00:01:05 \ -c:v copy \ -map 0:v:0 \ -map 1:a:0 \ new.mp4
Позднее я заметил, что все равно немного промахнулся и смог сдвинуть видео относительно аудио с помощью команды. По ссылке есть подробное обьяснение этой команды, если коротко, происходит то же самое, что в предыдущей команды, но мы добавляем сдвиг на 0.8 секунд
ffmpeg \ -i -i cycle_speech.mp4 \ -itsoffset 0.8 \ -i cycle_speech.mp4 \ -map 0:0 \ -map 1:1 \ shifted_4k.mp4
С помощью стандартной мак утилиты QuickTime я вырезал интересующий меня фрагмент и сохранил отдельным файлом.
AI Upscale
Для апскейла я использовал Real-ESRGAN. Кстати его же использовал Сбер для своей версии DALL-E. Это очень удобный в использовании тул, я также пробовал его файнтюнить, все получается легко и непринужденно. Кроме того, разработчики выпустили обученную модель и инструмент для апскейла аниме видео, показав, что они аутперформят другие решения.
Сам метод использует то-то и заключается в том-то
Чтобы воспользоваться методом, нужно установить модуль из исходников, скачать веса модели для аниме видео и запустить скрипт для инференса. Подробная инструкция тут
Для инференса я использовал 3070ti, поднятие разрешения в 4 раза, видео длиной 7 минут, 8 параллельных потоков. Расчет занял 28 минут и 35 секунд.
Подготовка к публикации
Настало время заливать видео на ютуб и возникло две проблемы. Во-первых, к этому моменту я уже узнал, как много разных настроек и параметров у видеофайлов, и к этому видео нужно как-то их подобрать правильно. Во-вторых, итоговое расширение получилось не стандартным 4к, а больше - 5120 × 2880.
Я нашел на гитхабе перечисление всех настроек в ffmpeg, которые соответствуют рекомендациям качетсва для видео на ютубе.
Проблема возникла только с кодировщиком аудио, чтобы работал libfdk_aac, нужно компилировать ffmpeg из исходников, так как это библиотека с закрытым кодом. Но это уже перебор, я использовал встроенный кодировщик aac, проблем не заметил. Итоговая команда со скейлом до разрешения 4к.
ffmpeg \ Real-ESRGAN/results/cycle_speech__x4.mp4 \ -movflags faststart \ -c:v libx264 \ -profile:v high \ -bf 2 \ -g 30 \ -crf 18 \ -pix_fmt yuv420p \ -b:a 384k \ -c:a aac \ -profile:a aac_low \ -vf scale=3840:2160 \ cycle_speech_youtube_4k.mp4
Комментируйте, ставьте реакции, рассказывайте друзьям и подписывайтесь на телеграм канал!