make_previews.py
08.02.2023: версия 1.0
Иногда мне бывает необходимо создать для кадров из сериала и фотографий уменьшенные изображения, которые будут использоваться в качестве превью на форуме. Если картинок всего две-три, то это не так уж и сложно сделать, например, в GIMP. А если картинок несколько десятков, то это уже гораздо утомительнее.
Кроме того, я люблю вставлять на превью кадров текст с указанием сезона, серии, минут и секунд, чтобы в дальнейшем можно было легко найти этот кадр в видеофайле. Наложить такой текст можно, конечно, в том же GIMP, но как-то не хочется возиться с этим, особенно если кадров много.
Здесь нужно отметить следующее.
Во-первых, имена видеофайлов у меня начинаются с номера сезона и серии:
Во-вторых, я сохраняю кадры из видеофайлов с помощью проигрывателя
MPC-HC:
Это удобно тем, что данный проигрыватель вписывает в имя сохранённого кадра указание на момент времени с точностью до тысячной доли секунды. Например, при захвате кадра в момент времени 11:14,030 из видеофайла
1x21. The Hunt for Ashka.mkv
изображение будет сохранено в jpg-файл с именем
1x21. The Hunt for Ashka.mkv_snapshot_11.14.030.jpg.
Таким образом, имя файла с сохранённым кадром содержит всю необходимую информацию (сезон, серия, минуты и секунды), которую я люблю помещать текстом на превью.
Соответственно, я написал несложный скрипт. Он проходит циклом по всем файлам .jpg/.jpeg в указанной папке и делает следующее:
- если имя файла уже содержит слово _preview, то такой файл считается готовым превью и пропускается;
- если имя файла не содержит _preview, то он уменьшается до заданной высоты с сохранением пропорций и записывается в новый файл (причём с тем же dpi), имя которого содержит _preview перед расширением;
- если вдобавок имя файла содержит слово _snapshot_, то такой файл считается кадром из сериала (см. пример выше) и на его превью накладывается текст с указанием сезона, серии, минуты и секунды, которые берутся из имени файла.
Превью записываются в папку, которая может как совпадать с исходной, так и отличаться от неё (это нужно указать самостоятельно). При этом нужно быть внимательным, т. к. файлы автоматически перезаписываются при совпадении имён (т. е. более старый файл теряется). Наиболее безопасный вариант - указывать для сохранения превью отдельную пустую папку.
Размер всех превью задаётся их высотой (см. выше). Это сделано из тех соображений, чтобы на форуме можно было разместить два превью в одну строку (через пробел) и при этом у них была одна и та же высота для эстетики.
Более тонкие настройки см. в самом скрипте.
Рассмотрим пример. Пусть в папке имеются три кадра из сериала и две фотографии:
После выполнения скрипта (буквально парой кликов мыши) в эту же папку записались превью для всех пяти изображений. Обратите внимание на имена файлов с превью:
При этом на превью для кадров из сериала были вставлены сведения о сезоне, серии, минутах и секундах (дробную часть секунд скрипт отбрасывает):
Вообще, скрипт прямо-таки моментально обрабатывает десятки или даже сотни кадров из сериала и фотографий. Щёлкать мышью при этом нужно всего пару раз, а не десятки и сотни. Когда имеется много изображений, для которых нужны превью, этот скрипт очень выручает.