Уведомления о завершении рендера
Рендер сцены в Blender, экспорт таймлайна в DaVinci, склейка в ffmpeg,
большая сборка make — всё это идёт десятки минут, а то и часы. Вместо того
чтобы поглядывать на прогресс-бар, повесим push на завершение: сколько шло и
чем закончилось.
Универсальный приём &&/||
Заголовок раздела «Универсальный приём &&/||»Самое простое — дописать через && (успех) и || (ошибка):
blender -b scene.blend -o //out/ -f 1 && \ notifly-send "✅ Рендер готов" "scene.blend" 5 || \ notifly-send "❌ Рендер упал" "См. терминал" 8Тот же приём в виде ;, если статус не важен, а важен сам факт завершения:
make -j$(nproc) ; notifly-send "🏁 Сборка завершена" "rc=$?" 5Обёртка notifly-render
Заголовок раздела «Обёртка notifly-render»Чтобы в push приходили длительность и код возврата, запускаем команду в обёртке:
#!/usr/bin/env bash# ~/bin/notifly-render — `notifly-render ffmpeg -i in.mkv ... out.mp4`set -uset -a; source ~/.notifly.env; set +a
START=$(date +%s)LABEL="$*"LABEL="${LABEL:0:60}" # обрезаем длинную командную строку
"$@" # запускаем сам долгий процессRC=$?
END=$(date +%s)ELAPSED=$(printf '%02d:%02d:%02d' $(( (END-START)/3600 )) $(( (END-START)%3600/60 )) $(( (END-START)%60 )))
if (( RC == 0 )); then notifly-send "✅ Готово: $LABEL" "Время: $ELAPSED" 5else notifly-send "❌ Ошибка (rc=$RC): $LABEL" "Время: $ELAPSED" 8fiexit $RCИспользование:
notifly-render blender -b scene.blend -o //out/ -anotifly-render ffmpeg -i input.mov -c:v libx265 -crf 24 out.mp4notifly-render make -j$(nproc)Успех приходит на приоритете 5, ошибка — на 8 (громче, проходит DND по правилам ОС; см. приоритеты).
DaVinci Resolve: экспорт из очереди
Заголовок раздела «DaVinci Resolve: экспорт из очереди»Resolve умеет запускать скрипт после рендера через Deliver → «Render» с внешней командой, но проще обернуть headless-рендер:
notifly-render /opt/resolve/bin/resolve -nogui -render project.drpПакетный рендер: push после каждого и итог
Заголовок раздела «Пакетный рендер: push после каждого и итог»for f in shots/*.blend; do if notifly-render blender -b "$f" -o "//render/$(basename "$f" .blend)_" -a; then : fidonenotifly-send "🎬 Все шоты готовы" "Рендеров: $(ls render/*.png | wc -l)" 6Windows: PowerShell Notifly-Render
Заголовок раздела «Windows: PowerShell Notifly-Render»Аналог обёртки для Windows. Предполагается настроенная
функция Send-Notifly.
param([Parameter(Mandatory, ValueFromRemainingArguments)] [string[]]$Cmd). $env:USERPROFILE\Documents\WindowsPowerShell\Notifly.ps1
$start = Get-Date$label = ($Cmd -join ' ')$label = $label.Substring(0, [Math]::Min(60, $label.Length))
& $Cmd[0] $Cmd[1..($Cmd.Count-1)] # запускаем долгий процесс$rc = $LASTEXITCODE$dur = ((Get-Date) - $start).ToString('hh\:mm\:ss')
if ($rc -eq 0) { Send-Notifly -Title "✅ Готово: $label" -Message "Время: $dur" -Priority 5} else { Send-Notifly -Title "❌ Ошибка (rc=$rc): $label" -Message "Время: $dur" -Priority 8}exit $rcИспользование и алиас в профиле PowerShell:
Set-Alias nrender C:\scripts\Notifly-Render.ps1nrender blender -b scene.blend -o //out/ -anrender ffmpeg -i input.mov -c:v libx265 -crf 24 out.mp4Одноразовый вариант через &&-аналог PowerShell:
blender -b scene.blend -o //out/ -aif ($LASTEXITCODE -eq 0) { Send-Notifly -Title "✅ Рендер готов" -Priority 5 }else { Send-Notifly -Title "❌ Рендер упал" -Priority 8 }- Не караулите прогресс-бар. Ушли пить кофе — push вернёт вас в нужный момент.
- Сразу видно результат. Длительность и код возврата: успех тихо, провал — громко.
- Метрики для оценки. Со временем понятно, сколько реально идёт рендер сцены.
Что улучшить дальше
Заголовок раздела «Что улучшить дальше»- Добавить в сообщение размер итогового файла (
du -h out.mp4). - Приложить хвост лога рендера через
extras— см. дополнительные поля. - Ставить рендеры в очередь и слать один итоговый push на всю пачку.