You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将视频时长转为秒?C#播放时长计算代码问题排查

解决C#视频时长转换计算错误问题

问题说明

输入原视频时长为2.30(代表2分钟30秒)、播放速度因子为2时,现有代码输出69秒,但正确结果应为75秒;输入3.59、速度因子1.75时,代码输出122秒,正确结果应为136秒。核心问题是现有代码对输入的时长格式解析逻辑错误。

错误原因

现有代码将输入的MM.SS格式(分钟.秒)直接解析为浮点型小数分钟,比如2.30被当成2.3分钟,计算为2.3*60=138秒,导致后续计算全部错误。正确的解析逻辑应该是把小数点前的数字当作分钟,小数点后的两位数字当作秒。

修正方案

放弃直接将输入转为浮点型的方式,改为按字符串分割输入内容,分别提取分钟和秒部分,再计算总秒数。具体步骤:

  • 将输入的时长字符串按小数点分割为两部分
  • 第一部分转为整数分钟,第二部分补零为两位后转为整数秒
  • 计算总秒数:分钟*60 + 秒
  • 按速度因子计算新时长,转换为整数类型

修正后的代码

using System;

class Program
{
    public static void Main(string[] args)
    {
        string originalTimeInput;
        float playbackSpeed;
        int originalSeconds, newSeconds;

        Console.WriteLine("[Fast-Forward]");
        Console.Write("What is the original video time? ");
        originalTimeInput = Console.ReadLine();
        Console.Write("What is the playback speed factor? ");
        playbackSpeed = float.Parse(Console.ReadLine());

        // 分割MM.SS格式的输入字符串
        string[] timeParts = originalTimeInput.Split('.');
        int minutes = int.Parse(timeParts[0]);
        // 处理秒部分,确保是两位(输入2.3时自动补0为30秒)
        int seconds = timeParts.Length > 1 ? int.Parse(timeParts[1].PadRight(2, '0')) : 0;
        originalSeconds = minutes * 60 + seconds;

        // 计算新时长,截断小数部分转为整数
        newSeconds = (int)(originalSeconds / playbackSpeed);

        Console.WriteLine();
        Console.WriteLine("The new video time would be {0} second(s).", newSeconds);
        Console.WriteLine("That saves you {0} second(s) from the original video speed.", originalSeconds - newSeconds);
    }
}

验证示例

  1. 输入2.30、速度因子2:
    • 总秒数:2*60+30=150
    • 新时长:150/2=75秒,与示例一致
  2. 输入3.59、速度因子1.75:
    • 总秒数:3*60+59=239
    • 新时长:239/1.75≈136.57,截断后为136秒,节省时长239-136=103秒,与示例一致

内容的提问来源于stack exchange,提问作者maail preston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:30:42