Какие есть способы по кадрам рисовать видео в canvas?
Есть проекты видеороликов в After Effects (размеры от 600х600px до 1920), кто знает какие способы существуют для прорисовки по кадрам их в canvas?
Единственный вариант рабочий получился это экспорт из After Effects в PNG Sequence и потом подгружая все кадры в массив js, прорисовывать через setTimeout перебирая массив.
Может кто знает есть ли еще варианты как сильно не нагружая память JS подгрузить ролики и иметь возможность по кадрам рисовать в canvas?
p.s. пробовал еще с webm но там перемотка работает не стабильно и ролики с альфа каналом глючат
alexjet73, можно попробовать собрать спрайт из png`шек, что бы по отдельности их не грузить и через requestAnimationFrame все это дело уже расшевелить. Сомневаюсь что с видео такое получится.
RAX7, видео это я имею ввиду в афтере проект заготовленный, а вопрос как раз как экспортировать и использовать это уже в JS :)
Тоже думал спрайты попробовать, но везде программы для спрайтов делают спрайтшит в 4-5к максимум, а тут каждый кадр от 600 до 1920 пикселей. Свою программу мудрить не хочется, да и долго изучать придется много материала библиотек для работы с графикой чтоб на десктоп сделать склеиватель кадров в спрайтшит
alexjet73, ну значит несколько спрайтов на видео делать, например 1сек видео 1 спрайт.
Можешь попробовать еще Bodymovin для афтера, он вроде умет покадрово проигрывать
Сергей Соколов, подобный трюк с видео я уже пытался делать, но в p/s/ написал в вопросе, что в итоге не получилось https://jsfiddle.net/9x4ogcrs/ работает всё только без альфа канала, с альфа видео просто глючит и при установке current Time кадр не прорисовывается, либо иногда часть прорисовывается, а потом резко картинка встаёт. Вообщем с видео не удалось провернуть такой трюк, хотя было бы шикарно учитывая легкость изготовления и загрузки в canvas.
alexjet73, в фиддле вы как-то жестко пытаетесь контролировать видео, прям на каждый кадр устанавливать ему currentFrame – это и не работает.
Опишите подробнее затею.
Видео может воспроизводиться, вставать на паузу и вручную перематываьтся разок на новую позицию.
Пока оно воспроизводится, вы можете, не вмешиваясь, выдирать из него очередной кадр и что-то с ним делать : вставлять в canvas, дорисовывать что-то.
Вероятно, надо по-другому взглянуть на архитектуру.
Есть видео. По кнопке запускается его нормальное воспроизведение.
JS как может часто, или с частотой кадров вызывает некую функцию.
Там берется текущий кадр из видео и копируется в элемент canvas.
Если хочется что-то дорисовать, можно взять из video свойство currentTime и исходя из него, взять, например, нужный файл-картинку для наложения. Или просто нарисовать поверх номер кадра, скажем.
В любом случае, элемент-плеер video тут – «мастер». Им, в нормальном режиме, мышкой, рулит пользователь (play/pause/seek). Из него читается видимый кадр и временнАя позиция.
подробнее про синхронизацию расскажите, пожалуйста.
Зачем тут вообще JS понадобился? Имеете в виду, одновременно останавливать оба, перематывать оба на одну позицию?
Частота кадров у обоих видео одинаковая?
Сергей Соколов, Ну видео же в канвас надо засунуть, для этого в цикле setTimeout рисуется в канвас и передвигается таймлайн тем самым каждый кадр рисуется и можно результат из кадров уже делать ролик. Да синхронность чтобы была возможность работать с таймлайном например сдвигать начало одного видео. Да частота одинаковая будет.