3.9 KiB
movmaker
Simple Python + ffmpeg movie maker.
Drop pictures, videos, music, and optionally one simple data.txt file into a single flat input directory. Then run one command to create an MP4 video.
No YAML. No required subdirectories.
Requirements
- Python 3
ffmpegffprobeusually included with ffmpeg
Install on Debian/Ubuntu/Raspberry Pi OS:
sudo apt install ffmpeg
Fonts
The default title/stamp styling uses these fonts:
- Bebas Neue for the opening title, date, and location
- Inter for the bottom-left/bottom-right stamps and per-file captions
Both fonts support common Danish and Croatian characters such as æ ø å Æ Ø Å č ć ž š đ Č Ć Ž Š Đ.
Install them locally for the current user:
mkdir -p ~/.local/share/fonts/google
curl -L -o ~/.local/share/fonts/google/BebasNeue-Regular.ttf \
'https://github.com/google/fonts/raw/main/ofl/bebasneue/BebasNeue-Regular.ttf'
curl -L -o ~/.local/share/fonts/google/Inter%5Bopsz,wght%5D.ttf \
'https://github.com/google/fonts/raw/main/ofl/inter/Inter%5Bopsz,wght%5D.ttf'
fc-cache -f ~/.local/share/fonts/google
Check that fonts are available:
fc-match 'Bebas Neue'
fc-match 'Inter'
Input folder
Example:
input/
IMG_001.jpg
IMG_002.png
holiday_clip.mp4
music.mp3
data.txt
Supported file types:
- Images:
.jpg,.jpeg,.png,.webp,.bmp,.tif,.tiff - Videos:
.mp4,.mov,.mkv,.avi,.webm,.m4v - Audio:
.mp3,.wav,.m4a,.aac,.flac,.ogg - Data:
data.txt,info.txt, ortitle.txt
Files are ordered by filename, so names like this work well:
001.jpg
002.jpg
003.mp4
004.jpg
data.txt
data.txt is optional.
Simplest format:
Paris Trip
Paris, France
May 2024
Those three lines mean:
- title
- location
- date
If the date line is omitted, movmaker uses the date from the first picture/video and displays it like:
May 14th 2026
Key/value format also works:
title: Paris Trip
date: May 2024
place: Paris, France
Optional per-file captions are supported:
IMG_001.jpg: Eiffel Tower
IMG_002.jpg: Louvre
IMG_003.jpg: First line | Second line
Usage
Basic:
python3 movmaker.py input
With options:
python3 movmaker.py input \
--out-dir out \
--image-duration 6 \
--fade 3 \
--audio-fade 10 \
--audio-fade-in 2 \
--video-fade 1.5 \
--first-transition-at 12 \
--resolution 1920x1080 \
--fps 30
Fast preview render:
python3 movmaker.py input --preview
Current behavior
- scans one flat input directory
- auto-detects media/audio/data files by extension
- shows each image fully visible for 6 seconds by default, not counting crossfades
- keeps the first image longer so the first transition starts at 12 seconds by default
- includes video clips inline
- crossfades between media items over 3 seconds by default
- loops/trims music to match the video
- fades music in over 2 seconds and out over 10 seconds by default
- fades video in/out over 1.5 seconds by default
- overlays the opening title for the first 6 seconds: large title, then date/location on one line
- displays optional per-file captions at bottom center; use
|to split caption lines - adds persistent bottom-left title/date/place and bottom-right
@bubulescustamps - writes safe ASCII text in rendered overlays and metadata, so special letters become readable equivalents like
Č->C,å->a,ø->o - embeds MP4 metadata: title, date, location, artist, comment, and creation_time
- writes an MP4 file named like
YYYYMMDD_title.mp4by default - takes
YYYYMMDDfrom the first picture/video metadata, falling back to file modification date - uses local
ffmpeg/ffmpegandffmpeg/ffprobewhen present, otherwise system tools
Notes
This is an early version. The intended workflow is deliberately simple: dump files into one folder and run the script.