## Documentation

In this documentation there will - wherever it makes sense - be linked to the appropriate ffmpeg documentation with a link like: ffmpeg -XXX. If possible the link takes you directly to the used command line option in the ffmpeg documentation - else how to the section where the option is located. You can also get more information about ffmpeg in general by visiting the ffmpeg documentation.
Help needed for:

> Main window
> Options
> Job editor
> Batch make
> Time editor
> Preset manager
> Preset editor
> Thumb maker
> Make slideshow / concat
> Two pass video stabilization
> Convert video to GIF
> Language editor

### Main window

[Add..] Used to add a new job to the queue. See Job editor.
[Batch...] Used to add multiple new jobs to the queue. See Batch make.
[Remove] Removes selected job(s) from the queue.
[Edit...] Edit selected job. See job editor.
[Preview] Attempts to launch a preview of the encoded output(*).
[Start] Starts processing the job(s) in the queue.
[Stop] Stops processing the job(s) currently being processed.
[Tools] Drop down menu to select a tool to launch. See Thumb maker, Make slideshow / concat and Two pass video stabilization.
[Presets...] Opens the preset manager where you can modify presets.
[Options...] Opens the options window where you can specify how FFQueue should behave.
[About...] Displays information about FFQueue, FFmpeg and more.
(*) This feature requires ffplay to be bundled with FFmpeg or an alternate player to be defined in options. This feature might not work as intended since the speed of the processor must be sufficient to encode the video at least as fast as it plays. If the processor is too slow the video will be lagging. Improper use of some filters might also cause the preview function to fail.

#### Queue list

The upper listing in the main window is used to display the jobs that are actually in the queue. The first column displays the name of the primary file that should be processed. The second column displays either the selected preset that should be used for processing the job, the user defined command line to use or the tool that has created the job. The third column displays the status of the job and they are:

- Dormant: The job i waiting to be queued.
- Queued: The job is queued and waiting to be processed.
- Active: The job is currently being processed.
- 1st pass: The job is undergoing first pass.
- 2nd pass: The job is undergoing second pass.
- Thumbs: Thumbnails are being created for the job.
- Done: The job has completed successfully.
- Failed: The job has terminated unsuccessfully.
- Aborted!: The job was not completed because the queue was aborted.
- Skipped!: The job was skipped because the output file already existed and overwriting was refused.

You can use the following keyboard keys and shortcuts in the queue list:

- `[Keypad +]` or `[Insert]` Creates a new job
- `[Keypad -]` or `[Delete]` Delete selected job(s)
- `[Enter]` or `[Space]` Edit selected job
- `[CTRL]+[Enter]` or `[CTRL]+[Space]` Preview selected job
- `[CTRL]+[Up]` Move selected job(s) up
- `[CTRL]+[Down]` Move selected job(s) down
- `[CTRL]+[Q]` Queue selected job(s)
- `[CTRL]+[A]` Abort / stop selected job(s)
- `[CTRL]+[B]` Batch make jobs
- `[CTRL]+[O]` Options
- `[CTRL]+[P]` Preset manager
- `[CTRL]+[T]` Tool menu
- `[CTRL]+[S]` Save jobs

TIP: Right-click the queue list to invoke a menu with more features like move items up or down, start selected jobs only, dump raw output from ffprobe, show command(s) for the selected job, direct edit of preset for selected job etc.
TIP: You can drag&drop files to the queue list to invoke the Batch make dialog for the files being dropped.

#### Console

The console displays messages from FFQueue and output from FFmpeg in color coding:

- Gray: used to display informative messages from FFQueue.
- Black: used to display informative messages from FFQueue and FFmpeg.
- Blue: used to display regular output from FFmpeg.
- Red: used to display errors or warnings from FFQueue and FFmpeg.
- Green: used to display statistics from FFmpeg.
- Orange: less important warnings.

#### Progress bar

Displays the progress of the current job if possible. If the progress bar does not show the correct progress there might be a problem with the encoding procedure - often seen related to burn-in of subtitles.

#### Status bar

Displays the current status of FFmpeg and the queue. During processing of a job the remaining time is displayed if possible (requires the progress bar to be updated properly - see above).

### Options

FFQueue saves its configuration to a file. If you want to backup both configurations and queued jobs you can open the "About" dialog where the location of configuration file is displayed.

#### Path to ffmpeg...

If FFQueue is not placed in the same folder as FFmpeg and FFmpeg cannot be located in any other obvious location you must specify the location of the FFmpeg and FFprobe binaries / executables in this field. Click the [...] button next to the text field to browse for the executables.

#### Custom player for preview...

In this field you can enter the path to a custom media player that should be used instead of ffplay for previewing jobs. The player must support input through pipes (like VLC Media Player). Click the [...] button next to the text field to browse for a media player.

#### Temporary path...

For most users the "System default" is the best option. But you can change the location to the destination folder of the individual jobs/commands (the folder in where the output file is created to) or you can specify a custom path. The temporary path is used for 2 pass logfiles and other temporary files like scaled images (the slideshow tool) and such. FFQueue will automaticly remove any temporary files and / or folders created.

#### Automatically find secondary files...

In this field you can specify one or more extensions that will be searched for as secondary input files when jobs are created. You must separate the extensions with comma and leave out any extension separator.

#### Pattern used to generate output names

By default FFQueue will generate an output name wich consists the name of the first input file and a preffered format. If you want to change this behaviour you can change the output name pattern in this field. You have the following variables available:

> `<file_name>` The file name of the first input file without the file format/extension. `<file_format>` The format/extension of the first input file. `<preferred_format>` The preferred format as detected by FFQueue. `<preset_name>` The name of the selected preset.

#### Custom console command

If you want to define a (set of) custom console command(s) for previewing etc. you can use this field. The command(s) should be declared as `execute and close||execute and keep`. The default commands are:

> Windows: `cmd /c "%s"||cmd /k "%s"`
> Linux: `xterm +hold -e '%s'||xterm -hold -e '%s'`

The quoted C-style string formatting specifier "%s" (or '%s' for Linux) marks the spot where FFQueue will insert the command to execute. If you omit the "||" separator and therefore only declare one command, like: `xterm +hold -e '%s'` then you will break the functionality of the "Keep console open" option.

#### Save unprocessed jobs on exit...

Check this field if you want FFQueue to save the jobs in the queue when the application is closed - the jobs will then be reloaded upon startup. The jobs are stored in the same location as other configuration but in a *.job file rather than a *.cfg file. If this field is unchecked the queue list will always be empty on startup.

#### Save jobs whenever they are modified

Check this field if you want to force FFQueue to save the jobs in the queue whenever they are modified.

#### Automatically remove processed jobs...

If this field is checked the jobs in the queue that has successfully been processed will be removed when the queue finishes (or is aborted).

#### Remove jobs with non-existing input files during startup

If enabled, jobs with non-exiting input files will be removed during FFQueue startup. The removed jobs will be listed in the console.

#### Limit statistics...

Check this field to limit statistics from FFMpeg to the last five lines which makes the content in the console much easier to review. Uncheck this field to display all output from FFMpeg (beware of memory consumption on long jobs).

#### Show banner info...

If you want advances information about ffmpeg to be shown for each job being processed you can check this field. The banner information can be found in the About-box as well.

#### Save position...

If checked the position and size of the main window will be saved when FFQueue is terminated. When starting FFQueue next time the saved position will be restored.

#### Enable full codec listings...

It this field is ticked you will be able to select all supported codecs for audio and video. If unticked you will only have the most common codecs listed. See About encoding & codecs for more info.

#### Always suggest unique names...

You can tick this field if you want FFQueue to suggest unique names. If not ticked FFQueue will suggest the most likely name as output file - no matter if it exists or not. If ticked FFQueue will append "_N" to file names where N is an incremental number until a non-existing name is found.

#### Keep console open...

If this options is ticked the console window will remain open after a preview command finishes. This is usefull to prevent the console from "flashing" due to an encoding or command error. Note that this feature might be broken if custom console command is not declared correct.

#### Silent queue finish

Tick this field if you do not want FFQueue to show a message when the queue finishes procssing.

#### Confirm removal of jobs

If you do not want a confirmation prompt whenever you remove jobs from the queue, you can un-tick this box.

#### Always map subtitles when previewing

Usually previewing will fail if subtitles are mapped, so since V1.7.54 they are not mapped by default. If you want to map them anyway this option will allow you to.

#### Language...

Click this button to open the Language editor. In Linux the options dialog is cancelled before the Language editor is launched.

### Job editor

#### Input files ffmpeg -i

Each tab contains one input/source file and the associated parameters for that file. You can have multiple source files like a video file, one or more audio file(s), one and more subtitle file(s). You should always use the first tab (#1) for the primary source file (video). You can specify the following arguments for each input file:
Path
Enter a valid file name in this field or click the [...] button to the right if you want to browse for one.
Process stream(s) in #n from.. ffmpeg -ss `(before -i)`
Click this link to define an offset in the input file from where to start the encoding. The time specified will be skipped (cut away) from the beginning of the source file. See Time editor for more information.
[Adv. cuts] (Advanced cutting, requires input file to be valid)
This opens a dialog where you can specify parts of the input file that should be removed or kept. This works both for video, audio and video+audio - but if a subtitle stream (or other stream types) are present it will fail. Also, the cutting requires re-encoding for the streams being cut. If you select a preset where the "copy" codec (remuxing) is selected for one of the streams being cut it will not be applied. Another important notice is that all cuts are performed relatively to the Process stream(s) in #n from.. time and this can cause unpredicatble behaviour and you should refreign from use both in combination unless you really know what you are doing.
All time fields in this dialog supports the formats [Hours]:[Minutes]:[Seconds].[Milliseconds] OR simply just [Seconds].[Milliseconds].

> Time spans to process
> This list contains a list of "from -> to" time spans to process. If you click an item in the list the time span will be transferred to the "From" and "To" fields. Below the list you can select if the time spans should be removed or kept. You can also select if the trim filters used for trimming should be placed first or last in the filter chain. If you have filters that depends on time line you should place the filters last, in any other situation you should place them first since this is faster.
> If you select to remove time spans you must use the following pattern:
> `[++++++++++----------++++++++++]`
> `[ F T ]`
> And if you want to keep the time spans you must use the following pattern:
> `[++++++++++----------++++++++++]`
> `[F T F T]`
> Both examples above will produce the same result.
> `+` = frames included in period to keep.
> `-` = frames included in period to remove.
> `F` = from time.
> `T` = to time.
> Time span
> In the "From" field you must specify the time of the first frame that should be included in the time span, if left empty "0" (the beginning) is assumed. "To" is the the time of the last frame processed, if left empty the duration of the input file is assumed.
> Click [+] or press [Enter] (while in one of the fields) to add the time span.
> Click the [-] button to remove the selected time span from the list.
> In order to edit a time span, click it in the list, edit it, click [-] and click [+].
> Tick the "convert frame index to time.." if you have entered a frame number that you want to convert to a time value which is based on the input files FPS. If your input file has 25 FPS and you enter the frame number 1000 the time added will be (1000 / 25) = 40 seconds. The field will be disabled if FPS for the source file is unknown.
> Input file info
> In the field "Show adv. time for period.." you can enter a time stamp at where you would like to se extended / advanced time information. A period before and after the time entered will be displayed in the external player in order to help you get accurate time for cutting. Since most media players only supports HH:MM:SS FFQueue will generate subtitles with milliseconds and display them on the input file which will enable you to get accurate time for cutting. Please note that this sollution MIGHT NOT always be 100% accurate, but it's tested with FFplay (preferred for this task) and VLC Media Player (second best option) and the time seems quite reliable. When the time is entered, click [Preview] or [Enter] (while in the field) to view the advanced time.
> Frame preview
> If video is available and FFQueue is able to determine video duration and frame rate you will be able to visually select a time stamp for a video frame that should be used in a time span to process. You can use the slider below the frame to navigate in the input file, left & right arrow keys can be used for frame stepping, page up & down can be used for larger steps. You can also use the ">" & "<" buttons to navigate between frames. You can click "Set from" to transfer the current frame time to the "From" field and the "Set to" button to set the "To" field.
> Preview settings
> You can define an accuracy level to use when extracting frames. The lowest possible setting will usually only return key frames and the highest possible setting will result in a period of 10 seconds to be transcoded before the frame is extracted. The optimal setting for this is equal to the maximum distance between key frames in the input file. Start at a low setting and increase the accuracy until each frame is successfully displayed.
> The Load delay is the amount of time waited before extracting a frame ranging from 0 to 2 seconds in 100ms steps.
> IMPORTANT NOTES!
> Below is some important notes related to the usage of advanced cutting:
> 1. When using advanced cutting, FFQueue cannot accurately estimate time remaining and progress.
> 2. Due to limitations in ffmpeg your encode will (most likely) fail if the input file contains a audio track with multiple layouts (eg. stereo and surround mixed). If trying anyway you will receive LOTS of Non-monotonous DTS.. errors.
> 3. You might experience odd behaviour if the input file has variable frame rate - especially if you choose the "Remove" option instead of the "Keep" option.
> 4. If the extraction of a frame (for preview) does not complete in 5 seconds, the attempt is aborted. This might cause problems if your computer is very low end or if it is under load (working on some heavy tasks).

[MORE]
Click this and you will get access to more per file input options. Click OK (or press [Enter]) to save the options and Cancel (or [Escape]) to cancel the changes and Clear if you want to clear all options. You can hover the mouse over the link for quick review of current input options. The accessible options are:

> Offset / synchronize stream by.. ffmpeg -itsoffset `(before -i)`
> In this field you can specify a positive or negative integer value to offset the streams in the file with. The streams will then be offsettet relatively to the other files in the job.
> TIP: If you want to synchronize audio and video in one file you can add the same soure file twice (as two separate input files), select the video stream (in the stream list) from the first and audio stream(s) from the second and define how many millseconds to offset either of them with.
> Force frame rate to.. ffmpeg -framerate or ffmpeg -r `(before -i)`
> If you want to specify the frame rate of the input file you can do so in this field. This can be used to either speed up or slow down the video (but NOT the audio), although there are better ways of doing this (like the setpts/asetpts filters).
> Force frame rate with..
> This option makes it possible to specify if the "-r" argument should be preferred over "-framerate". Usually -framerate is the most versatile option and it is required for image formats but in some cases you will get odd results with videos if you are using -framerate rather than -r.
> Input flags ffmpeg -fflags `(before -i)`
> You can specify the following input flags that should be used for the file:
> - Discard corrupt frames ffmpeg -fflags +discardcorrupt
> - Generate presentation time stamps ffmpeg -fflags +genpts
> - Ignore decoder time stamps ffmpeg -fflags +igndts
> - Ignore index ffmpeg -fflags +ignidx
> N.B! Not all input arguments are appliable to all formats / demuxers. Don't use the arguments if they do not make sense :-)

Add input file
Click this button to add an input file to the job. All other input files must be valid before another one can be added.
Remove input file
Click this button to remove an input file from the job. You can only remove an input file if there are at leas two added.
Find secondary files
Click this button to search for secondary input files to the selected file (not the primary file). This will search for files with the same name, but with one of the extensions defined in Options and add them to the job.

#### Select stream(s) to include in output file ffmpeg -map

This list displays the available stream(s) in the source files. You can get more information about the different streams by double-clicking them. Only the checked streams will be mapped into the output file and they will be mapped in the order they appear in the list.
Since V1.7.54 you can right-click audio and subtitle streams (if checked for mapping) and select one or more secondary preset(s) for those streams. This will cause the stream(s) to both be included using the preset selected at the bottom of the job editor and with the preset(s) selected in the right click menu. The result being that the same stream will be added multiple times to the output file but with different encodings. The following settings will be used from the right-click selected preset(s): Everything from the "Audio", "Subtitle" and "Metadata" pages for the specific stream type(s). From the "Metadata" page no global data is used. From the "Miscellaneous" page "Disposition" will be used if defined for the stream type.
NOTE: Presets where "BURN-IN" is selected as subtitle codec cannot be used as secondary preset for subtitle streams.

#### Output file

This filename represents the destination in where the selected streams will be processed to.

#### Limit length of output to.. ffmpeg -t `as output option`

Click this link to define a maximum time based length of the output file. See Time editor for more information.

#### FFmpeg command line

In this field you can specify a custom command line to execute with FFmpeg (without path to ffmpeg). You can use the following variables in the command line:

- <%inputs%>: Will be replaced with the input files #1 & #2 (any specified) and their time offset value(s).
- <%preset%>: Will be replaced with the contents of the selected preset. If no preset is selected this variable will be removed.
- <%output%>: Will be replaced with the output file and its time limit value.

Any variable will include a blank space before and after where necessary.

#### Preset command lines

In this list you can select a preset to be used for the job. If you want to open the Preset manager you can click the [...] button to the right.

#### Save log file to *_log.htm

Check this field if you want to save the contents of the console to a color coded HTML-file when the job has finished. If the log file already exists a number will be appended to the filename to create a unique name for the log.

### Batch make

The Batch make dialog is invoked by clicking the [Batch...] button in the main window and then selecting files to create jobs for or by drag&drop files into the queue list. The amount of jobs being created is displayed in the upper part of the dialog.

#### Select content to include

You must select at least one of these fields (Video, Audio & Subtitle). Batch make will then attempt to locate the corresponding streams for the jobs being created. The selected streams are considered to be required and the creation of a job fails if no corresponding stream is found.

#### Do not fail on missing

By default Batch make will fail for a file if any of the selected content to include is not present. Using these fields you can prevent Batch make from failing to create a job, if any of the wanted content should not be available in some of the files selected.

#### Define preferred audio/subtitle codec(s)

If the source files contains multiple audio/subtitle streams you can specify which codec(s) and language(s) to search for. You can define multiple search terms by separating them with a blank space. If this field is empty, all audio/subtitle streams will be selected.

> Inverse matching: Exclude matching streams If you tick this option, all streams that match the search terms will be excluded and all streams not matching will be included.

#### Destination format for output

Define the format (file extension) to be used for the destination (output) files.

#### Destination folder

If you want to place all the output files in another folder than the source folder you can specify the target in this field. If sources are located in sub folders or a folder is being batched the folder structure will be created in the destination folder. Click button [...] to browse for a folder. To use the source folder as target this field must be left empty.

#### Select a preset

In this field you must select the preset to be used for the jobs being created. If you want to open the Preset manager you can click the [...] button to the right.

#### Dry run...

Click this button to create the jobs without adding them to the queue list. This is usefull if you want to review the jobs created before creating them.
HINT: Batch make dumps info to the main window for the jobs being created for easy review. Green means all OK, red means error and blue means stream found - but not the preferred.

### Time editor

In the fields "Hours", "Minutes", "Seconds" and "Milliseconds" you can specify the time value you want to insert. The "Subtract start of" buttons are handy if you want to subtract the start time of any of the input files (you want to encode from 00:05:35.300 through 01:34:53.234 - you can then specify 01:34:53.234 and click subtract 00:05:35.300 in order to get the actual length to be used for the output). Beware that if start and / or length is defined for a job that uses "copy" codecs the job might fail to process.
When you're done defining the time you can click [OK] to apply, [Cancel] to dismiss without applying or [Clear] to clear any defined time value.

### Preset manager

This list contains all the presets that are available throughout FFQueue. You can select multiple items by holding down the [SHIFT] or [CTRL] key while selecting items with the mouse.
Buttons in the Preset manager are:
[New...] Create a new preset.
[Edit...] Modify selected preset.
[Delete] Delete the selected preset(s).
[Move up] Move selected preset(s) up in the list.
[Move down] Move selected preset(s) down in the list.
[Sort] Sort presets in alphabetical order.
[Copy] Copy selected preset(s) to the clipboard.
[Paste] Paste presets from the clipboard.
[Close] Closes the preset manager.
The copy and paste functions can both be used to duplicate presets locally but they can also be used for sharing presets on the internet since they can be pasted in forums, mails or alike and then copy-pasted back into a Preset manager elsewhere. The paste function will ensure unique names and IDs for the inserted preset(s).
See also Preset editor.

### Preset editor

Please note that any value defined in a preset that cannot be applied to the job it is selected to be used for will not be implemented in the command line. If audio filters are defined for a job with no audio these filters will be skipped. If subtitle burn-in is defined for a job without subtitles they will be skipped and so on. Therefore you can use the same preset for making moves and / or audio files.

#### Preset name

In this field you must specify a name for the preset. It is recommended to specify a unique name that describes the preset well to make it easier to select the proper preset later.

#### This preset is temporary

Check this field if you do not want the preset to be stored, thus available in the next session.

#### About encoding & codecs..

The codecs that can be chosen in FFQueue are read out from FFmpeg using the command ffmpeg -encoders or ffmpeg -codecs (whichever works). Not all the codecs listed might be available to you since some might be experimental, deprecated or unavailable for some other reason (check FFmpeg output). By default only a list of well known audio & video codecs are added to the lists. For a full list of codecs you should enable full codec listings in the Options editor.

#### CBR (Constant Bit Rate) / VBR (Variable Bit Rate)

The bit rate controls are used to declare a target bit rate which is also known as average or constant bit rate. To achieve a variable bit rate you must use the quality settings found on the Quality page for video and the Quality section for audio.

#### The Video page

> #### Codec ffmpeg -vcodec (-c:v)

> In this field you must select the codec you want to use to encode video. The selected codec will determine which values will be enabled to define.

> #### Two-pass encoding ffmpeg -pass N

> If this field is checked FFQueue will attempt to run two passes on the job. The log file created by ffmpeg (ffmpeg -passlogfile) used for the two pass encoding will be located in the temporary path specified in Options and FFQueue deletes the `*.log` and the `*.log.mbtree` when the second pass has finished. First pass will be performed without audio (faster). Two pass encoding cannot be used in combination with variable bitrate (Quality settings).

> > The H.265 Codec: FFQueue will use `-x265-params pass=pass_no:stats=log_file` to perform two pass encoding - do not use these arguments as custom command line arguments.

> #### No output file for first pass

> FFQueue can tell FFmpeg not to create an output file for the first pass - which might be faster. However this option might cause FFmpeg to fail the second pass and reporting stuff like Incomplete MB-tree stats file, Video encoding failed and Conversion failed!. If you get these types of messages please disable this option and try again.

> #### Bit rate

> Please see bit rate controls.

> #### Quality

> The values on this page must be enabled and checked in order to be passed to FFMpeg.

> > #### Quality setting

> > Please see Quality setting

> > #### Best constant quality ffmpeg -crf

> > Defines the best constant picture quality for variable bit rate (aka CRF / Constant Rate Factor).

> > #### Worst constant quality ffmpeg -crf_max

> > If you use "Best constant quality" you can use this setting to define the lowest acceptable picture quality.

> > #### Best quantizer quality ffmpeg -qmin

> > This setting defines how the best quantization quality (field compression) should be. Wiki!.

> > #### Worst quantizer quality ffmpeg -qax

> > This setting defines how the worst quantization quality should be.

> > #### Max. quantizer difference ffmpeg -qdiff

> > This setting defines how much the variation of quantization is allowed to be from one frame to another.

> #### Key frames

> This page contains values for key frame frequency (full picture update), motion estimation method and scene detection sensitivity.

> > #### Shortest distance between keyframes ffmpeg -keyint_min

> > This value defines how many frames there should at least be between key frames. This value is also known as minimum GOP (Group Of Pictures) size

> > #### Longest distance between keyframes ffmpeg -g

> > This value defines how many frames there should at most be between key frames (maximum GOP size).

> > #### Maximum of consecutive B-frames ffmpeg -bf

> > Sets the maximum amount of consecutive B-frames. B-frames are partial frames based on content in frames before or after the B-frame.

> > #### Maximum reference frames for P-frames ffmpeg -refs

> > Set the maximum number of I-frames (complete key frames) that can be used to construct a P-frame. P-frames are partial frames that are based on frames before the P-frame.

> > #### Motion estimation method ffmpeg -me_method

> > In this field you can specify (or select) the method that should be used for motion estimation. Please note that not all codecs will support all the values available in the drop down - see ffmpeg documentation for further info (link above).

> > #### Scene change sensitivity ffmpeg -sc_threshold

> > This field must be checked in order to pass the value selected to FFmpeg. Whenever FFmpeg detects a scene change a key frame will be created and the value selected in the associated track bar / slider defines how sensitive FFmpeg should be. Lowest sensitivity will disable scene change detection. A sensitivity of 40% (which is the default value) will detect a 40% change in the overall picture as a scene change and thus create a key frame.

> > #### Closed GOP (Group Of Pictures) ffmpeg -flags +cgop

> > This will enable a closed GOP size. This option is usefull if you want to segment your output file (see The Miscellaneous page).

> #### Other

> Miscellaneous fields for video encoding.

> > #### Video sync ffmpeg -vsync

> > Defines how the video is synchronized with the audio.

> > #### Framerate ffmpeg -r

> > Define the framerate in frames per second for video encoding.

> > #### Pixel format ffmpeg -pix_fmt

> > In this field you can specify a pixel format for the output file. A list of supported pixel formats can be selected from the drop down list.

> > #### Trellis ffmpeg -trellis

> > Determins how optimal quantization should be used.

> > #### Speed preset ffmpeg -preset:v

> > The speed preset to use (for H.264/AVC and H.265/HEVC). You can specify other presets than the listed onest for other codecs as you need.

> > #### Video tuning ffmpeg -preset:v

> > The video tuning to be used for H.264/AVC and H.265/HEVC.

> > #### Threads ffmpeg -threads

> > How many encoding threads should be used. FFMpeg usually fires as many threads as possible for the codec but limited to the amount of cores in the processor. You would rarely change this unless you want to force FFMpeg use less threads, thus leaving free processor cores for other work 'n fun.

> #### HW Decoding

> Fields used to enable hardware decoding of video stream(s).

> > #### Accelerator ffmpeg -hwaccel

> > The accelerator to be used for hardware decoding. If none is selected (default), hardware decoding is disabled regardless of the values selected in the other fields.

> > #### Codec ffmpeg -c:v (input)

> > If you want to explicitly define the codec to be used for hardware decoding, you can do it here.

> > #### Device ffmpeg -hwaccel_device

> > If you have multiple GPU's you can specify either a numeric value specifying the index of the GPU to use (first GPU = 0, second = 1 etc.). You can also specify a path to the rendering device.

> > #### Device initializer ffmpeg -init_hw_device

> > If you explicitly want to initialize your hardware device, it can be done in this field.

#### The Audio page

> #### Codec ffmpeg -acodec (-c:a)

> In this field you must select the codec you want to use to encode audio.

> #### Bit rate

> Please see bit rate controls.

> #### Quality

> > #### Quality setting

> > Please see Quality setting

> #### Other

> > #### Number of audio channels ffmpeg -ac

> > Define the number of audio channels to encode.

> > #### Audio profile ffmpeg -profile:a

> > Defines the profile to be used for audio encoding.

#### The Subtitles page

> #### Codec ffmpeg -scodec (-c:s)

> In this field you must select the codec you want to use to encode subtitles.

> #### Burn in subtitles

> This section is used to define how subtitles should be burned in to the video. To define these values you must select the BURN-IN subtitle codec (FFQueue internal codec) and the video codec cannot be "copy". When burn in of subtitles is enabled a filter (Subtitle BURN-IN) is added to the filter list which enables you to define where in the filter chain the burn in should take place.

> > #### Subtitle type

> > Define the type of subtitle to burn in. If you select a text-based subtitle and the job includes a bitmap-based subtitle stream (or vice versa) the job will fail to process.

> > #### Subtitle size

> > In these fields you can define the original size of the subtitles. If the size of the subtitles does not correspond to the defined size the subtitles might fly around where they are not supposed to and this might even cause encoding to fail. Default uses the dimensions defined in the source file (if any, else ffmpeg makes a guess), PAL (DVB_Subs) uses the size 720x576. Custom can be used to define a custom subtitle size if none of the other values did the job well.

> > #### Scale subtitles

> > You can downscale bitmap-based subtitles in order to make them take up less space in the encoded output. Please note that downscaled subtitles might be hard to read so be careful.

#### The Filters page

The filter listing defines what filters are to be used when encoding audio & video. Filters does not do anything when remuxing (using codec: copy). Filters are applied to source in the same order they appear in the list (video filters and audio filters are separated) so beware that any size changing filters might influence the rest of the filter chain. Use [CTRL] or [Shift] to select multiple items with the mouse.
Video filters are applied with -filter_complex and audio filters are applied with -af (see next section).
Complex audio filters.. This option gives you the possibility to have the audio filters added to "filter_complex" rather than "af". This should ONLY be done if you add custom audio filters that requires multiple input streams or that generates multiple output streams (like the "channelsplit" filter).
Buttons next to the filter list:
[Add..] Add a new filter to the end of the filter chain.
[Edit..] Edit the selected filter (double-click the selected filter does the same).
[Remove] Remove the selected filter(s).
[Move up] Moves the selected filter(s) up in the chain.
[Move down] Moves the selected filter(s) down in the chain.
[Preview] Preview the filters in the list (*).
(*) The preview function will use the first selected file in the queue list (main window) as a test file and prompt you to accept (or change) the file selected. You will only be asked one time and if you want to change the test file you must change away from the "Filters" tab and back again. The preview function will only work on simple filters - filters like watermark will not be available to preview. Custom filters might cause the preview to fail.
Available filters are:

- Box blur `ffmpeg filter boxblur`
- Color balance `ffmpeg filter colorbalance`
- Color overlay `ffmpeg filter overlay with colored box`
- Curve adjust (color) `ffmpeg filter curves`
- Color Matrix `ffmpeg filter colormatrix`
- Crop `ffmpeg filter crop`
- Deinterlace `ffmpeg filter yadif / kerndeint`
- Dejudder `ffmpeg filter dejudder`
- Deshake `ffmpeg filter deshake`
- Drop duplicated frames `ffmpeg filter decimate`
- Flip & mirror `ffmpeg filter hflip / vflip`
- Frame stepping `ffmpeg filter framestep`
- Hue/Saturation/Brightness `ffmpeg filter hue`
- HQ Denoise 3D `ffmpeg filter hqdn3d`
- Interlace `ffmpeg filter interlace / tinterlace`
- Invert colors `ffmpeg filter negate`
- Lens correction `ffmpeg filter lenscorrection`
- Noise `ffmpeg filter noise`
- Pad to size `ffmpeg filter pad`
- Perspective `ffmpeg filter perspective`
- Posterize `ffmpeg filter elbg`
- Remove flicker `ffmpeg filter deflicker`
- Remove logo `ffmpeg filter delogo / removelogo`
- Rotate `ffmpeg filter rotate`
- Scale (resize) `ffmpeg filter scale`
- Sharpen (or soften) `ffmpeg filter unsharp`
- Swap U & V plane `ffmpeg filter swapuv`
- Transposee `ffmpeg filter transpose`
- Vignette `ffmpeg filter vignette`
- Watermark (overlay image) `ffmpeg filter overlay with image source`
- Bandpass `ffmpeg filter bandpass`
- Bandreject `ffmpeg filter bandreject`
- Change tempo `ffmpeg filter atempo`
- Channel remapping `ffmpeg filter channelmap`
- Delay channels `ffmpeg filter adelay`
- Echo `ffmpeg filter aecho`
- Equalizer (10 band) `ffmpeg filter equalizer` (Q-Factor width 1,5 pr. band)
- Flanger `ffmpeg filter flanger`
- Headphonize `ffmpeg filter earwax`
- Highpass `ffmpeg filter highpass`
- Lowpass `ffmpeg filter lowpass`
- Normalization `ffmpeg filter dynaudnorm`
- Phaser `ffmpeg filter aphaser`
- Resample `ffmpeg filter aresample`
- Volume and Tone `ffmpeg filter volume, bass and treble`
- Custom filter Adds any custom defined filter supported by ffmpeg to the filter chain - both audio & video!

Some of the filters supports a "from" and "to" time value in which the filter will be applied. This is usefull if you want a filter to "black out" a face or whatever in a certain time span or if a watermark / image should only be displayed i a certain time span. The individual filters are not described further but you can find out more about the filters in ffmpeg's filter documentation.

#### The Metadata page

Metadata values are set with ffmpeg option -metadata.

> #### Define key-value pairs for metadata

> In this list you can define a range of key-value pairs that will be implemented as metadata. FFQueue has a default set of keys implemented but you can add any keys and values you like to the end of the list by filling out the blank fields. Not all keys are supported by all formats and values are not tested for validity - only for illegal characters or character sequences ("[|]" in keys and values. Blanks, quotes and equal sign in keys only).

> #### Set metadata for:

> Here you can select which stream types the metadata should be applied to. If "All (global)" is selected, the values will be set to the file rather than sepcific streams.

#### The Thumbs page

In this page you can define if thumbs and / or mosaics should be created from the output files that are encoded using the preset. For more information see thumb maker.

#### The Miscellaneous page

Miscellaneous settings and values.

> #### Change FOURCC for AVI files ffmpeg -tag (as -atag & -vtag)

> In these fields you can define the FOURCC's to be used in AVI-files to describe the codecs to be used for decoding. This is can be useful when encoding with MPEG4 codec and the AVI should use XviD or DivX for decoding.

> #### Custom command line arguments

> In these fields you can define any custom command line arguments that should be passed to FFMpeg for the first pass and / or the second pass. If you do not use two-pass encoding only the arguments for first pass are usefull. The contents of this field is added to the end of the preset settings making is possible to override arguments set by FFQueue. Use these fields with caution since they might screw up other properties set by FFQueue.
> Since version 1.7.51 it is possible to separate the custom command line arguments into input arguments and output arguments with "||". If you enter the arguments `-some thing||-other thing` then "-some thing" will be prepended to any input file(s) and "-other thing" will be appended to the preset as usual.

> #### Segmenting ffmpeg -f segment

> These settings can be used to define how a file should be segmented. Segment length is the length of each segment defined as seconds, minutes or hours. With List file you can select between different types of list files generated by ffmpeg. Reset timestamps will generate new timestamps for each segment. Incremental time code will let the time increment through all segments. For streaming will use the `ssegment` format instead of `segment`. Break non-keyframes will allow breaking of non-keyframes in segments. Please read ffmpeg docs for further info.
> NOTE! When segmenting is used, FFQueue will insert a numeric formatter to the ouput file name (eg. "out.mp4" becomes "out %03d.mp4"). This means that you will not get any overwrite warning if files with the generated names exists when starting a job.

> #### Other -> Aspect ratio ffmpeg -aspect

> In this field you can specify an aspect ratio. It must either be a floating point value (x.xx) or a nominator:denominator (4:3). A list of common aspects are available in the drop down list.

> #### Other -> Dispositions ffmpeg -disposition

> Click this button to open a menu where you can select disposition for individual stream types. "Undefinied" means that the option is not used, "Un-set existing" means that any disposition from the input stream(s) will be cleared (-disposition 0).

> #### Other -> Output format ffmpeg -f

> In this field you can explicitly define an output format for the ouput file. This will override the format specified by the file extension.

> #### Other -> Enable faststart for better streaming ffmpeg -movflags faststart

> This option will move the index (for MOV, MP4 and ISMV) to the beginning of the file in order to let playback to be started before any download has completed. Enabling this option might cause the encoding to seem stuck at the end without this being a problem.

> #### Set file time of output file...

> This option will copy the available file times from the first input file to the output file. This is usefull for people who uses file time for searching and ordering. On Linux the file times copied are modified time and accessed time. On Windows created time is copied as well.

### Bit rate controls

The bit rate controls are used to define properties for both video and audio rates.

#### Bit rate declared as

In this field you must select how FFQueue should deliver bit rates to FFmpeg. Please be warned that some (mostly newer) codec does not support bps (bit/sec) and they will understand bps as kbps (kbit/sec). To be sure to get it right you should refraign from using any setting below kbps unless you are sure the selected codec will accept it.

#### Average bit rate ffmpeg -b:[a/v]

The average bit rate for the created content (not really variable bit rate nor constant bit rate).

#### Buffer size ffmpeg -bufsize:[a/v]

This value determins how often FFmpeg will recalculate the actual bit rate. Whenever the content created reches the buffer size the bit rate is calculated and the buffer is reset.

#### Minimum bit rate ffmpeg -minrate:[a/v]

This value specifies how low the actual bit rate may get.

#### Maximum bit rate ffmpeg -maxrate:[a/v]

This value specifies how high the actual bit rate may get.

#### Tips for constant bit rates

To achieve constant bit rate (CBR) in order to get compatibility with older (read: stoneage) hardware you must declare the same value for average, minimum and maximum bit rate. Also you must specify a buffer size (optimally same size as the decoder buffer on the target device) that is no higher than the other bit rates. Normally you would start with a bit rate identical to average bit rate and then lower the value until the output from FFMpeg is playable on the target device.

### Quality setting (aka. quality scale / qscale) ffmpeg -q:[a/v]

The quality setting is used to define a requested quality (as VBR / Variable Bit Rate) for the content being created. The actual value passed from FFQueue to FFmpeg might vary depending on the codec selected. For mp3 audio the value passed is between 0 (best quality: 220..260 kbps) and 9 (worst quality: 45..85 kpbs). For mpeg4 video the value is in the range 1 (best quality) to 31 (worst quality). Do not get confused by the fact that a higher quality might result in a lower value - this is intentional.

### Thumb maker

The thumb maker is used to create thumbnails and / or tiled mosaics with frames from a movie. The settings for creating thumbs are available both for presets and for the thumb maker tool. When used in presets the thumbs will be created from the output file after the encoding process has completed.
IMPORTANT! Thumbs are created with silent overwrite of existing files. Please be sure to back up any previous images that might be overwritten by the making of thumbs!
About the process: Statistics from FFmpeg are quite odd and often it seems like no work is being done at all. The remaining time and progress bar seems fixed. But FFmpeg is working and you should not panik about the odd statistics.

#### Input file Not in presets

This is the video file used to create thumbs from.

#### Create thumbnails

Check this field if you want to create thumbnails (individual frames).

#### Create tiled mosaics

Check this field if you want to create mosaics composed of multiple thumbs.

#### Destination

Select where you want to store the images created. You can choose to have FFQueue store the images in a uniquely named subfolder to the folder in which the input file is located, a subfolder named `Thumbs` or in the folder where the input file is located. File naming of images depends on the selection made.

#### Image format

Select or specify the image format (file extension) to be used for the thumbs.

#### Thumbnail width

Specify the width of the thumbs - for some builds of FFMpeg the creation of thumbs will fail if this value is too small (below 50). The height of the thumbs will be automatically calculated by FFmpeg.

#### Create first thumb from..

If you want to skip a section from the beginning of the input file (eg. the intro) you can click this link and specify how much time should be skipped from the beginning.

#### Create thumb every..

Mark this field if you want to define if the thumbs should be created with a fixed frequency / interval that can be defined as frames, seconds or minutes.

#### Create thumb for each scene change..

Mark this field if you want FFMpeg to create a thumb for each estimated scene change. A scene change is defined by a change to the previous image that is more than 50%.

#### Max. amount of..

In these fields you can specify the maximum amount of thumbs or mosaics that should be created. Note that a maximum of 5 mosaics of the size 4x5 equals to a maximum of 100 individual thumbs. If the movie is too short to generate the specified maximum lesser thumbs / mosaics will be created.

#### Mosaic rows & columns

Specify how many rows (Y) and columns (X) should be used in mosaics. The resulting image will be columns multiplied with thumb width wide and rows multiplied with thumb height high.

#### Save log file to *_log.htm

Option to save the console content to a log file (Input file used to create log file name).

### Make slideshow / concat

This tool is used to create commands that enable you to either create a video from images or to concatenate multiple media files into a single file.

#### Make video from images

Select this tab to create a video file from one or more images. If you want to make a video from multiple images they must be in numeric order (like img01.jpg, img02.jpg, img03.jpg). If images are not in order or if numbers are missing some images might be left out.

> #### First image

> In this field you must enter the name of the first image file that should be used for creating the frames in the video. FFQueue will automaticly attempt to detect the numeric sequence used to define the images. If images are named `imgnn.jpg` where nn is a two digit number starting from 1 FFQueue will pass the image pattern `img%02d.jpg` to FFmpeg.

> #### Images found

> This link displays how many images are found. If you change the path to the first image manually you must click this link to count images.

> #### Scale and pad

> If the source images does not have the exact same dimensions you must tick this field in order to create a temporary range of images that will be resized and padded to fit into the video. The temporary images will be stored in a sub folder to the temporary path selected in options.

> #### Size

> If scale and pad is selected you must specify the width and the height of the scaled and padded images. This dimension will also be the dimension of the resulting video.

> #### Fill color

> If images does not fit exactly into the dimensions declared in with and height they will be padded with the color defined here.

> #### Show each frame for

> This defines the framerate of the input images. If you want to display each images for 2 seconds you must enter "2" into this field. If you want a framerate of 25FPS you must enter the value "0.04".

> #### Force presentation timestamp

> Sometimes the first frame is either missing or just shown very briefly and if this is happening you can tick this field to have FFQueue do some extra magic. You should never tick this field unless proven necessary.

> #### Audio track

> If you want to add an audio track to the video you can enter the name of the audio file in this field.

> #### Loop frames

> If you want to loop the images util the audio track finishes you can tick this field. If this field is not ticked the audio will be cut when the all images have been displayed.

#### Merge multiple sources

Select this tab if you want to merge multiple media files into a single file. This works with both audio files and video files (with or without audio).

> #### Source files

> In this list you must add all the files you want to merge. You can add files with the [Add...] button and remove files with the [Remove] button. Since the files are merged in the same order they appear in this list you can move files up or down with the [Move up] and [Move down] buttons.

> #### Perform simple concatenation

> If you want to simply copy the streams from the source files into a single destination file without re-encoding it you can check this option. In order for this to work the source files must have equal content (same audio codec, same video codec, same video dimensions etc.) and the duration of the files must be correctly listed next to the file in the list. If the duration is not correctly listed you must double-click the file and define it manually or else you might get problems with artifacts.
> N.B: Simple concatenation might cause problems with unicode filenames!

> > #### Explicitly map all streams

> > If enabled, all streams in the source files will be exlicitly mapped into the output file. Use this option if streams are missing after a simple concat.

> #### Force sample aspect

> If the input video have different sample aspect ratios (SAR) you can tick this field in order to apply a "setsar" filter to correct this. You should only use this option if the source videos does not have identical sample aspects.

> #### Use padding rather than stretching

> By default all videos are stretched to equal the size of the first video in the list. If you tick this option the videos will be scaled to fit inside the rect of the first video and the padded to equal the size of the first video using one of the following options:

> > Padding color videos will be padded with this color.
> > Padding blur videos will be blurred with the strength selected and used as padding.

> #### Content types

> You must select at least one stream type to implement in the output video. Only the first stream of each of the selected types will be implemented in the merged result.

#### Destination

In this area you specify the properties of the destination file for both making a video from images and for merging files.

> #### File name

> The file that should be used as the destination for the job selected. Make sure to select a format that is suitable for the resulting content (audio file for audio only, video file for audio and video).

> #### Preset

> In this list you must select a preset to use for encoding the destination file. Presets using "copy" as encoding or presets using two pass might not be usable for the task.

> #### Limit length

> If you want to ensure that the runtime of the destination file does not exceed a certain time span you can click this link to define the time. If you create a video from images and define an audio track the length of the audio track will be predefined in the time editor.

> #### Save log file to *_log.htm

> Option to save the console content to a log file (name of destination file used to create log file name).

### Two pass video stabilization

This tool is used for advanced stabilizing (remove camera shake) of videos. See more about the filters used in this tool in the ffmpeg documentation for vidstabdetect and vidstabtransform.

#### File to stabilize

In this field you must specify the file you want to stabilize. Click the [...] button to browse for the file.

#### First pass (detection)

This page has controls that is used for the first pass that detects the instability of the file and stores it to a transformation file used in the second pass and / or displays it in the destination video as motion vectors.

> #### Shakiness

> Defines how much shakiness should be detected in the video.

> #### Accuracy

> Defines how accurate the search should be. More gives better results but slower detection.

> #### Step size

> The step size for the search process.

> #### Min. contrast

> The minimum contrast that is allowed in the search process. If contrast dips below the minimum the search will be paused until contrast increases again.

> #### Tripod reference frame

> An index of a frame that is used as the offset for the search process (the optimal camera position).

#### Second pass (translation)

This page has controls that is used in the second pass to define how the transformations found in the first pass should be applied to the video.

> #### Smoothing

> The number of frames used for movement smoothing. The value will be doubled and added to 1 (a value of 5 gives 11 frames).

> #### Max. allowed number of pixels to shift

> Defines how many pixels the transformations can at maximum be. A value of -1 means unlimited, 0 = no shifting.

> #### Max. allowed number of degrees to rotate

> Defines how many degrees (-1..180) the transformations can at maximum be. A value of -1 means unlimited, 0 = no rotating.

> #### Zoom percentage

> Sets the maximum allowed zoom (scaling) that may be done. A value less than zero means zoom out, a value above zero means zoom in, 0 = no zooming.

> #### Max. zoom percent per frame

> Sets the maximum allowed zoom (scaling) that may be done from a frame to the next frame.

> #### Camera path optimization algorithm

> The algorithm used to optimize the path of the camera.

> #### Interpolation

> The type of interpolation to be used in the transformation.

> #### Optimal zoom

> The optimal zoom strategy used in the transformation (none = borders will appear, static = border will appear with strong transformations, adaptive = no borders).

> #### Use solid black...

> If ticked borders caused by transformations will be black, otherwise the borders will be the pixels present before the transformation.

> #### Invert transformations

> Inverts the transformations.

> #### Consider transformations to be relative...

> If ticked the transformations are considered to be relative to the previous frame, if not ticked they are considered absolute.

> #### Virtual tripod mode...

> This is the same as "Consider transformations to be relative"=No and "Smoothing"=0.

#### Other options

> #### Only run first pass...

> Use this option to visualize the transformations with motion vectors in the destination file.

> #### Make detailed visualization

> Tick this option if you want the visualization to be extensive.

> #### Only run second pass...

> This option can be used to only run the second pass using the translations made in a previous first pass.

> #### Keep transformations...

> Tick this option is you want the transformations file to be stored (with the source file) in order to run the second pass at a later time. If this option is not selected the tranformations file will be stored in the temporary folder specified in Options and deteled automatically by FFQueue.

#### Destination

> #### File name

> The file name in where to store the stabilized video. Click [...] to browse.

> #### Preset

> The preset to use for further encoding of the destination file. The video stabilization filters will be inserted after any de-interlacing, but before anything else. Click [...] to open the Preset manager.

> #### Save log file to *_log.htm

> Option to save the console content to a log file (name of destination file used to create log file name).

### Convert video to GIF

This tool can be used to convert a video, or parts thereof, to a GIF animation.
!!NOTE!!
This tool may fail (endless encoding with no progress) in two-pass mode when some versions of FFmpeg is paired with some types of source video. Workaround for this is to convert the part of the video you want to GIF'ify to another video format (MP4, FLV etc.) before converting it to GIF.

#### Select input file

In this field you must enter the source video used to create the GIF animation. When a valid video file is entered, information about that file will be displayed below this field.

#### Start conversion from...

Click this link in order to select the time offset in the source video from where to create the GIF.

#### GIF properties

> #### Width, height and Frame rate

> If you do not specify any of these fields, the values of the source video will be used. If you declare either width or height, the missing field will be auto-calculated in order to maintain aspect ratio. You should not use frame rates above 10 for GIF's.

> #### 2 passes for optimized..

> If this field is ticked, the palettegen and paletteuse filters are used to create a palette with optimized colors to use in the GIF animation. If this field is not ticked, a fast single pass is used instead. If this field is unavailable (grayed out) the filters used for two pass are not available in the ffmpeg used.

> #### Use filters to increase cut precision

> If ticked, FFQueue will insert a select filter in order to increase the precision of the selected part of the source video. If you have trouble (see note) with the convert, please try to untick this option.

> #### Limit length..

> Defines how long the created GIF will be.

#### Select ouput file

In this field you must specify the name of the resulting GIF animation.

#### Save log file..

If you want to save a log file with detailed information of the convert, tick this field.

### Language editor

The language editor is used to translate FFQueue's internal UI language to another languages. Please be carefull not to modify any of the standard C++ formatting specifiers (%x) as this would most likely cause FFQueue to crash.
Translations are always loaded from and saved to a file named "FFQueue.lng" which will be located in the same folder where FFQueue[.exe] is located. The file will be saved when you exit FFQueue (if any changes have been made).

#### Language information

The description is used to show information and credentials for the language in the about box. The password fields can be used to define a password that is required for subsequent modifications of the language (in order to prevent others from stealing the credentials for the language).

#### String list

The list displays all the strings used by FFQueue. The ID-column is the internal reference number, the Status-column displays one of the following values:

- New a new string that has not been accepted or translated is used.
- Internal an internal, untranslated value is accepted to be used.
- Translated a valid, translated value is used.
- Modified a translation is made but the internal value has changed since translation.

The Content-column displays the string value used with this language.

#### Edit selected string

In this text field you can edit the content of the selected string or string array. AGAIN: Be ever so carefull NOT to disturb the C formatting specifiers! While in the editor you can use the following hot key combinations to ease the translation process:

- [Ctrl]+[Arrow up] go to previous item, discarding any changes made.
- [Ctrl]+[Arrow down] go to next item, discarding any changes made.
- [Ctrl]+[Enter] store changes and go to next new item.
- [Ctrl]+[S] store changes but do not change item.
- [Ctrl]+[I] load the internal value of the item.

If you want to reload the translated value you can use [Ctrl]+[Arrow] up & down to discard and reload. The character "|" is not allowed in strings since it is used to separate string arrays. String arrays will be edited with one line per item and the number of items cannot be modified.
Copyright © by Torben Bruchhaus - Be fair, don't steal!