Programın çıkış noktası izlediğim bir dizide araya reklam girmesi sonucu altyazı uyumunun bozulmasıydı. Bunun üzerine basit bir program geliştirdim.

Kısaca, istediğiniz altyazı numaraları arasında milisaniye cinsinden zamanlamada toplu artırma veya eksiltme yapabiliryorsunuz. Şimdilik sadece srt dosyalarını desteklemekte. Gelişim vaat eden bir program :)

Download
Belki ilerde işleri daha ileri götürüp sıfırdan altyazı oluşturmak için bir programda yapılabilir. Bu arada program C# ile yazıldı. Kullanabilmek için net framework 3.5 gerekiyor.

Programda asıl işi yapan kaynak kodlar:
Harici html gösterim
Harici (numaralandırmasız) html gösterim

    1 using System;

    2 using System.Collections.Generic;

    3 using System.ComponentModel;

    4 using System.Data;

    5 using System.Drawing;

    6 using System.IO;

    7 using System.Text;

    8 using System.Windows.Forms;

    9 using System.Diagnostics;

   10 

   11 namespace Altyazı_2

   12 {

   13     public partial class Form1 : Form

   14     {

   15         public Form1()

   16         {

   17             InitializeComponent();

   18         }

   19         private void toolStripButton1_Click(object sender, EventArgs e)

   20         {

   21             openFileDialog1.Filter = “Srt dosyaları *.srt|*.srt”;

   22             openFileDialog1.FileName = “”;

   23 

   24             if (DialogResult.OK == openFileDialog1.ShowDialog())

   25             {

   26                 StreamReader altyazitext_ = new StreamReader(openFileDialog1.FileName, Encoding.Default);

   27 

   28                 string[] metin=null;

   29                 string text1=“”,text2=“”;

   30                 int sira = 0;

   31                 bool durum=false;

   32 

   33                 while (!altyazitext_.EndOfStream)

   34                 {

   35                     if (durum == false)

   36                     {

   37                         listView1.Items.Add(altyazitext_.ReadLine());

   38                         metin = altyazitext_.ReadLine().Split(‘ ‘);

   39                         listView1.Items[sira].SubItems.Add(metin[0]);

   40                         listView1.Items[sira].SubItems.Add(metin[2]);

   41                         durum= true;

   42                     }

   43                     text1=altyazitext_.ReadLine();

   44                     if (text1==“”)

   45                     {

   46                         listView1.Items[sira].SubItems.Add(text2);

   47                         durum = false;

   48                         sira++;                       

   49                         text1=text2=“”;

   50                     }

   51                     else

   52                     {

   53                         text2=text2+text1+“\n”;

   54                     }

   55                 }

   56                 altyazitext_.Close();

   57 

   58                 textbas.Text = “1″;

   59                 textson.Text = sira.ToString();

   60             }

   61         }

   62 

   63         private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)

   64         {

   65             if (e.IsSelected)

   66             {

   67                 MessageBox.Show(e.Item.Text);

   68             }

   69         }

   70 

   71         private void Uygula_Click(object sender, EventArgs e)

   72         {

   73             bool hata;

   74             this.ValidateChildren();

   75 

   76             hata = (errorProvider1.GetError(textbas) == “”) &&

   77                 (errorProvider1.GetError(textson) == “”) &&

   78                 (errorProvider1.GetError(textsaniye) == “”) &&

   79                 (errorProvider1.GetError(radioartir) == “”) &&

   80                 (errorProvider1.GetError(radioeksilt) == “”);

   81 

   82             if (hata != true)

   83                 return;

   84             //Stopwatch watch = new Stopwatch();

   85             //watch.Start();          

   86             int sure = Convert.ToInt32(textsaniye.Text);

   87             if (radioartir.Checked==false)

   88                 sure = -sure;

   89             zamanlama zaman=new zamanlama(new TimeSpan(0,0,0,0,sure));

   90 

   91             for (int i = Convert.ToInt32(textbas.Text) – 1; i < Convert.ToInt32(textson.Text); i++)

   92             {

   93                 listView1.Items[i].SubItems[1].Text = zaman.kur(listView1.Items[i].SubItems[1].Text, sure);

   94                 listView1.Items[i].SubItems[2].Text = zaman.kur(listView1.Items[i].SubItems[2].Text, sure);

   95             }

   96             //toolStripStatusLabel1.Text = watch.Elapsed.TotalMilliseconds.ToString()+ ” mili saniyede tamamlamdı…”;

   97             //watch.Stop();

   98         }

   99 

  100         class zamanlama

  101         {

  102             TimeSpan timing;

  103             public string zaman;

  104             public int saat;

  105             public int dakika;

  106             public int saniye;

  107             public int salise;             

  108 

  109             public zamanlama(TimeSpan t)

  110             {

  111                 timing = t;

  112             }

  113 

  114             public string kur(string zaman, int saniye)

  115             {

  116                 DateTime t=parse(zaman);

  117 

  118                 this.zaman = (t + timing).ToString(“HH:mm:ss,fff”);

  119 

  120                 return this.zaman;

  121 

  122             }

  123 

  124             DateTime parse(string zaman)

  125             {

  126                 saat = Convert.ToInt32(zaman.Substring(0, 2));

  127                 dakika = Convert.ToInt32(zaman.Substring(3, 2));

  128                 saniye = Convert.ToInt32(zaman.Substring(6, 2));

  129                 salise = Convert.ToInt32(zaman.Substring(9, 3));

  130 

  131                 return new DateTime(1,1,1,saat,dakika,saniye,salise);

  132             }

  133 

  134             public void sil()

  135             {

  136 

  137             }

  138         }

  139 

  140         private void toolStripButton2_Click(object sender, EventArgs e)

  141         {

  142             saveFileDialog1.Filter = “Srt dosyası *.srt|*.srt”;

  143             string[] text;

  144             if(DialogResult.OK==saveFileDialog1.ShowDialog())

  145             {

  146                 Encoding eng = Encoding.Default;

  147                 TextWriter yaz = new StreamWriter(saveFileDialog1.FileName,true,eng);

  148                 int son = listView1.Items.Count;

  149                 for(int i =0;i<son;i++)

  150                 {

  151                     yaz.WriteLine(i.ToString());

  152                     yaz.WriteLine(listView1.Items[i].SubItems[1].Text + ” –> “ + listView1.Items[i].SubItems[2].Text);

  153                     text = listView1.Items[i].SubItems[3].Text.Split(‘\n’);

  154                     foreach( string t in text)

  155                     {

  156                         if (t!=“”)

  157                             yaz.WriteLine(t);

  158                     }                   

  159                     yaz.WriteLine();

  160                 }

  161                 yaz.Close();              

  162             }

  163         }

  164         private void textbas_Validating(object sender, CancelEventArgs e)

  165         {

  166             if (textbas.Text == “”)

  167                 errorProvider1.SetError(textbas, “Boş bırakılamaz, Başlangıç numarasını girin”);

  168             else

  169                 errorProvider1.SetError(textbas, “”);

  170         }

  171         private void textson_Validating(object sender, CancelEventArgs e)

  172         {

  173             if (textson.Text == “”)

  174                 errorProvider1.SetError(textson, “Boş bırakılamaz, Son altyazı numarasını girin”);

  175             else

  176                 errorProvider1.SetError(textson, “”);

  177         }

  178         private void textsaniye_Validating(object sender, CancelEventArgs e)

  179         {

  180             if (textsaniye.Text == “”)

  181                 errorProvider1.SetError(textsaniye, “Boş bırakılamaz, Milisaniye cinsinden süreyi girin”);

  182             else

  183                 errorProvider1.SetError(textsaniye, “”);

  184         }

  185         private void radioartir_Validating(object sender, CancelEventArgs e)

  186         {

  187             radio();

  188         }

  189         private void radioeksilt_Validating(object sender, CancelEventArgs e)

  190         {

  191             radio();

  192         }

  193         private void radioartir_CheckedChanged(object sender, EventArgs e)

  194         {

  195             radio();

  196         }

  197         private void radioeksilt_CheckedChanged(object sender, EventArgs e)

  198         {

  199             radio();

  200         }

  201         private void radio()

  202         {

  203             if (radioartir.Checked == false && radioeksilt.Checked == false)

  204             {

  205                 errorProvider1.SetError(radioartir, “Birini seçmek zorundasiniz”);

  206                 errorProvider1.SetError(radioeksilt, “Birini seçmek zorundasiniz”);

  207                 return;

  208             }

  209             else

  210             {

  211                 errorProvider1.SetError(radioartir, “”);

  212                 errorProvider1.SetError(radioeksilt, “”);

  213             }

  214         }

  215         private void toolStripButton3_Click(object sender, EventArgs e)

  216         {

  217             Uygula_Click(sender, e);

  218         }

  219     }

  220 }