SupMover - Shift timings and Screen Area of PGS/Sup subtitle
Usage: SupMover <input.sup> [<output.sup>] [OPTIONS ...]
OPTIONS:
--trace
--delay <ms>
--move <delta x> <delta y>
--crop <left> <top> <right> <bottom>
--resync (<num>/<den> | <multFactor>)
--add_zero
--tonemap <perc>
--cut_merge [CUT&MERGE OPTIONS ...]
CUT&MERGE OPTIONS:
--list <list of sections>
--format (secut | (vapoursynth | vs) | (avisynth | avs) | remap)
--timemode (ms | frame (<num>/<den> | <fps>) | timestamp)
--fixmode (cut | (delete | del))
--trace
- Print contents and structure of input file segments
--delay
- Apply a milliseconds delay, positive or negative, to all the subpic of the subtitle, it can be fractional as the SUP speficication have a precision of 1/90ms
--resync
- Multiply all the timestamp by this factor, this can also be supplied as a fraction
--move
- Shift the windows position of all subpic by the inputed parameters (the image data is left untouched).
- Position is clamped to the screen edges so that windows are always fully contained within the screen area.
--crop
- Crop the windows area of all subpic by the inputed parameters.
- This is done losslessly by only shifting the windows position (the image data is left untouched).
- Crop functionality is not exstensivelly tested when multiple Composition Object or Windows are present or when the windows are is outside the new screen area, a warning is issued if that's the case and i strongly advise to check the resulting subtitle with a video player, also handling of the Object Cropped flag and windows area bigger than the new screen area is not implemented, a warning is issued if needed
- If both
--move
and--crop
are selected, the crop is performed after the move.
--delay
+--resync
- If both modes are selected the delay will be adjusted if it comes before the resync parameter, for example if the program is launched with
--delay 1000 --resync 1.001
it will be internally adjusted to 1001ms, instead if it's launched with--resync 1.001 --delay 1000
it will not
- If both modes are selected the delay will be adjusted if it comes before the resync parameter, for example if the program is launched with
--add_zero
- Some media players (especially Plex) don't correctly sync
*.sup
subtitles. They seem to ignore any delay before the first 'display set'. This option adds a dummy 'display set' at time 0 so subsequent timestamps are correctly interpreted.
- Some media players (especially Plex) don't correctly sync
--tonemap
- Change the brightness of the subtitle applying the specified percentage factor to all the palette's luminance value, similar to https://github.com/quietvoid/subtitle_tonemap , the percentage must be specified as a decimal value with 1 as 100%, it can be bigger than 1 to increase brightness
--cut_merge
- allows to cut subtitle and optionally, if more sections are specified, to merge the cuts into a single subtitle file with the subsequent cuts shifted to have them begin at the end of the previous section. It is possible to personalize its functionality with some options
--list
: specifies the space-separated list of sections,--format
and--timemode
can be used to further configure the parsing of this list. The list must be contained inside double quotes--format
: the format type of the listsecut
: uses the same format as SECut. eg1000-2000;3000-4000
vapoursynt
orvs
: uses the same format as vapoursynth split sintax, additionally if--timemode
is set asframe
the range will be treated inclusively at the start and exclusively at the end. eg[1000:2001] [3000:4001]
avisynth
oravs
: uses the same format as avisynth trim sintax. Eg(1000,2000) (3000,4000)
remap
: uses the same format as Vapoursynth-RemapFrames ReplaceFrameSimple. Eg[1000 2000] [3000 4000]
--timemode
: allow to specifies how to read the values of the sectionsms
frame
: if selected a framerate MUST be specified, as a fraction like24000/1001
or as a number like23.976
timestamp
: if selected the sections MUST be in the format hh:mm:ss.ms and can't be used with--format vapoursynth
--fixmode
: allow to specify how to treat subtitles which are not fully contained in a sectiondelete
ordel
: delete the subtitle if not fully contained inside a sectioncut
: cut the subtitle so that it is fully contained in the section
- if no further option is specified it will works like secut so like the following command line
--format secut --timemode ms --fixmode delete
- allows to cut subtitle and optionally, if more sections are specified, to merge the cuts into a single subtitle file with the subsequent cuts shifted to have them begin at the end of the previous section. It is possible to personalize its functionality with some options
g++.exe -Wall -fexceptions -O2 -Wall -Wextra -c main.cpp -o main.o
g++.exe -o SupMover.exe main.o -s -static