No description
| examples | ||
| hooks | ||
| .gitignore | ||
| index.php | ||
| movmaker.py | ||
| mvlog_worker.py | ||
| new.php | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| send_push.js | ||
movmaker
Flat-folder Python + ffmpeg movie maker, plus optional MVLog worker.
What it does
- Input: one directory with mixed images/videos/audio + optional
data.txt - Output: one rendered MP4 with transitions, captions, intro/logo, stamps, and embedded metadata
- Optional worker (
mvlog_worker.py) syncs/render/publishes MVLog jobs to a remote webserver
Requirements
- Python 3
ffmpeg,ffprobe
Install (Debian/Ubuntu):
sudo apt install ffmpeg
Basic usage
python3 movmaker.py /path/to/input
Preview render:
python3 movmaker.py /path/to/input --preview
Custom output dir:
python3 movmaker.py /path/to/input --out-dir /path/to/output
Input model (flat folder)
Supported media:
- Images:
.jpg .jpeg .png .webp .bmp .tif .tiff - Videos:
.mp4 .mov .mkv .avi .webm .m4v - Audio:
.mp3 .wav .m4a .aac .flac .ogg - Data file:
data.txt(also acceptsinfo.txt,title.txt)
No required subfolders.
Ordering
If order.json exists in the input folder, it is used first for visual media order.
Then fallback order is handled by movmaker logic (metadata/filename/file-time based sorting path).
order.json should contain only visual files (images/videos).
data.txt format
Use key: value lines.
General keys used by movmaker:
Title/NameTeaserQuote_daLocation/Place/WhereDate/Dates/WhenDescription/Desc/Synopsis
Per-file captions:
IMG_0001.jpg: caption text
clip01.mp4: caption text
Per-video source audio toggle (optional):
clip01.mp4 audio: yes
Current render behavior (important)
- Default still duration: 6s
- Default crossfade: 3s
- First still is extended (
FIRST_IMAGE_DURATION_MULTIPLIER) - Intro/logo mode supported (
--intro-logo) - Teaser is metadata-only (not burned into intro text)
quote_daandteaserare embedded in output metadata- Long video caption rule:
- if clip duration > 10s, caption starts at +2s and shows for 6s
- Output filename is normalized/safe ASCII (
YYYYMMDD_slug.mp4) - Detailed ffmpeg logs are written under
<input>/.logs/
MVLog worker (mvlog_worker.py)
Worker is for MVLog web integration (remote in-dir -> local render -> remote out-dir).
Key points:
- Uses per-job state
.movmaker-state.json - Honors job toggles (
.movmaker-enabled,.movmaker-preview,.mvlog-hidden) - Includes article IDs from
.mvlog-idin state - Ignores
.mvlog-idand.mvlog-hide-mapin fingerprinting - Publishes output atomically and clears remote cache file
- Supports remote mode (SSH/SCP) and
--localmode
Run once:
./mvlog_worker.py
Single job:
./mvlog_worker.py --job 20260525_mohnesee
Force rerender:
./mvlog_worker.py --job 20260525_mohnesee --force
Pass extra movmaker args:
./mvlog_worker.py --movmaker-arg=--preview
Notes
- This repo does not send web push itself; push is handled by MVLog web app server-side.
- Keep secrets out of git (API keys, push keys, auth files).