Куток

Обкладинка для допису Як застосувати шейдер старої VHS-касети на відео
Олег
Олег

Додано

Як застосувати шейдер старої VHS-касети на відео

В даному туторіалі я розкажу вам як застосовувати шейдери з сайту https://shadertoy.com на ваші відео. Результат роботи одного такого шейдеру ви можете бачити нижче.
ДО:

ПІСЛЯ:

Отже, погнали.

Попередні налаштування

Всі дії будуть виконані на Windows 11.

Для початку нам знадобиться Python. Найпростіший спосіб його встановити - через Microsoft Store. Відкрийте Microsoft Store і у вікні пошуку введіть Python 3.11. Встановіть дану версію.

Далі необхідно встановити деякі бібліотеки. Для цього відкрийте Командний рядок (напишіть cmd в стрічці пошуку Windows).

Запуск Командного рядку

Тепер вставте наступні рядки у вікно Командного рядку і натисніть Enter:
pip install vispy
pip install watchdog
pip install glfw
pip install Pillow
pip install imageio

Після успішної установки бібліотек попередні налаштування готові.

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

Але щоб не морочити вам голову з цим всім я вже все відредагував і скомпонував в архів. Його ви можете скачати по цьому посиланні. Розпакуйте архів в любу зручну для вас папку. Для прикладу візьмемо корінь диску D:.

Архів має таку структуру:
Структура архіву

В папці ffmpeg - власне ffmpeg. Якщо ви мені не довіряєте, то можете скачати з офіційного сайту і замінити файл в цій папці.
В папці shadertoy - решта необхідних файлів. shadertoy-render.py - це змінений мною файл з репозиторію, який я вказував вище. Ви можете скачати файл з того репозиторію і порівняти з моїм, щоб побачити, які я вніс зміни (власне нічого особливого). Решта файлів в цій папці - це шейдери з наведенного вище посилання. Ви також можете їх порівняти з оригінальними шейдерами, щоб побачити, які я вніс зміни.

Конвертуємо відео

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

Отже, заходимо в Командний рядок і переходимо в папку D:\convert_video\shadertoy. Для цього вводимо вказані команди і натискаємо Enter:
D:
cd \convert_video\shadertoy

Тепер нам необхідно створити в даній директорії папку video_frames_0, в якій будуть кадри з вашого відео. Введіть в командному рядку наступну команду і натисніть Enter:
mkdir video_frames_0

Все тепер можемо витягувати кадри з відео. Для цього треба виконати команду ffmpeg для конвертації відео. Вона матиме приблизно от такий вигляд:
..\ffmpeg\ffmpeg.exe -i "video.mp4" -vf fps=30 "video_frames_0/%d.png"
Тут:

  • "video.mp4" - назва вашого відео. Відредагуйте цю частину відповідно до назви вашого відео. Також, якщо ваше відео не знаходиться в директорії D:\convert_video\shadertoy\, то або вкажіть повний шлях до вашого відео, або скопіюйте його в цю папку.
  • fps=30 - означає, що кадри будуть витягуватись з частотою 30 кадрів на секунду. Це означає, що для 10-секундного відео ffmpeg створить 300 кадрів.

Також для першого тестування роботи конвертації відео рекомендую обмежити час обробки. Наприклад, щоб сконвертувати в кадри тільки перші 10 секунд відео, додайте після ffmpeg.exe параметр -t 10.

Отже, введіть в командний рядок наведену вище команду, відредаговану відповідно до рекомендацій і натисніть Enter. Після завершення роботи переконайтесь, що команда виконалась успішно і в папці video_frames_0 є всі зображення.

Після цього виконаємо власне обробку шейдером кадрів з подальшою конвертацією в відео. Для цього виконайте наступну команду:
python3 shadertoy-render.py --output processed.mp4 --size=1280x720 --rate=30 --duration=10. --bitrate=5M main_image.glsl

Тут ви можете змінити:

  • processed.mp4 - назва обробленного шейдером відео на виході.
  • --size=1280x720 - дозвіл відео. Можете вказати любий, ffmpeg автоматично відмасштабує. Для кращого ефекту рекомендую вказати дозвіл з відношенням сторін 4:3.
  • --rate=30 - кількість кадрів на секунду в обробленному відео. Бажано вказати таке ж значення, що і при конвертації відео в кадри, щоб швидкість вихідного відео було такою ж як і у віхдного.
  • --duration=10. - довжина вихідного відео в секундах.
  • --bitrate=5M - відео-бітрейт вихідного відео.

Топ коментарі (4)

Звернути
 
rusin profile image
wayne

Прикольно, але результат повний булшит. Це і близько не VHS

Звернути
 
velorom profile image
Олег

Це тільки один з варіантів. Там на сайті їх багато. Я вибрав той, який на мою думку більш похожий. Ви можете взяти той, який вам більше подобавється.

Звернути
 
maxsolo profile image
Max Solo

тому, що лише VHS це VHS 😁

Звернути
 
kingster263 profile image
KINGSTER263

Це ж лише шейдер, не треба його судити так суворо :D

Куток

Підписуйтеся на наші соціальні мережі:
Telegram
Twitter
Facebook


Тепер у нас також є Youtube канал!