
Есть у меня один пунктик — обожаю оставлять цифровые следы. Возвращаться к старым наработкам — для меня как для Кащея копить злато: и смешно, и полезно. Ахаха!
В Ubuntu 24.04 скриншоты делаются на раз-два (PrtSc или PrtSc+ALT), но вот названия…
“Снимок экрана от ГГГГ-ММ-ДД ЧЧ-ММ-СС.png” — серьёзно?
Мне нужно:
- Проще (дата в формате ГГГГ-ММ-ДД@ЧЧ-ММ-СС)
- Моднее (.webp вместо .png или .jpg)
- Следяще (автоматика на всё про всё!)
Что сделал:
- Настроил слежку за папкой
~/Изображения/Снимки экрана
(как самый ревнивый муж) - Написал скрипт преобразователь screenshot_converter.sh (ниже будет код — не переключайтесь!)
- Заставил это дело работать как сервис (чтобы жило своей жизнью)
Теперь ниже по шагам.
Установка зависимостей
В Ubuntu есть стандартный механизм отслеживания изменений в файловой системе. Удобство в том, что не нужно постоянно опрашивать каталог — система сама сообщит о новых файлах.
Устанавливаем необходимый инструмент:
# Устанавливаем зависимости (если нужно)
sudo apt install -y inotify-tools webp
Теперь система готова уведомлять о событиях в папке.
Скрипт конвертации файлов скриншотов
#!/bin/bash
#################################################
# Конфигурация
WATCH_DIR="$HOME/Изображения/Снимки экрана"
LOG_FILE="$WATCH_DIR/screenshot-converter.log"
TEMP_DIR="/tmp/screenshot_processor"
mkdir -p "$TEMP_DIR"
# Функция логирования
log() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "[$timestamp] $1" >> "$LOG_FILE"
}
# Проверка зависимостей
check_dependencies() {
if ! command -v inotifywait &> /dev/null; then
log "ОШИБКА: inotify-tools не установлен. Выполните: sudo apt install -y inotify-tools"
exit 1
fi
if ! command -v cwebp &> /dev/null; then
log "ОШИБКА: webp не установлен. Выполните: sudo apt install -y webp"
exit 1
fi
}
# Функция обработки файла
process_file() {
local input_file="$1"
local file_ext=$(echo "${input_file##*.}" | tr '[:upper:]' '[:lower:]')
# Проверяем поддерживаемые форматы
if [[ "$file_ext" != "jpg" && "$file_ext" != "jpeg" && "$file_ext" != "png" ]]; then
##log "ПРОПУЩЕНО: Неподдерживаемый формат файла $input_file"
return
fi
# Получаем метаданные файла
local file_date=$(stat -c %y "$input_file" | cut -d' ' -f1)
local file_time=$(stat -c %y "$input_file" | cut -d' ' -f2 | cut -d'.' -f1 | tr ':' '-')
local new_name="${file_date}@${file_time}.webp"
local output_file="$WATCH_DIR/$new_name"
log "ОБРАБОТКА: Начало конвертации $input_file -> $new_name"
# Конвертируем в WebP
if [[ "$file_ext" == "png" ]]; then
cwebp -quiet -lossless "$input_file" -o "$output_file" 2>> "$LOG_FILE"
else
cwebp -quiet -q 80 "$input_file" -o "$output_file" 2>> "$LOG_FILE"
fi
if [ $? -eq 0 ]; then
log "УСПЕХ: Файл $input_file успешно конвертирован в $output_file"
rm "$input_file"
else
log "ОШИБКА: Не удалось конвертировать $input_file"
mv "$input_file" "$TEMP_DIR/"
log "ПЕРЕМЕЩЕНИЕ: Проблемный файл перемещен в $TEMP_DIR/"
fi
}
# Инициализация
log "ЗАПУСК: Сервис screenshot-converter запущен"
log "КОНФИГУРАЦИЯ: Мониторинг каталога $WATCH_DIR"
log "КОНФИГУРАЦИЯ: Логирование в $LOG_FILE"
check_dependencies
# Основной цикл обработки
inotifywait -m -q -e create -e moved_to --format '%w%f' "$WATCH_DIR" | while read -r file
do
sleep 2 # Даем время на завершение записи файла
process_file "$file"
done
Когда создадите файл скрипта, сделайте его исполняемым:
chmod +x screenshot_converter.sh
Запустите его для проверки:
./screenshot_converter.sh
Создание сервиса
Для автоматического запуска при загрузке системы создайте сервисный файл:
sudo nano /etc/systemd/system/screenshot-converter.service
Вставьте содержимое в файл screenshot-converter.service,
но замените в нём путь, где расположен скрипт ExecStart=/home/morikoff/apps/bash/screenshot-converter/, и замените переменную User=morikoff, на что-то своё:
[Unit]
Description=Screenshot to WebP Converter
After=network.target
[Service]
ExecStart=/home/morikoff/apps/bash/screenshot-converter/screenshot_converter.sh
Restart=always
User=morikoff
[Install]
WantedBy=multi-user.target
Запуск сервис
Включите и запустите сервис:
sudo systemctl enable screenshot-converter.service
sudo systemctl start screenshot-converter.service
Проверьте как работает ваш сервис, выполни sudo systemctl status screenshot-converter.service и см. ниже как это выглядит:

Резюме

Мы реализовали автоматизированную систему обработки скриншотов в Ubuntu 24.04, которая:
- Создаёт файлы с логичным именем в формате
ГГГГ-ММ-ДД@ЧЧ-ММ-СС.webp
- Весь процесс логируется в
screenshot-converter.log
- Работает как фоновый сервис
О перспективе
Потенциальные улучшения системы:
- Автоматическая организация скриншотов
- Модифицировать
screenshot_converter.sh
для сортировки по папкам года
Пример структуры:~/Изображения/Снимки экрана/2026/
~/Изображения/Снимки экрана/2025/ - Одновременно с сортировкой добавить конвертацию в AVIF через:
convert input.png -quality 85 output.avif
Обработка скринкастов:
- Аналогичный механизм для видео в
~/Видео/Записи экрана/
- Перекодирование MP4 → AV1 (libaom-av1) командой:
ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -cpu-used 4 output.mkv
- Оптимизация:
- Снижение битрейта на 50-60% без видимой потери качества
- Автоматическое определение разрешения источника
Какое из направлений стоит развивать в первую очередь? Или возможно, вы видите другие приоритетные задачи для системы?