字幕 (.srt) 时间框架的类型是什么

本文关键字:类型 是什么 框架 时间 srt 字幕 | 更新日期: 2023-09-27 18:34:37

我正在开发C#应用程序,它将读取.srt文件并将其显示在屏幕上。

文件格式就是这样;

1   00:00:06,000    00:00:07,400    Enjoy the movie! 
2   00:00:07,500    00:00:09,500    Hi, my name is Mary
3   00:00:22,000    00:00:25,000    Hello my name is John.

正在使用一个计时器,它每 100 毫秒滴答一次,并且在每次滴答中我想要检查值是否在开始和结束之间。在这种情况下,首先将在00:00:06,000 和 00:00:07,400。但我不确定我应该使用什么值。我试图将其解析为日期时间,但它没有转换。

有什么想法吗?

字幕 (.srt) 时间框架的类型是什么

你必须使用 TimeSpan 类型解析 看看这里

您可以使用

日期时间或时间跨度,但您需要为ParseExact函数提供正确的格式。

使用TimeSpan。这里是简单的控制台项目,在正确的时间显示字幕

    class Program
    {
    private static Queue<Subtitle> _subtitles;
    private static Subtitle _activeSubtitle;
    private static TimeSpan _currentTime = new TimeSpan();
    static void Main(string[] args)
    {
        _subtitles = new Queue<Subtitle>();
        Subtitle title1 = new Subtitle()
                              {
                                  StartTime = TimeSpan.Parse("00:00:06,000"),
                                  EndTime =  TimeSpan.Parse("00:00:07,400"),
                                  Text = "Enjoy the movie!"
                              };
        Subtitle title2 = new Subtitle()
                              {
                                  StartTime = TimeSpan.Parse("00:00:07,500"),
                                  EndTime =  TimeSpan.Parse("00:00:09,500"),
                                  Text = "Hi, my name is Mary"
                              };
        Subtitle title3 = new Subtitle()
                              {
                                  StartTime = TimeSpan.Parse("00:00:22,000"),
                                  EndTime =  TimeSpan.Parse("00:00:25,000"),
                                  Text = "Hello my name is John."
                              };
        _subtitles.Enqueue(title1);
        _subtitles.Enqueue(title2);
        _subtitles.Enqueue(title3);
        Timer timer = new Timer(ShowSubtitles, null, 0, 100);
        while (_currentTime <= new TimeSpan(0, 0, 0, 30))
        {
        }
        Console.WriteLine("End");
    }
    private static void ShowSubtitles(object state)
    {
        if (_activeSubtitle == null && _subtitles.Count > 0)
            _activeSubtitle = _subtitles.Dequeue();
        Console.WriteLine(_currentTime);
        if (_activeSubtitle != null)
        {

            if (_currentTime >= _activeSubtitle.StartTime && _currentTime <= _activeSubtitle.EndTime)
                Console.WriteLine("'t{0}", _activeSubtitle.Text);
            if (_currentTime >= _activeSubtitle.EndTime)
                _activeSubtitle = null;
        }
        _currentTime = _currentTime.Add(new TimeSpan(0, 0, 0, 0, 100));
    }
}
internal class Subtitle
{
    public TimeSpan StartTime { get; set; }
    public TimeSpan EndTime { get; set; }
    public string Text { get; set; }
}