Также если предыдущий субтитр заканчиваестя меньше чем за (8+4+10) кадров до выделенного, его длительность увеличивается.
// Compensates for reaction time after pressing Alt-Z. // Made by Tengo (flag & MsgBox bij Bedazzle). // // Shifts initial time of selected subs 8 frames back, to delete the reaction time // between the beginning of speech and pressing Alt-Z. // And maximizes the duration of the previous sub, if it ends less than (8+4+10) frames // before the selected one. This way closely packed subs are placed end to front, // 4 frames apart. // // This script is based on frames. // Press F4 if the sidepanel isn't visible. // Set the mode to frames and press F4 again. // // If you like my script and you use it a lot. // You can change the shortcut for this script to Alt-A. // which is more practical than Shift+Ctrl+1 to 5 // // Changing the shorycut keys is done by editing shortcuts.key // Which key you need to change depends on the original shortcut key. // If the script is the first in the list, find SetKey(aPascalScript1,Shift+Ctrl,1) // and set it to SetKey(aPascalScript1,Alt,A) // // The sequence now becomes: // Start the movie, wait until speech begins and press Alt-Z // Wait until speech ends and press Alt-X // followed by Alt-A if you changed it, otherwise it's one of Shift+Ctrl+1 to 5. // Double click the subtitle. If everything works as it should, // the sub will start at the precise moment the speech is heard. // // If you find yourself adding or subtract frames to the begin time on a regular basis, // your reaction time is different from mine. You can correct this by changing ReactionTime. // If the sub starts too early, set it to 7 or less, otherwise set it to 8 or more. // // Enjoy... program CompensateReactionTime; var Flag : Boolean; FPS : Integer; ReactionTime : Integer; DesiredGap : Integer; Shift : Integer; i : Integer; Count : Integer; Init : Integer; Final : Integer; Gap : Integer; Margin : Integer; begin Flag := False; // did the user select any subtitles? (thx B) FPS := 24; // framerate ReactionTime := 8 // the frames it takes to push Alt-Z after speech has begun DesiredGap := Round(4 * 1/FPS * 1000); // set this to your desired spacing, in frames. [1..n], 4 = default Margin := Round(10 * 1/FPS * 1000) // margin for pulling subs together. 10 = default, 0 = off Count := GetSubtitleCount; Shift := Round(ReactionTime * 1/FPS * 1000); // the # of ms the InitialTime will shifted for i := 0 to Count-1 do begin if ((Flag = False) and (IsSubtitleSelected(i) = True)) then begin Init := GetSubtitleInitialTime(i) - Shift; SetSubtitleInitialTime(i, Init); if i > 1 then // correct overlap with previous sub begin Final := GetSubtitleFinalTime(i-1); Gap := Init - Final; if Gap < (DesiredGap + Margin) then begin Final := Init - DesiredGap; SetSubtitleFinalTime(i-1, Final); end; end; Flag := True; end; end; if (Flag = False) then MsgBox('You must select a subtitle!', '&Ok', '', '', $20); end.