В даному туторіалі я розкажу вам як застосовувати шейдери з сайту 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)
Прикольно, але результат повний булшит. Це і близько не VHS
Це тільки один з варіантів. Там на сайті їх багато. Я вибрав той, який на мою думку більш похожий. Ви можете взяти той, який вам більше подобавється.
тому, що лише VHS це VHS 😁
Це ж лише шейдер, не треба його судити так суворо :D