Skip to main content

Static images to animated video — Ken Burns zoom + ASS subtitles + audio sync

Project description

comicvid

Static images to animated video — Ken Burns zoom + ASS subtitles + audio sync.

Turn a folder of images into a polished MP4 video with a single command. Pure FFmpeg + Python — zero API costs.

Features

  • Ken Burns zoom — subtle 100% → 105% camera movement on each image
  • ASS subtitles — styled (28px font, black stroke, bottom-center) with Chinese font support
  • Audio sync — AAC 44100 Hz mono, automatically synchronized to video
  • Landscape & portrait — 1280×720 or 1080×1920 (any resolution)
  • Batch mode — process multiple subfolders at once
  • Pure CLI — no GUI, no config files, no API keys

Installation

pip install comicvid

Requires Python 3.10+ and FFmpeg installed on your system.

Usage

Basic render

comicvid render ./panels/ --output episode.mp4 --duration 30

With subtitles and audio

comicvid render ./panels/ \
    --output episode.mp4 \
    --duration 30 \
    --subtitle captions.srt \
    --audio narration.wav \
    --width 1280 --height 720

Per-image text subtitles

comicvid render ./panels/ \
    --output episode.mp4 \
    -t "Hello, world!" \
    -t "Second panel" \
    -t "Third panel" \
    --audio music.wav

Vertical video (TikTok/Reels)

comicvid render ./panels/ \
    --output vertical.mp4 \
    --duration 60 \
    --resolution 1080x1920

Batch mode (episode directories)

comicvid batch ./episodes/ --output-dir ./output/

All options

Usage: comicvid render [OPTIONS] IMAGE_DIR

  Render images from IMAGE_DIR into an MP4 video.

Options:
  -o, --output TEXT               Output MP4 path.  [default: output.mp4]
  --duration FLOAT                Total video duration in seconds.
  --per-image-duration FLOAT      Seconds per image.  [default: 3.0]
  --subtitle FILE                 External subtitle file (SRT or ASS).
  --subtitle-format [ass|srt]     Subtitle format.  [default: ass]
  -t, --text TEXT                 Subtitle text per image.
  --audio FILE                    Audio file (WAV, MP3, etc.).
  --width INTEGER                 Output video width.  [default: 1280]
  --height INTEGER                Output video height.  [default: 720]
  --resolution TEXT               Shortcut: '1920x1080'.
  --fps INTEGER                   Frames per second.  [default: 24]
  --crf INTEGER                   H.264 CRF quality.  [default: 23]
  --video-bitrate TEXT            Video bitrate.  [default: 1500k]
  --zoom FLOAT                    Ken Burns zoom amount.  [default: 0.05]
  --ffmpeg TEXT                   FFmpeg binary path.  [default: ffmpeg]
  --keep-temps                    Keep temporary files.
  --help                          Show this message and exit.

Input format

IMAGE_DIR should contain panel images sorted by filename. Supported formats:

  • PNG, JPG, JPEG, WEBP, BMP

Images are processed in alphabetical order.

How it works

  1. Scene building — each image is looped for its duration with a Ken Burns zoompan filter (100% → 105%)
  2. Audio encodingffmpeg re-encodes audio to AAC at 44100 Hz mono
  3. Subtitles — ASS format with styled Chinese-capable fonts, burned into video
  4. Concatenation — FFmpeg concat demuxer assembles scenes
  5. Output — Final MP4 with H.264 video + AAC audio

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

comicvid-0.1.0.tar.gz (21.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

comicvid-0.1.0-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file comicvid-0.1.0.tar.gz.

File metadata

  • Download URL: comicvid-0.1.0.tar.gz
  • Upload date:
  • Size: 21.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for comicvid-0.1.0.tar.gz
Algorithm Hash digest
SHA256 337a6011d5e60371bfeb0b3d06d65f80424e9590ef078072103df3fc3359fbb1
MD5 7bb791c08461cc3fca157e07a380de68
BLAKE2b-256 c8178ad7a366c5c06513770405286d0e6e1ca6a7c54892002b1635fbb173730d

See more details on using hashes here.

File details

Details for the file comicvid-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: comicvid-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for comicvid-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 387067b5b161f183e5ff9ebda6e7d8c75478a1b857809e6a946e5257ccb53ac8
MD5 4907ac33979cdbb16e7e8af3b144c001
BLAKE2b-256 e302abd4e425aa081df35a70882ed53253b243c4bd98d7eaa26686a4ade2a83d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page