function SubSync(Folder,FileOld,FileNew,varargin)
% SubSync(Folder,FileOld,FileNew,dt)
% SubSync(Folder,FileOld,FileNew,T1,Te)
%
% Input:
% Folder: destined folder
% FileOld: source *.srt file
% FileNew: destination *.srt file
%
% dt: timeshift in (s)
%
% T1: begintime of line 1; vector with [H M S sss], sss in thousands of seconds
% Te: begintime of last line; vector with [H M S sss]
%
% Output:
% A *.srt file with name FileNew in the defined folder with adjusted timing
%
% Written by Mark Bos, 2011
%
switch (length(varargin))
case 1
dt=varargin{1};
case 2
T1=varargin{1};
Te=varargin{2};
otherwise
return
end
SubOld=[Folder,'\',FileOld];
SubNew=[Folder,'\',FileNew];
fid=fopen(SubOld,'r');
fod=fopen(SubNew,'wt');
[data]=LoadSrt(fid);
switch (length(varargin))
case 1
data(1).TimesBeginNew=data(1).TimesBegin+dt;
data(1).TimesEndNew=data(1).TimesEnd+dt;
case 2
Tbegin=T1(1)*3600+T1(2)*60+T1(3)+T1(4)/1000;
Teind=Te(1)*3600+Te(2)*60+Te(3)+Te(4)/1000;
dtOld=data(1).TimesBegin(end)-data(1).TimesBegin(1);
dtNew=Teind-Tbegin;
data(1).TimesBeginNew=data(1).TimesBegin*(dtNew/dtOld);
data(1).TimesEndNew=data(1).TimesEnd*(dtNew/dtOld);
a=(data(1).TimesBeginNew(1)-Tbegin);
data(1).TimesBeginNew=data(1).TimesBeginNew-a;
data(1).TimesEndNew=data(1).TimesEndNew-a;
end
WriteSrt(fod,data);
fclose ('all');
end
function [data]=LoadSrt(fid)
while ~feof(fid)
Numb=str2num(fgetl(fid));
if isempty(Numb)
continue
end
data(Numb).Times=fgetl(fid);
[begin,eind]=DetTimes(data(Numb).Times);
data(1).TimesBegin(Numb)=begin;
data(1).TimesEnd(Numb)=eind;
i=1;
data(Numb).Line{1}=fgetl(fid);
while ~isempty(data(Numb).Line{i})
i=i+1;
data(Numb).Line{i}=fgetl(fid);
end
end
end
function [begin,eind]=DetTimes(TIMES)
begin=str2num(TIMES(1:2))*3600+str2num(TIMES(4:5))*60+str2num(TIMES(7:8))+str2num(TIMES(10:12))/1000;
eind=str2num(TIMES(18:19))*3600+str2num(TIMES(21:22))*60+str2num(TIMES(24:25))+str2num(TIMES(27:29))/1000;
end
function WriteSrt(fod,data)
teller=1;
for i1=1:length(data(1).TimesBeginNew)
t1=data(1).TimesBeginNew(i1);
t2=data(1).TimesEndNew(i1);
if t1>0
fprintf(fod,'%d\n',teller);
H1=floor(t1/3600);t1=t1-H1*3600;
M1=floor(t1/60);t1=t1-M1*60;
S1=floor(t1);t1=t1-S1;
s1=floor(t1*1000);
H2=floor(t2/3600);t2=t2-H2*3600;
M2=floor(t2/60);t2=t2-M2*60;
S2=floor(t2);t2=t2-S2;
s2=floor(t2*1000);
fprintf(fod,'%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\n',H1,M1,S1,s1,H2,M2,S2,s2);
for i2=1:length(data(i1).Line)
fprintf(fod,'%s\n',data(i1).Line{i2});
end
teller=teller+1;
end
end
%Signature
fprintf(fod,'%d\n',teller);
t2=data(1).TimesEndNew(i1);
t1=t2+1;
t2=t1+3;
H1=floor(t1/3600);t1=t1-H1*3600;
M1=floor(t1/60);t1=t1-M1*60;
S1=floor(t1);t1=t1-S1;
s1=floor(t1*1000);
H2=floor(t2/3600);t2=t2-H2*3600;
M2=floor(t2/60);t2=t2-M2*60;
S2=floor(t2);t2=t2-S2;
s2=floor(t2*1000);
fprintf(fod,'%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\n',H1,M1,S1,s1,H2,M2,S2,s2);
fprintf(fod,'%s\n','ReSync by Mark Bos');
end