Make video projects, with a moving channel split as the first video effect
A project can now be a clip: Setup has a Video switch with a length, a frame rate and presets that set the canvas too (Instagram story, reel and feed video, TikTok / YouTube Short, Square loop, Full HD clip). The preview renders the whole clip, shrunk to a memory budget, and loops it with play/pause and a scale; Save As... renders it again at full size and pipes the frames into ffmpeg as .mp4, .mov, .mkv, .webm or .gif, with a progress window that can cancel. --duration, --fps and --video-preset do the same from the command line. Effects learn about time through FrameTime and Effect::renderFrame, which falls back to render, so nothing that holds still changes. Channel split now sways, shakes and rolls a tracking bar down the picture in a video; its motion params are marked forVideo() and hidden in a still project, and a still renders byte for byte as before. renderFrames starts every frame from the same seed and renders the still stages ahead of the first moving one only once. The version moves to 0.6.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,8 @@ those declarations, so a new effect needs no UI or CLI code.
|
||||
|
||||
Requirements: a C++20 compiler (GCC 13+), CMake 3.20+, `gtkmm-4.0` and
|
||||
`gdk-pixbuf-2.0` development packages. On Arch: `gcc cmake ninja gtkmm-4.0`.
|
||||
Writing videos needs the `ffmpeg` program at run time (on Arch: `ffmpeg`);
|
||||
without it everything else works and the video tests are skipped.
|
||||
|
||||
```bash
|
||||
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
|
||||
@@ -58,6 +60,32 @@ Custom hands them back, keeping whatever the format last worked out to. A
|
||||
format is saved with the project, so an A4 project reopens as A4 rather than as
|
||||
the pixels it happened to be.
|
||||
|
||||
### Video
|
||||
|
||||
A project can be a video clip instead of a still: switch **Video** on under
|
||||
Setup and give it a length and a frame rate, or pick a preset that sets the
|
||||
canvas too — Instagram story (1080×1920, 15 s), Instagram reel (30 s),
|
||||
Instagram feed video, TikTok / YouTube Short, Square loop (6 s) and Full HD
|
||||
clip. The preview renders the whole clip first, shrunk to fit in memory, and
|
||||
then loops it, with play/pause and a scale to look at any one frame. **Save
|
||||
As…** then writes the video at full size through `ffmpeg`, which has to be
|
||||
installed: `.mp4`, `.mov` and `.mkv` as H.264, `.webm` as VP9, `.gif` as a
|
||||
palette GIF.
|
||||
|
||||
```bash
|
||||
build/effector -o story.mp4 --video-preset instagram-story -e channelsplit --seed 1 photo.jpg
|
||||
build/effector -o loop.gif -s 480x480 --duration 3 --fps 15 -e channelsplit photo.jpg
|
||||
```
|
||||
|
||||
`--duration SECONDS` and `--fps N` make any run a video; a preset fills in
|
||||
whatever was not given alongside it. Effects that move over time are video
|
||||
effects; for now that is **Channel split**, which in a video sways its
|
||||
channels, shakes them from frame to frame and rolls a tracking bar down the
|
||||
picture, like a worn tape on an old tube. Its motion params only show in a
|
||||
video project, and a still renders exactly as before. Every frame starts from
|
||||
the same seed, so stages that do not move hold still while one that does
|
||||
moves, and a clip renders frame for frame the same again.
|
||||
|
||||
Any option can also be passed when launching the interface; it becomes the
|
||||
starting state (images, canvas size, effect settings, seed).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user