В самом примитивном варианте, без promise, async/await и т.д.:
1) делаете 2 функции: videosIsLoaded, imagesIsLoaded
2) в каждой функции отслеживаете загрузку всех соответствующих элементов
3) с картинками, Вы сказали, что разобрались
4) в функции videosIsLoaded, video.addEventListener('canplaythrough', cb), а еще лучше загрузите его аяксом и используйте onload
5) в videosIsLoaded и в imagesIsLoaded вызываете одну и ту же функцию, которая проверяет 2 условия - загрузка картинок и видео, можно просто завести 2 переменные (1ую для картинок и 2ую для видео) и менять их с false на true при загрузке контента.
6) в вызываемом callback (пункт выше) просто проверяете обе вышеуказанные переменные и прячете прелоадер.