Скриптик можно накатать: считываем первое поле в переменную time, второе — в переменную string (причем нужно запоминать предыдущие значения, т.е. самый первый прогон ничего писать не будет); вместе с этим заводим счетчик N; инкрементируем N, записываем его в файл, далее пишем время начала --> время конца и текст.
Грубо говоря, так:
#!/bin/sh
N=0
time0=""; string0=""
while read time string
do
if [ "$time0" != "" ]; then
N=$[N+1]
echo -e "$N\n$time0 --> $time\n$string0\n" >> sub.srt
fi
time0=$time; string0=$string
done < sub.txt
echo -e "$N\n$time0 --> end\n$string0\n" >> sub.srt
останется лишь вручную заменить слово end на время окончания показа последней строки субтитр.
Да, если время придется преобразовывать к другому формату, лучше будет воспользоваться каким-нибудь другим скриптовым языком.