movmaker/README.md

3.5 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
  • ffmpeg
  • ffprobe usually 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
  • Montserrat for the bottom-left and bottom-right stamps

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/Montserrat%5Bwght%5D.ttf \
  'https://github.com/google/fonts/raw/main/ofl/montserrat/Montserrat%5Bwght%5D.ttf'
fc-cache -f ~/.local/share/fonts/google

Optional font also used during experimentation:

curl -L -o ~/.local/share/fonts/google/Cinzel%5Bwght%5D.ttf \
  'https://github.com/google/fonts/raw/main/ofl/cinzel/Cinzel%5Bwght%5D.ttf'
fc-cache -f ~/.local/share/fonts/google

Check that fonts are available:

fc-match 'Bebas Neue'
fc-match 'Montserrat'
fc-match 'Cinzel'

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, or title.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
May 2024
Paris, France

Those three lines mean:

  1. title
  2. date
  3. place

Key/value format also works:

title: Paris Trip
date: May 2024
place: Paris, France

Optional per-file captions may be supported, but they are not required:

IMG_001.jpg: Eiffel Tower
IMG_002.jpg: Louvre

Usage

Basic:

python3 movmaker.py input

With options:

python3 movmaker.py input \
  --out-dir out \
  --image-duration 6 \
  --fade 3 \
  --audio-fade 10 \
  --first-transition-at 12 \
  --resolution 1920x1080 \
  --fps 30

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 at the beginning and out at the end over 10 seconds by default
  • overlays the opening title for the first 6 seconds: large bold title, then smaller non-bold date/location on one line
  • adds persistent bottom-left title/date/place and bottom-right marijo@novosel.dk stamps
  • writes an MP4 file named like YYYYMMDD_title.mp4 by default
  • takes YYYYMMDD from the first picture/video metadata, falling back to file modification date
  • uses local ffmpeg/ffmpeg and ffmpeg/ffprobe when 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.