Рассчитайте два аудио длительности с кадром - PullRequest
0 голосов
/ 15 апреля 2020

Я застрял, мне нужен небольшой лог c.

У меня есть две длительности звука

x = "00:00:07:18"
y = "00:00:06:00"        H : M: S: F  
Answer should be x + y = 00:00:13:18 

H = часы S = секунды M = минуты F = кадры F = кадр

Мой вопрос:

if x = "00:00:03:14"
   y = "00:00:13:18"

answer should be x + y = **00:00:17:02**

Если кадр больше 30, он должен увеличиваться на 1 в секунду.

Я использую Power Shell. Как я могу определить логи c, чтобы вычислить оба из них?

1 Ответ

0 голосов
/ 15 апреля 2020

Вычисление первых 3-х частей (hour:minute:second), мы можем разгрузить до типа [timespan], тогда все, что нам нужно беспокоиться, это переносить лишние кадры:

# Simple helper function to turn our input strings into a [timespan] + frame count
function Parse-FrameDuration
{
    param(
        [string]$Duration
    )

    $hour,$minute,$second,$frame = ($Duration -split ':') -as [int[]]

    [PSCustomObject]@{
        Time = New-TimeSpan -Hours $hour -Minutes $minute -Seconds $second
        Frame = $frame
    }
}

# function to do the actual calculation
function Add-Frame
{
    param(
        [string]$Base,
        [string]$Offset
    )

    # Parse our two timestamps
    $a = Parse-FrameDuration $Base
    $b = Parse-FrameDuration $Offset

    # Calculate frames % frame rate, remember to carry any excess seconds
    $frames = 0
    $carry = [math]::DivRem($a.Frame + $b.Frame , 30, [ref]$frames)

    # Calculate time difference, add any extra second carried from frame count
    $new = ($a.Time + $b.Time).Add($(New-TimeSpan -Seconds $carry))

    # Stitch output string together from new timespan + remaining frames
    return "{0:hh\:mm\:ss}:{1:00}" -f $new,$frames
}

Теперь мы можем делать:

PS C:\> Add-Frame -Base 00:00:03:14 -Offset 00:00:13:18
00:00:17:02
...