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
- Scene building — each image is looped for its duration with a Ken Burns
zoompanfilter (100% → 105%) - Audio encoding —
ffmpegre-encodes audio to AAC at 44100 Hz mono - Subtitles — ASS format with styled Chinese-capable fonts, burned into video
- Concatenation — FFmpeg concat demuxer assembles scenes
- Output — Final MP4 with H.264 video + AAC audio
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
337a6011d5e60371bfeb0b3d06d65f80424e9590ef078072103df3fc3359fbb1
|
|
| MD5 |
7bb791c08461cc3fca157e07a380de68
|
|
| BLAKE2b-256 |
c8178ad7a366c5c06513770405286d0e6e1ca6a7c54892002b1635fbb173730d
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
387067b5b161f183e5ff9ebda6e7d8c75478a1b857809e6a946e5257ccb53ac8
|
|
| MD5 |
4907ac33979cdbb16e7e8af3b144c001
|
|
| BLAKE2b-256 |
e302abd4e425aa081df35a70882ed53253b243c4bd98d7eaa26686a4ade2a83d
|