mirror of https://github.com/GNOME/gimp.git
1219 lines
45 KiB
Plaintext
1219 lines
45 KiB
Plaintext
Project gap "Gimp Animation Package" 01. May 2000 release 1.1.20a
|
|
|
|
--------------------------------------------------------------------
|
|
Introduction
|
|
--------------------------------------------------------------------
|
|
|
|
The GIMP (1.0.2 and 1.1.x) is a great Program for creating and manipulating
|
|
Pixelbased Images of many types. The Plugin Concept and the Procedural Database
|
|
allows Programmers to extend the Gimp's Functions in many ways.
|
|
|
|
For now there are some Plugins that supports Animation Features,
|
|
based on Layers. Each Layer of the Image is considered as one frame
|
|
of the Animation.
|
|
GAP is a collection of Plugins that extends the GIMP's animation capabilities
|
|
by supporting the creation of more complex animations.
|
|
(Additional Informations about the GAP can be found in the GimpUserManual 1.0.0
|
|
Chapter Advanced Animation)
|
|
|
|
Idea:
|
|
With some little changes to the gimp-core and a few new plug-ins
|
|
gimp can operate on a series of images as if they were
|
|
a single one.
|
|
Each frame of an Animation can have multiple Layers.
|
|
The user can step from frame to frame by pressing an Accelerator Key.
|
|
|
|
Layeranimated Images can be combined with frames (multiple images)
|
|
as I have done in "Move Path" Plugin (see below).
|
|
|
|
Concept:
|
|
An animation consists of a series of Images of the same size & Type
|
|
(Frames).
|
|
In my Concept each Frame is stored seperate on Disk, using a filename
|
|
convention that includes the frame Number and extension.
|
|
|
|
Example: film_0001.xcf,
|
|
film_0002.xcf
|
|
..
|
|
film_0012.xcf
|
|
|
|
gimp's xcf Fileformat should be used to store the frames,
|
|
so that each frame can have more Layers.
|
|
(Notes:
|
|
Sound is not supported in this Concept, but can be added
|
|
by some of the supported Video Encoders.
|
|
Playbackrates (framerate) is also set at video encoding)
|
|
|
|
This requires a lot of Diskspace but offers much more flexibility
|
|
while working on the animation.
|
|
|
|
To save diskspace you may optional use gziped xcf frames
|
|
(takes extra time to un/compress) by using the extension .xcfgz
|
|
(gzip has to be installed on your system to do that)
|
|
If you can accept lossy compression you may also use
|
|
the xjt fileformat to store your frames on jpeg based compression.
|
|
|
|
The final Product can be encoded as videofile
|
|
or converted to one multilayerd Image
|
|
that can be saved as Animated-Gif
|
|
(or, in the future in other Animation Formats
|
|
when other Load/Save Modules were added to the gimp)
|
|
|
|
GAP provides frontend dialog interfaces for
|
|
software MPEG video encoder programs.
|
|
(mpeg_encode and mpeg2encode)
|
|
|
|
GAP also provides an XANIM frontend to load AnimFrames from multimedia fileformats
|
|
(avi, quicktime, ....) based on the famous xanim multimedia player.
|
|
see the file README_xanim_hack for more details.
|
|
|
|
|
|
|
|
--------------------------------------------------------------------
|
|
Installation
|
|
--------------------------------------------------------------------
|
|
|
|
GAP is part of the development Gimp distribution since GIMP 1.1.4 and
|
|
should get installed along with the other plug-ins.
|
|
|
|
|
|
Notes:
|
|
- GAP provides frontend dialogs for:
|
|
- mpeg_encode (V1.5R2)
|
|
- mpeg2encode (V1.2)
|
|
- xanim 2.80.1 exporting edition (with the extensions from loki entertainment)
|
|
|
|
The frontends and the external Programs need UNIX environment to run.
|
|
|
|
If you like to use that stuff, you should install
|
|
mpeg_encode and mpeg_play
|
|
mpeg2encode and mpeg2decode
|
|
xanim 2.80.1 (loki)
|
|
on your system.
|
|
|
|
|
|
(There is no need to install those external programs to compile GAP)
|
|
|
|
- GAP-Patch support for some older gimp releases
|
|
is available at the Registry:
|
|
|
|
http://registry.gimp.org/detailview.phtml?plugin=gap_patches
|
|
|
|
|
|
--------------------------------------------------------------------
|
|
Supported Videoformats
|
|
--------------------------------------------------------------------
|
|
|
|
Read(decode):
|
|
Any Multimedia Fileformat, XANIM can read
|
|
(AVI, Quicktime, and a lot more, see xanim docu for more information)
|
|
|
|
MPEG1
|
|
support based om mpeg library (libmpeg.a 1.3.1) *** has NO Audio support ****
|
|
|
|
Write (encode)
|
|
Quicktime
|
|
(under development)
|
|
support based on the quicktime4linux library 1.1.3 (requires libjpeg, libpng libz)
|
|
(Warning: most of the common codecs are not supported)
|
|
|
|
AVI
|
|
(under development)
|
|
|
|
MJPEG
|
|
(under development)
|
|
|
|
SMJPEG
|
|
(under development)
|
|
|
|
|
|
--------------------------------------------------------------------
|
|
Change Log
|
|
--------------------------------------------------------------------
|
|
- 1.1.20a - MovePath
|
|
- AnimPreview
|
|
- Keyframes
|
|
- Force visibility
|
|
- VCR Navigator
|
|
Popup menu
|
|
copy,
|
|
cut
|
|
paste before
|
|
paste after
|
|
paste replace
|
|
clear pastebuffer
|
|
- 0.99.00 - Move Path bugfix in the dialog
|
|
(update preview did'nt work with gimp 1.1.2 and gtk 1.1)
|
|
- Animated Filtercalls:
|
|
added a 2.nd Set of Iterators (iter_ALT Procedures) for
|
|
Plugins of GIMP 1.1.3.
|
|
- bugfixes in iterator code generator.
|
|
- GAP now uses gimp standard procedures to copy layers and channels.
|
|
- prepared filename-handling for win/dos conventions.
|
|
- 0.98.02 - GAP_DB_BROWSER (1.1 variant) show help like the dbbrowser in gimp-1.1.1
|
|
- 0.98.01 - GAP_DB_BROWSER variants for GIMP 1.0 and GIMP 1.1
|
|
new e-mail adress
|
|
xanim-hack
|
|
- 0.98.00 - Sarted porting GAP to GIMP 1.1
|
|
Changed internal interfaces to work with
|
|
both GIMP 1.0.2 and GIMP 1.1 PDB.
|
|
|
|
MovePath: The Layermask of imported Source Layerobjects
|
|
is no longer ignored.
|
|
- 0.97.01 - Added Patches for the XJT Load/Save filters
|
|
(XJT support for gimp 1.0.0 upto gimp 1.0.2)
|
|
- 0.97.00 - Patches updated to work with gimp 1.0.2
|
|
- New Plugin 'Frames Modify'
|
|
- Bugfix in patchcode layer_cmds.c
|
|
(get/set linked state didnt work since gimp 0.99.18)
|
|
- 0.96.04 - Patches updated to work with gimp 1.0.1
|
|
- 0.96.03 - Extended Pitstop-Dialog in 'Filter All layers'
|
|
(now you can specify a backup file to store the
|
|
Image after each non-interactive filtercall,
|
|
futher you may skip the filtercall.
|
|
These extensions were done because the MapObject
|
|
Plugin crashes sometimes
|
|
(after 3 hours calculating time on a PII 300Mhz processor)
|
|
- Extended Parameters for non-interactive call of
|
|
plug_in_gap_range_to_multilayer and
|
|
plug_in_gap_split
|
|
(the image_id of the created image is now returned)
|
|
- 0.96.02 - Added Clip To Image Option and Tooltips in MovePath Plugin.
|
|
_ Added Plugin 'Framesequence shift'
|
|
- Exended 'Frames To Image' Plugin
|
|
(now you can set framerate and framename
|
|
for the generated layers)
|
|
- Extended 'Duplicate Frames' Plugin
|
|
(now you can use a framerange as source,
|
|
not just the current frame)
|
|
- 0.96.01 - Bugfix (refresh problems when GAP's array dialog was used twice
|
|
in one plugin -- because of double call to gtk_init)
|
|
- 0.96.00 - Added AnimFrames scale, resize and crop
|
|
- Added 'Split Image to Frames" (plug_in_gap_split)
|
|
- Added 'Frames MPEG_encode' plug_in_gap_mpeg_encode
|
|
(Requires free software 'mpeg_encode' to run)
|
|
- Added 'Frames MPEG2_encode' plug_in_gap_mpeg2encode
|
|
(Requires software 'mpeg2encode' to run)
|
|
- Most Dialogs changed (some have got tooltips)
|
|
(now based on the new gap_arr_dialog module)
|
|
- internal changes (header files for all modules)
|
|
- bugfix: memory leak in gap_layer_copy.c
|
|
- 0.95.04 - Iterator Generation: added support for iteration on PARAM_DRAWABLE type
|
|
Updated Iterator_ALT procedures for:
|
|
- BumpMap (now you can use animated bumpmaps)
|
|
- DepthMerge
|
|
- Displace
|
|
- Refract
|
|
- 0.95.03 - Patches updated to work with gimp 1.0.0
|
|
(Removed patches for gimp 0.99.19 due to sizelimit
|
|
in the Plugin registry)
|
|
- 0.95.02 - Added Script sel-to-anim-img.scm
|
|
- 0.95.01 - Made Patches usable for GIMP release 0.99.31
|
|
(there were no updates needed, just added some links
|
|
from 0.99.29 to 0.99.31)
|
|
- 0.95.00 - extended MovePath plugin.
|
|
Now you can specify an angle for each point of the path
|
|
how to rotate the moving object layer.
|
|
- 0.94.02 - Patches updated to work with gimp 0.99.29
|
|
- 0.94.01 - Added new features to 'Frames to Image' Plugin:
|
|
Select of flatten_modes, and optional exclude of the BG-Layer.
|
|
- 0.94.00 - Move Path Plugin uses now 1 Point per default.
|
|
(If you want to move an Object, you'll have to)
|
|
add Point(s) explicit.
|
|
- bugfix: Move Path Plugin initial value for src_paintmode
|
|
undefined values sometimes caused 'cant get new layer' Error
|
|
and Sourcelayers were not copied to the frames
|
|
- Patches updated to work with gimp 0.99.28
|
|
- Updated Foundation adress
|
|
- 0.93.06 - Patches updated to work with gimp 0.99.27
|
|
implemented new versions of
|
|
gimage:gimage_lower_top_layer
|
|
gimage:gimage_lower_bot_layer
|
|
(the old versions were slow and failed
|
|
on Images with many layers)
|
|
- 0.93.05 - Patches updated to work with gimp 0.99.24
|
|
Patches extended:
|
|
Added gimp-core functions to layers dialog:
|
|
raising/lowering a Layer to Top/Bottom of the layerstack
|
|
- 0.93.04 - Patches updated to work with gimp 0.99.22
|
|
Window with Info Message if no Source Image was
|
|
selected in MovePath
|
|
- 0.93.03 - Bugfix of the Patches updated to work with gimp 0.99.19
|
|
(duplicate_into should now copy channels too)
|
|
- 0.93.02 - Patches updated to work with gimp 0.99.19
|
|
|
|
- 0.93.01 - Bugfix
|
|
(GAP filters now should work on frames that are not
|
|
in the current directory)
|
|
|
|
- 0.93.00 - Internal "Gen Code by name" Button
|
|
generates additional file <plugin_name>_Iterator.c
|
|
(see README_Developers for more details)
|
|
- The Patches to the gimp core
|
|
(needed to run GAP bend, movel, adjust, implayer Plugins)
|
|
are now available for gimp releases:
|
|
0.99.16
|
|
0.99.17
|
|
0.99.18
|
|
0.99.19
|
|
the patches are stored in seperate versioned directories,
|
|
The apply_patch.sh script now expects the gimp-version
|
|
as calling argument.
|
|
|
|
- 0.92.00 - "Filter all Layers" Dialog Window after 1.st and 2.nd
|
|
Interactive Plugin call. (to give a chance to see
|
|
the effects caused by the plugin or to cancel
|
|
before proceeding)
|
|
- New Patches to the gimp core
|
|
"gimp_layer_get_linked"
|
|
"gimp_layer_set_linked"
|
|
|
|
(for Plugins "adjust", "bend", "movel"
|
|
these Plugins are not part of GAP, you can get them
|
|
from the Plugin Registry)
|
|
|
|
- Internal"Gen Code by name" Button if GAP_DEBUG environment is set.
|
|
|
|
- 0.91.01 - "Apply Varying" Button insensitive if animated call
|
|
not available.
|
|
- Convert Frames Dialog window
|
|
now hides Colors and Dither entries
|
|
if Conv to INDEXED is not selected.
|
|
|
|
|
|
- 0.91.00 - Patches to the gimp core were updated to work with gimp 0.99.16
|
|
(plus: gimage_update_full was added for GAP)
|
|
(The Patches do work with gimp 0.99.17 too)
|
|
|
|
- "plug_in_gap_layers_run_animfilter"
|
|
New Plugin allows animated calls to (more than 50) existing Plugins
|
|
|
|
--------------------------------------------------------------------
|
|
How to use
|
|
--------------------------------------------------------------------
|
|
|
|
WebTip: My GIMP-page http://pages.hotbot.com/arts/hof/index.html
|
|
contains an illustrated GAP-tutorial, some demo-animations
|
|
and other plugins.
|
|
|
|
The chapter "Advanced Animation" in the Gimp User Manual 1.0
|
|
(by Karin & Olof Kylander) also describes GAP with many
|
|
Illustrations.
|
|
|
|
|
|
|
|
- Creating multiple frames (AnimFrames)
|
|
|
|
- from an existing single image
|
|
Save your Image as XCF file. (File->Save as)
|
|
use a Name that ends up in _0001.xcf (or _0001.xcfgz)
|
|
|
|
Then duplicate your image (Video->Duplicate)
|
|
You'll be asked how much Copies you need.
|
|
(Note: all copies are stored on disk immediate
|
|
without explicite save)
|
|
|
|
- from an existing (layeranimated) multilayer image
|
|
use
|
|
Video->Split Img to frames
|
|
|
|
This will create Frames, a series of Images on disk,
|
|
with a Name that ends up in _0001.xcf).
|
|
Optional you may use other extensions. (.xcfgz, .jpg ...)
|
|
|
|
WARNING: The extension defines the fileformat
|
|
of the Frames. Most of the other Formats
|
|
(than GIMP's .xcf Format) can NOT save
|
|
multilayer frames or frames with alpha channels.
|
|
|
|
- from outside the gimp
|
|
You may rename and copy existing XCF Images
|
|
according to the frame naming conventions.
|
|
<img>_0001.xcf
|
|
<img>_0002.xcf
|
|
...
|
|
Then load (only one of them) into the GIMP.
|
|
|
|
- Navigation (Goto)
|
|
It is recommanded to define some Accelerator Keys for quick
|
|
walk through the frames.
|
|
Here are my settings (excerpt from my $HOME/.gimp/menurc )
|
|
|
|
(menu-path "<Image>/Video/Goto/First Frame" "<control><alt>1")
|
|
(menu-path "<Image>/Video/Goto/Prev Frame" "<alt>1")
|
|
(menu-path "<Image>/Video/Goto/Next Frame" "<alt>2")
|
|
(menu-path "<Image>/Video/Goto/Any Frame" "<alt>3")
|
|
(menu-path "<Image>/Video/Goto/Last Frame" "<control><alt>2")
|
|
|
|
Alternative you may open the GAP Video Navigator Dialog
|
|
(menu-path "<Image>/Video/VCR Navigator)
|
|
|
|
- GAP VCR Navigator:
|
|
|
|
The VCR Navigator Dialog shows icons frame_number and
|
|
time (mm:ss:msec) of the frames in a scrollable listbox.
|
|
framerate:
|
|
You can set the global framerate for all frames here.
|
|
timezoom:
|
|
with timezoom you tell theVCR Navigator Dialog Window
|
|
to display ever n-th frame only, to get an overview
|
|
on larger videos.
|
|
|
|
Framerate and timezoom values are stores in
|
|
a gap vide info file named:
|
|
<framebasename>_vin.gap
|
|
|
|
Double Click with Left Mousebutton on a frame in the listbox
|
|
performs a goto operation, which loads the clicked
|
|
frame as current frame.
|
|
|
|
Single Click with Left Mousebutton
|
|
selecets one frame (deselecting all others)
|
|
Ctrl Clickwith Left Mousebutton
|
|
selecets one frame (additional to the current selection)
|
|
Shift Click with Left Mousebutton
|
|
selects a range of frames.
|
|
|
|
Click with Right Mousebutton
|
|
brings up a PopUp Menu
|
|
|
|
Popup menu
|
|
copy,
|
|
cut
|
|
paste before
|
|
paste after
|
|
paste replace
|
|
clear pastebuffer
|
|
|
|
cut and copy
|
|
is sensitive if any frame is selected,
|
|
paste* and clear pastebuffer
|
|
is sensitive if video paste buffer contains
|
|
at least one frame.
|
|
|
|
|
|
This menu enables you to cut/copy and paste the selected
|
|
frames even between different videos.
|
|
Size and type of the handled frames are converted at pasting
|
|
if needed.
|
|
The Palette of the current frame is used for the
|
|
pasted frames when the destination type is INDEXED.
|
|
|
|
There are 3 types of paste:
|
|
before:
|
|
Insert Frames before the current frame.
|
|
Use this mode if you want to insert frames
|
|
before the first frame.
|
|
after:
|
|
Insert Frames after the current frame.
|
|
Use this mode if you want to insert frames
|
|
after the last frame.
|
|
replace:
|
|
Replace Frames beginning at the current frame
|
|
with the frames from the video paste buffer.
|
|
|
|
If there are selected frames in the VCR navigator
|
|
Dialog Window, the current frame is set to
|
|
the first selected frame and the paste opration
|
|
is releted to the first selected frame
|
|
|
|
The paste buffer is located in the filesystem
|
|
and can be configured in the gimprc file:
|
|
|
|
(video-paste-dir "/home/hof/gap_video_paste_dir")
|
|
(video-paste-basename "gap_video_paste_")
|
|
|
|
The Duplicate Button in the VCR Navigator Dialog
|
|
duplicates the selected frames immediate into
|
|
the current Video, without writing to the
|
|
video paste buffer.
|
|
|
|
The Delete Button in the VCR Navigator Dialog
|
|
deletes the selected frames without writing to the
|
|
video paste buffer.
|
|
IMPORTANT NOTE:
|
|
There is no undo for GAP operations,
|
|
so the deleted Frames cannot be restored.
|
|
|
|
|
|
- Playback
|
|
playbak of multilayered image is not available.
|
|
(it would be very slow)
|
|
But you can convert your frames to one Multilayer Image
|
|
(Video->Frames to Image)
|
|
And then playback the newly created Image
|
|
(Filters->Animation->Playback)
|
|
|
|
The GAP Video Navigator Dialog Playback Button
|
|
does as described above automatic for all selected
|
|
Frames.
|
|
|
|
|
|
- Move Path (Make Things Move)
|
|
For this Plugin you need a series of frames
|
|
and one single image (that may have more layers).
|
|
|
|
- The Source Image must be opened in the gimp
|
|
- The Source Image must be another Image than the destination frame
|
|
(if you really want to copy layers from destination frame
|
|
to destination frame(s) you have to duplicate it first)
|
|
- The Source Image must be from the same type (RGB, INDEXED ..) as
|
|
the destination frame.
|
|
|
|
In other words: To run the 'Move Path' Plugin you have to open at
|
|
least 2 Images of the same type.
|
|
|
|
|
|
|
|
Invoke this Plugin from one of the frames:
|
|
(Menu: Video->Move Path)
|
|
|
|
The selected Layer(s) of the Source Image
|
|
is (are) copied into the selected range of frames.
|
|
Each handled frame recieves exactly one Copy of the selected Layer
|
|
from the Source Image.
|
|
|
|
If you use other Stepmodes than "None",
|
|
the Layers of the SourceImage are stepped through,
|
|
and the next handled frame recieves the next
|
|
Layer from the Source_images Layerstack.
|
|
|
|
The copies of the SourceLayer(s) were modified by transitions
|
|
with varying Parameters.
|
|
Parameters:
|
|
- Position (X/Y)
|
|
- Size (Width/Height)
|
|
- Opacity
|
|
- Rotation (angle from -360 to +360 degrees)
|
|
- SourceLayer (depends on Stepmode)
|
|
|
|
The Parameters were changed linear from one starting point to
|
|
the next point. Per default the move Path has only only 1 Point.
|
|
(So the Src-Layers(s) are copied to all frames of the framerange
|
|
at constant Position, Size and Opacity)
|
|
If you want your Source_layers to move, grow, rotate or to fade (in or out)
|
|
you have to add one more points (limited to 256) to define a Path.
|
|
|
|
The affected range is selected by Start Frame - End Frame.
|
|
Each affected frame recieves exactly one copy of the (current)
|
|
Sourcelayer adjusted to the current Prameters.
|
|
The Layerstack defines if the pasted copy appears
|
|
in the foreground (0 == on top) or below other layers that are
|
|
already in the frame.
|
|
With the toggle button 'Clip To Frame' the the copied layer
|
|
is clipped to the destination Frames Image Width and Height.
|
|
|
|
With PreviewFrame you can select the frame Number to display
|
|
in the "Mov Path Preview".
|
|
You first have to Adjust the PreviewFrame
|
|
then press the "UpdPreview" Button.
|
|
|
|
Controlpoints:
|
|
The move path is defined by contolpoints.
|
|
Only the Current Cotrolpoint is displyed with all
|
|
its values.
|
|
|
|
If checkbutton "Show Path" is on, all the Controlpoints
|
|
are shown in the Preview window, connected with pathlines.
|
|
Furter it enables picking controlpoints
|
|
and draging controlpoint koordinates (X/Y).
|
|
in the Preview with the Left Mousebutton.
|
|
With the Right Mousebutton you always drag
|
|
the koordinates of the current controlpoint
|
|
(without picking other controlpoints)
|
|
|
|
|
|
There are Buttons to
|
|
"Add Point"
|
|
"Insert Point" "Delete Point"
|
|
|
|
With the Buttons
|
|
"Prev Point" "Next Point"
|
|
"First Point" "Last Point"
|
|
you can step from point to point,
|
|
and make other points to the curremt point.
|
|
|
|
"Clear Point"
|
|
does reset Witdh, Height and Opacity of the point to 100%
|
|
and Rotat to 0 degree.
|
|
|
|
"Reset Points"
|
|
removes all controlpoints.
|
|
|
|
"Save Points"
|
|
saves your controlpoints to file
|
|
|
|
"Load Points"
|
|
loads controlpoints from file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tips:
|
|
- with the UpdPreview Button you can blend in the
|
|
selected Layer of the Source Image.
|
|
If you want to adjust position it may be useful to see
|
|
the background.
|
|
Therfore you can make the source image
|
|
transparent (modify the opacity value) or
|
|
put the sourcelayer below the background
|
|
(set the Layerstack to higher value)
|
|
Then pres UpdPreview Button again.
|
|
|
|
- If you let your objects (source layers) rotatate or
|
|
change their size, set Handle mode to 'Center'.
|
|
(If you use another Handle mode you may get unwanted
|
|
moves of your object, caused by resizing)
|
|
|
|
- Speed:
|
|
If no Keyframes are set,
|
|
Move path alternates the settings linear from
|
|
point to point, so things move (or happen) in constant speed
|
|
between 2 Points.
|
|
|
|
If you want to make accelerated moving Obcets, you'll
|
|
have to set more points with growing distances.
|
|
|
|
Example:
|
|
|
|
[1] [2] [3] [4] [5] [6]
|
|
+---+----+-----+------+-------+
|
|
|
|
The affected range has 25 frames, and you have set 6 points
|
|
with growing distances in one straight line.
|
|
That gives 5 frames (== equal time) for each part of the path,
|
|
but each part has another length. This results in different
|
|
(growing) speeds for each part of the path.
|
|
|
|
- Keyframes
|
|
|
|
Keyframes can be used optional, to fix a controlpoint
|
|
to the given frame number. The first and last controlpoints
|
|
are implicite keyframes, always fixed to start or end
|
|
frame number. (The Keyframe entry is set insensitive
|
|
on the first and last contolpoint)
|
|
With the Help of Keyframes you can control exactly
|
|
when things should happen.
|
|
|
|
Use a Value of 0 in the Keyframe entry if you dont want
|
|
to fix a controlpoint to a keyframe.
|
|
|
|
Keyframes are shown as Absolute Frame Number
|
|
in the Move Path Dialog Window, but they
|
|
are saved as relative values in the
|
|
pointfile.
|
|
(if StartFrame = 5
|
|
and a Keyframe is displayed as 7
|
|
the Keyframe is internally stored as 2 (7 - 5)
|
|
|
|
- Check Controlpoints
|
|
- The Check is done at "OK", and "Anim Preview"
|
|
button,
|
|
If Errors are detected, they are shown
|
|
in a Popup Window and the action is not performed.
|
|
- The number of cntrolpoints is now checked
|
|
against the number of affected frames.
|
|
(You can't have more controlpoints than frames)
|
|
- If Keyframes are used, they must be in
|
|
(ascending or descending) sequence
|
|
|
|
|
|
- AnimPreview
|
|
With this button You can generate an Animated Preview
|
|
to get an idea how the Inserted moving Object
|
|
will look like. The Animated Preview is generated
|
|
as Multilayer Image and the Filter/Animation/Playback
|
|
Plugin is started on that Multilayer Image.
|
|
|
|
The Button opens a Dialog Window, where you can
|
|
enter options for the animated preview.
|
|
|
|
- Object on empty frames
|
|
renders quick on empty frames (filled with BG color)
|
|
(scale down speeds up rendering time)
|
|
- Object on one frame
|
|
renders quick on one frame (preview frame)
|
|
(scale down speeds up rendering time)
|
|
- Exact Object on frames
|
|
renders slow, but exactly on the selected framerange.
|
|
(scale down increases rendering time)
|
|
|
|
- Scale Preview
|
|
Optional you can scale down the Animated Preview
|
|
Size (100% downto 5%)
|
|
|
|
- Framerate
|
|
The Framerate is used in the generated
|
|
Multilayer Image only.
|
|
|
|
- Copy to Video Buffer
|
|
Optional you can copy the preview frames
|
|
to the Video Buffer
|
|
(can be pasted in the GAP Video Navigator)
|
|
|
|
- Force visibility
|
|
If this checkbutton is set, all Source Layerobjects
|
|
are set visible when they are copied into frames.
|
|
|
|
- Convert frames to one multilayered Image.
|
|
This can be done with
|
|
|
|
(Video->Frames to Image)
|
|
|
|
The selected Source Range of Frames is copied into one
|
|
new created multilayered destination Image.
|
|
Each frame results in one Layer in the destination Image.
|
|
(or nothing if the source frame has no selected layer)
|
|
|
|
With Layer Basename you can chosse a name for the resulting
|
|
Layers in the destination Image. The string [####] is replaced
|
|
by the frame number.
|
|
Example: my_layer_[##] results in: my_layer_01, my_layer_02 ....
|
|
|
|
Layer Mergemode:
|
|
- Extend as necessary Build a destination Layer by merging
|
|
selected Layers of one Sourceframe.
|
|
The destination Layer's size will be
|
|
the outline-rectangle of all selected
|
|
Layers.
|
|
|
|
- Clipped to image Build a destination Layer by merging
|
|
selected Layers of one Sourceframe.
|
|
The destination Layer's size will be
|
|
the Imagesize.
|
|
|
|
- Clipped to bottom layer Build a destination Layer by merging
|
|
selected Layers of one Sourceframe.
|
|
The destination Layer's size will be
|
|
the size of the lowest selected Layer.
|
|
|
|
- Flattened image Build destination Layer by flattening
|
|
the source_layers copied from one Sourceframe
|
|
There will be no transparent parts
|
|
in the destination Layers.
|
|
The destination Layer's size will be
|
|
the Imagesize.
|
|
|
|
With the 'Exclude BG-Layer' check_button pressed,
|
|
the Backgrund-Layers of all the Sourceframes are excluded
|
|
from the copy, regardless if they are selected or not.
|
|
Otherwise BG-Layers are handled like all other Layers.
|
|
|
|
(If you are using Flatten_mode 'Flatten' the BG-Color will fill all
|
|
transparent parts of the resulting destination layer(s).)
|
|
|
|
Layer Selection:
|
|
----------------
|
|
Here you can select which layer(s) of a frame is(are) used
|
|
to build the destination Layer.
|
|
|
|
Select Layer(s):
|
|
Pattern is equal to LayerName
|
|
Pattern is Start of LayerName
|
|
Pattern is End of Layername
|
|
Pattern is a Part of LayerName
|
|
With these settings you can select Layers
|
|
by their Layername.
|
|
(All Layers with a layername matching the Select Pattern
|
|
are selected).
|
|
|
|
Pattern is LayerstackNumber List
|
|
Layers are selected by their Layerstackposition,
|
|
where 0 is the top layer.
|
|
The Pattern is a list of layerstack numbers or
|
|
number ranges. (0-3 matches to the upper 4 layers)
|
|
Pattern is REVERSE-stack List"
|
|
Here you can specify Layerstacknumbers in REVERSE order.
|
|
(where 0 is the background Layer)
|
|
|
|
All Visible (ignore Pattern)
|
|
All visible Layers are selected.
|
|
(The Select Pattern is ignored)
|
|
|
|
Select Pattern:
|
|
String to identify a Layer. It can be a part of the layername
|
|
or a List of Layerstacknumbers (like this one: "0, 2-5, 9")
|
|
depending on your choice in Select Layer(s) above.
|
|
Case Sensitive:
|
|
Lowercase and UPPPERCASE letters are considered as equal
|
|
if this checkbutton is set to off.
|
|
Invert Selection:
|
|
Select all unselected Layers.
|
|
|
|
|
|
|
|
- Modify Frames
|
|
|
|
The GAP-tool 'Frames Modify' provides the feature to perform functions
|
|
on one ore more selected Layer(s) in all frames of the selected framerange.
|
|
|
|
The Layers can be selected by (parts of) their name, or by their
|
|
layerstack numbers.
|
|
(for more information on Layer Selection see above).
|
|
|
|
Available Functions are:
|
|
"0:set_visible,
|
|
1:set_invisible,
|
|
2:set_linked,
|
|
3:set_unlinked,
|
|
4:raise,
|
|
5:lower,
|
|
6:merge_expand,
|
|
7:merge_img,
|
|
8:merge_bg,
|
|
9:apply_filter,
|
|
10:duplicate,
|
|
11:delete,
|
|
12:rename"
|
|
|
|
|
|
The function 'apply_filter' brigs up a dialog window that is
|
|
similar to the PDB-Browser, where you can select any available
|
|
filter.
|
|
|
|
If you use the PDB-Browser's button "Apply Varying", the
|
|
filterparameters will slightly change in each handled frame
|
|
from start to end.
|
|
|
|
- If there is more than one selected layer in a frame
|
|
each of the selected layers within the same frame
|
|
will be processed with the same filterparameter values.
|
|
|
|
(for more info se 'Animated calls of Plug-In Filters' below)
|
|
|
|
|
|
|
|
It is a good idea to use the same layerstack structure in all
|
|
your frames. Another hint is that you assign useful names to
|
|
your layers. that should be done consequent for all frames.
|
|
|
|
Example 1 (useful Layertack structure/names)
|
|
|
|
|
|
film_0001.xcf film_0002.xcf .... film_0010.xcf
|
|
---------------------------------------------------------------------
|
|
|
|
layerstack [0] mouse_01 mouse_02 mouse_10
|
|
layerstack [1] cat_01 cat_02 cat_10
|
|
layerstack [2] tree_01 tree_02 tree_10
|
|
layerstack [3] background background background
|
|
|
|
|
|
|
|
Example 2 (not recommanded)
|
|
|
|
|
|
film_0001.xcf film_0002.xcf .... film_0010.xcf
|
|
---------------------------------------------------------------------
|
|
|
|
layerstack [0] tree layer mouse_10
|
|
layerstack [1] bg layer cat_10
|
|
layerstack [2] layer background
|
|
layerstack [3] background
|
|
|
|
|
|
|
|
|
|
- Saving MPEG files:
|
|
|
|
GAP provides only frontend dialogs to call MPEG encoding programs.
|
|
You must have installed one of them if you want to save
|
|
your finished AnimFrames in MPEG Video Fileformat.
|
|
|
|
The MPEG-encoders are:
|
|
|
|
1) mpeg_encode 1.5
|
|
freely distributed Berkeley MPEG-1 Video Encoder
|
|
ftp://mm-ftp.cs.berkeley.edu/pub/multimedia/mpeg/bmt1r1.tar.gz
|
|
|
|
(Can read AnimFrame in the Fileformats:
|
|
.yuv
|
|
.ppm
|
|
.pnm
|
|
.jpg
|
|
)
|
|
(can call filterprograms to convert from other fileformats)
|
|
|
|
2) mpeg2encode 1.2
|
|
MPEG-2 and MPEG-1 Encoder / Decoder, Version 1.2
|
|
(MPEG Software Simulation Group)
|
|
|
|
Web: http://www.mpeg.org/MSSG
|
|
FTP: ftp://ftp.mpeg.org/pub/mpeg/mssg
|
|
E-mail: mssg@mpeg.org (author contact)
|
|
|
|
(Can read AnimFrame in the Fileformats:
|
|
.yuv
|
|
.ppm
|
|
)
|
|
|
|
To Prepare for MPEG encoding:
|
|
|
|
- Use 'Frames Convert' from the Video Menu
|
|
to convert your AnimFrames to .ppm
|
|
(or another Fileformat that can be read directly by
|
|
your encoder)
|
|
|
|
- If you have a Layerstack-Animated Multilayer Image
|
|
You can use 'Split Img to Frames' from the Video Menu.
|
|
|
|
- If you are using mpeg_encode and
|
|
height or width are not multiples of 16:
|
|
Use 'Frames Scale' or 'Frames Crop' from the Video Menu
|
|
on the newly converted/created AnimFrames.
|
|
|
|
- Then use 'Encode/MPEG2 (mpeg2encode)' or 'Encode/MPEG1 (mpeg_encode)'
|
|
from the Video Menu.
|
|
(Invoked from one of the prepared AnimFrames)
|
|
|
|
Both encoders offer a lot of Parameter Settings for the experienced
|
|
User. The Parameters are passed to the encoder in a Parameterfile.
|
|
The frontend dialog shows only the most important Parameters,
|
|
but generates a documented Parameterfile with default values
|
|
for the other Parameters.
|
|
You can generate the Parameterfile with or without starting
|
|
the encoder.
|
|
(You may start the encoder later by executing the Startscript
|
|
from a Unixshell. The Startscript is generated by the frontend dialog)
|
|
|
|
For more information on the Parameters please refer to the encoders
|
|
documentations.
|
|
|
|
|
|
- Tips:
|
|
- Convert one multilayer Image to a series of frames:
|
|
|
|
This can be done if you create a series of empty frames.
|
|
The Number of frames should be equal to the number of layers
|
|
in your multilayered image.
|
|
(File->New, Video->Duplicate)
|
|
|
|
Then use the "Move Path" Plugin (Video->Move Path)
|
|
to copy the layers to all your frames.
|
|
Use 2 Points with both X=0, Y=0, Opacity=100%, Width=100%, Height=100%,
|
|
select the 1.st Layer of your multilayer Image as Source,
|
|
Handle=LeftTop, Mode=Normal, Stepmode=Loop
|
|
|
|
Finally you can delete the (empty) backround Layers
|
|
(Video->Frames LayerDel) with Layerstack Parameter >= 1
|
|
|
|
- Reverse the order of Layers within one multilayer Image
|
|
Convert one multilayer Image to a series of frames (see above)
|
|
then select Video->FramesToImage and use an invers Range
|
|
from N to 1.
|
|
|
|
- Convert multiple frames from one Fileformat to another:
|
|
rename your images to fit GAP framename conventions
|
|
(Example: img_0001.tif, img_0003.tif img_0004.tif)
|
|
|
|
then load the 1.st image into the gimp (File->Load)
|
|
and select (Video->Frames Convert)
|
|
In the following dialog window you can select
|
|
the desired destination filtype by its typical extension
|
|
(.jpg, .bmp or so on)
|
|
|
|
If your source images have layers and/or cannels
|
|
but your destination filtype do not support layers/cannels
|
|
you may optional choose flatten (1), to collapse all layers
|
|
into one before saving destination frames.
|
|
(flatten has no affect to your source frames)
|
|
|
|
Type conversions to RGB, GRAY and INDEXED were needed
|
|
if your desired destination filetype does not support
|
|
the type of the source image.
|
|
Example: to convert from (.jpg) to (.gif)
|
|
you have to set the destinationtype "INDEXED",
|
|
(.gif can not handle RGB, only GRAY and INDEXED)
|
|
|
|
Convert to INDEXED reduces the number of colors
|
|
downto 256 (or less).
|
|
|
|
|
|
- NO UNDO
|
|
There is no Undo for the AnimFrame Plugins.
|
|
Note: If you step to the next frame (Video->Goto Next)
|
|
the current frame is saved to disk and the next frame
|
|
is loaded into the image.
|
|
All Undo steps were cleared at this time.
|
|
|
|
Tip: "undo" for Move Path
|
|
You can Delete the Layers at desired Layerstackposition
|
|
(0 == on top) by (Video->Frames LayerDel)
|
|
So you can remove all the Layers inserted by "Move Path" plugin.
|
|
|
|
- About Locks
|
|
All the GAP Plugins are using a lock, based on the image_id
|
|
(that is common to all frame images within one gimp session).
|
|
This lock disables to run other gap-plugins (or the same plugin twice)
|
|
from the frames Image menu
|
|
while the current GAP-plugin is working on that frame.
|
|
If you cancel a running GAP-plugin (Cancel Button in the progress window,
|
|
or kill it from a shell) the lock remains. To unlock save the current
|
|
frame image, close all views to that image, then reload the frame image.
|
|
(or quit and restart the gimp)
|
|
|
|
WARNING:
|
|
It is not recommanded to open more than one frame of
|
|
an animation at the same time.
|
|
(File->Open "img_0001.xcf"
|
|
File->Open "img_0002.xcf")
|
|
|
|
In this constellation both gap plugins may concurrent
|
|
in save/load to/from the same file.
|
|
Example:
|
|
call from "img_0001.xcf" Video->Delete Frames (range 0001 to 0003)
|
|
now img_0004.xcf is renamed to img_0001.xcf
|
|
img_0005.xcf is renamed to img_0002.xcf
|
|
|
|
then
|
|
call from "img_0002.xcf" Video->Goto First
|
|
the img_0002.xcf (its old content) is saved,
|
|
overwiting wht was img_0004.xcf before.
|
|
If you make the 2nd call while the 1st one is in progress,
|
|
you may trash your frames (2 writers on one file) and/or crash
|
|
your gimp session.
|
|
|
|
- Animated calls of Plug-In Filters:
|
|
|
|
First of all, you need a multilayered Image.
|
|
You can use "<Image>->Video->Frames to Image"
|
|
to create one from a series of Frames,
|
|
or Duplicate the backround Layer of a single Layered Image
|
|
(Press Ctrl-C within the layers_dialog Window N-times)
|
|
|
|
Then call from wihin the multilayer Image:
|
|
|
|
"<Image>->Filters->Animation->Filter all Layers"
|
|
|
|
You'll get a window similar to the PDB-Browser, that shows
|
|
all available Plug-Ins in a listbox (and informations about
|
|
the selected Plugin on the right side).
|
|
|
|
Note: The Listbox does not show the full PDB.
|
|
(Plugins without RunMode, Image, Drawable Parameters
|
|
are never listed here, regardless to your wildcard selection)
|
|
|
|
Select one of the listed Plugins and press one of the Buttons:
|
|
|
|
"Apply Varying":
|
|
The selected Plugin is called 2 times in Interactive mode,
|
|
1. for the backround Layer
|
|
2. for the Top Layer.
|
|
|
|
For all further Layers, the Plug-In will work non-interactive
|
|
with the Iterated Inbetween Values.
|
|
Therefore the plugin must have an _Iterator or _Iterator_ALT
|
|
procedure, to modify the "last stored values"
|
|
|
|
(GAP provides such procedures for more than 50 existing plugins)
|
|
|
|
If the Iterator Procedure is not available, the
|
|
"Apply Varying" Button is set insensitive on the selected procedure.
|
|
|
|
Note:
|
|
It is possible to Iterate Values of the Type PARAM_DRAWABLE,
|
|
(such as the BumpMap in plug_in_bump_map:
|
|
You may use a layerstack-animated Image as animated Bump-map)
|
|
This will only work, if from and to Values are Layers within the same Image.
|
|
The Iteration is done on the Layerstackindex in that case.
|
|
and the inbetween values for the non-interactive filtercalls
|
|
will be the Layers between the from and to Layerstackindex.
|
|
(an animation sequence as the user might expect)
|
|
|
|
"Apply Constant":
|
|
The selected Plugin is called 2 times in Interactive mode,
|
|
For all further Layers, the Plug-In will work non-interactive
|
|
using the last stored values.
|
|
|
|
|
|
The Script sel-to-anim-img.scm simplifies the creation of Animated
|
|
Images. Invoke the Script from:
|
|
|
|
"<Image>->Script-Fu->Animators->Sel To AnimImage"
|
|
|
|
The Script creates a new Image with n copies of the current selection.
|
|
Then it invokes the animated call of Plug-In Filters (optional)
|
|
on the generated new Image.
|
|
|
|
Note: - Some Plugins may not work correct or crash when called
|
|
in NON_INTERACTIVE mode. (see TESTPROT_iter_ALT)
|
|
|
|
- Some Pugin's in your PDB can have earlier or later versions
|
|
If their Interfaces were changed
|
|
you get the message:(in the shell window)
|
|
|
|
ERROR: xxxx_Iterator stored Data missmatch in size N != M
|
|
|
|
when using the "Apply Varying" Button.
|
|
In that case you can try to generate the needed _Iterator Procedure
|
|
for your Plugins current Interface by yourself.
|
|
(see file: README_devlopers)
|
|
|
|
- The wr_trans plugin collection (available in the Plugin Registry)
|
|
provides plugin interfaces for animated calls of the GIMP's transformer
|
|
Tools. (Rotate, Scale, Shear, Perspective)
|
|
|
|
- How to write (or generate) Animated Plugins:
|
|
(see file: README_devlopers)
|
|
|
|
--------------------------------------------------------------------
|
|
changes to the gimp-core:
|
|
--------------------------------------------------------------------
|
|
|
|
Please note that NO CHANGES are needed if you have GIMP 1.1
|
|
|
|
For my Plugins I added NEW internals
|
|
(they are not part of the official gimp 1.0.2,
|
|
in most cases the Patch just offers a PDB-Interface
|
|
for already existing GIMP-core internal Functions)
|
|
|
|
- gimp_drawable_set_image
|
|
- gimage_update_full
|
|
- gimp_layer_get_linked
|
|
- gimp_layer_set_linked
|
|
- floating_sel_attach_proc
|
|
- floating_sel_rigor_proc
|
|
- floating_sel_relax_proc
|
|
- gimage_floating_sel_attached_to
|
|
|
|
my private extension for the layers_dialog Window
|
|
|
|
- gimage_lower_top_layer
|
|
- gimage_lower_bot_layer
|
|
|
|
Affected gimp-core sources (in directory app/)
|
|
gimage.c
|
|
gimage.h
|
|
gimage_cmds.c
|
|
gimage_cmds.h
|
|
layer_cmds.c
|
|
layer_cmds.h
|
|
layers_dialog.c
|
|
internal_procs.c
|
|
floating_sel_cmds.c
|
|
floating_sel_cmds.h
|
|
|
|
=============================================
|
|
plugin's included in release gap 0.99.00:
|
|
=============================================
|
|
|
|
plug_in_gap_next
|
|
"This plugin exchanges current image with (next nubered) image from disk.",
|
|
"<Image>/Video/Goto Next",
|
|
|
|
plug_in_gap_prev
|
|
"This plugin exchanges current image with (previous nubered) image from disk.",
|
|
"<Image>/Video/Goto Prev",
|
|
|
|
plug_in_gap_first
|
|
"This plugin exchanges current image with (lowest nubered) image from disk.",
|
|
"<Image>/Video/Goto First",
|
|
|
|
plug_in_gap_last
|
|
"This plugin exchanges current image with (highest nubered) image from disk.",
|
|
"<Image>/Video/Goto Last",
|
|
|
|
plug_in_gap_goto
|
|
"This plugin exchanges current image with requested image (nr) from disk.",
|
|
"<Image>/Video/Goto Any",
|
|
|
|
plug_in_gap_del
|
|
"This plugin deltes the given number of frames from disk
|
|
including the current frame.",
|
|
"<Image>/Video/Delete Frames",
|
|
|
|
plug_in_gap_dup
|
|
"This plugin duplicates the current frames on disk n-times.",
|
|
"<Image>/Video/Duplicate Frames",
|
|
|
|
plug_in_gap_exchg
|
|
"This plugin exchanges content of the current with destination frame.",
|
|
"<Image>/Video/Exchange Frame",
|
|
|
|
|
|
plug_in_gap_move
|
|
"This plugin copies layer(s) from one sourceimage to multiple frames on disk,
|
|
varying position, size and opacity.",
|
|
"<Image>/Video/Move Path",
|
|
|
|
plug_in_gap_range_to_multilayer
|
|
"This plugin creates a new image from the given range of frame-images.
|
|
Each frame is converted to one layer in the new image, according to flatten_mode.
|
|
(the frames on disk are not changed).",
|
|
"<Image>/Video/Frames to Image",
|
|
|
|
plug_in_gap_range_flatten
|
|
"This plugin flattens the given range of frame-images (on disk)",
|
|
"<Image>/Video/Frames Flatten",
|
|
|
|
plug_in_gap_range_layer_del
|
|
"This plugin deletes one layer in the given range of frame-images (on disk).
|
|
exception: the last remaining layer of a frame is not deleted",
|
|
"<Image>/Video/Frames LayerDel",
|
|
|
|
plug_in_gap_range_convert
|
|
"This plugin converts the given range of frame-images to other fileformats
|
|
(on disk) depending on extension",
|
|
"<Image>/Video/Frames Convert",
|
|
|
|
plug_in_gap_layers_run_animfilter
|
|
"This plugin calls another plugin for each layer of an image,
|
|
varying its settings (to produce animated effects).
|
|
The called plugin must work on a single drawable
|
|
and must be able to RUN_WITH_LAST_VALS",
|
|
"<Image>/Filters/Animation/Filter all Layers"
|
|
|
|
plug_in_gap_anim_resize
|
|
"This plugin resizes all anim_frames (images on disk)
|
|
to the given new_width/new_height",
|
|
"<Image>/Video/Frames Resize",
|
|
|
|
plug_in_gap_anim_crop
|
|
"This plugin crops all anim_frames (images on disk)
|
|
to the given new_width/new_height",
|
|
"<Image>/Video/Frames Crop",
|
|
"RGB*, INDEXED*, GRAY*",
|
|
PROC_PLUG_IN,
|
|
nargs_resize, nreturn_vals,
|
|
args_resize, return_vals);
|
|
|
|
plug_in_gap_anim_scale
|
|
"This plugin scales all anim_frames (images on disk)
|
|
to the given new_width/new_height",
|
|
"<Image>/Video/Frames Scale",
|
|
|
|
plug_in_gap_split
|
|
"This plugin splits the current image to anim frames (images on disk).
|
|
Each layer is saved as one frame",
|
|
"<Image>/Video/Split Img to Frames",
|
|
|
|
plug_in_gap_mpeg_encode
|
|
"This plugin calls mpeg_encode to convert anim frames to MPEG1,
|
|
or just generates a param file for mpeg_encode.
|
|
(mpeg_encode must be installed on your system)",
|
|
"<Image>/Video/Encode/MPEG1 (mpeg_encode)",
|
|
|
|
plug_in_gap_mpeg2encode
|
|
"This plugin calls mpeg2encode to convert anim frames to MPEG1 or MPEG2,
|
|
or just generates a param file for mpeg2encode.
|
|
(mpeg2encode must be installed on your system)",
|
|
"<Image>/Video/Encode/MPEG2 (mpeg2encode)",
|
|
|
|
plug_in_gap_shift
|
|
"This plugin Exchanges frames numbers in the given range.
|
|
(discfile frame_0001.xcf is renamed to frame_0002.xcf,
|
|
2->3, 3->4 ... n->1)",
|
|
"<Image>/Video/Framesequence Shift",
|
|
|
|
plug_in_gap_modify
|
|
"This plugin performs a modifying action on each selected layer
|
|
in each selected framerange"
|
|
<Image>/Video/Frames Modify
|
|
|
|
script-fu-selection-to-anim-image
|
|
"Create a multilayer image from current selection and
|
|
apply any PDB Filter to all layer-copies"
|
|
"<Image>->Script-Fu->Animators->Sel To AnimImage"
|