Также если предыдущий субтитр заканчиваестя меньше чем за (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.

Вход
Регистрация
Помощь


Цитата