From 3837edee8c572caadd9f49349dd0abec15fee8d0 Mon Sep 17 00:00:00 2001 From: Malte Rosenbjerg Date: Sat, 4 Feb 2023 23:42:13 +0100 Subject: [PATCH] Init (#389) Former-commit-id: 4ec200528caa9a425568c6d2bd4476c44d6e161b --- FFMpegCore.Test/FFProbeTests.cs | 2 +- FFMpegCore/FFProbe/FFProbeAnalysis.cs | 3 +++ FFMpegCore/FFProbe/MediaAnalysis.cs | 10 +++++++--- FFMpegCore/FFProbe/MediaFormat.cs | 1 + FFMpegCore/FFProbe/MediaStream.cs | 1 + 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/FFMpegCore.Test/FFProbeTests.cs b/FFMpegCore.Test/FFProbeTests.cs index 9b86202..9da819a 100644 --- a/FFMpegCore.Test/FFProbeTests.cs +++ b/FFMpegCore.Test/FFProbeTests.cs @@ -84,7 +84,7 @@ public void MediaAnalysis_ParseDuration(string duration, int expectedDays, int e { var ffprobeStream = new FFProbeStream { Duration = duration }; - var parsedDuration = MediaAnalysisUtils.ParseDuration(ffprobeStream); + var parsedDuration = MediaAnalysisUtils.ParseDuration(ffprobeStream.Duration); Assert.AreEqual(expectedDays, parsedDuration.Days); Assert.AreEqual(expectedHours, parsedDuration.Hours); diff --git a/FFMpegCore/FFProbe/FFProbeAnalysis.cs b/FFMpegCore/FFProbe/FFProbeAnalysis.cs index d65fc2d..b053d98 100644 --- a/FFMpegCore/FFProbe/FFProbeAnalysis.cs +++ b/FFMpegCore/FFProbe/FFProbeAnalysis.cs @@ -59,6 +59,9 @@ public class FFProbeStream : ITagsContainer, IDispositionContainer [JsonPropertyName("sample_aspect_ratio")] public string SampleAspectRatio { get; set; } = null!; + [JsonPropertyName("start_time")] + public string StartTime { get; set; } = null!; + [JsonPropertyName("duration")] public string Duration { get; set; } = null!; diff --git a/FFMpegCore/FFProbe/MediaAnalysis.cs b/FFMpegCore/FFProbe/MediaAnalysis.cs index bfbc370..53943dc 100644 --- a/FFMpegCore/FFProbe/MediaAnalysis.cs +++ b/FFMpegCore/FFProbe/MediaAnalysis.cs @@ -18,6 +18,7 @@ private MediaFormat ParseFormat(Format analysisFormat) return new MediaFormat { Duration = MediaAnalysisUtils.ParseDuration(analysisFormat.Duration), + StartTime = MediaAnalysisUtils.ParseDuration(analysisFormat.StartTime), FormatName = analysisFormat.FormatName, FormatLongName = analysisFormat.FormatLongName, StreamCount = analysisFormat.NbStreams, @@ -66,7 +67,8 @@ private VideoStream ParseVideoStream(FFProbeStream stream) CodecTagString = stream.CodecTagString, DisplayAspectRatio = MediaAnalysisUtils.ParseRatioInt(stream.DisplayAspectRatio, ':'), SampleAspectRatio = MediaAnalysisUtils.ParseRatioInt(stream.SampleAspectRatio, ':'), - Duration = MediaAnalysisUtils.ParseDuration(stream), + Duration = MediaAnalysisUtils.ParseDuration(stream.Duration), + StartTime = MediaAnalysisUtils.ParseDuration(stream.StartTime), FrameRate = MediaAnalysisUtils.DivideRatio(MediaAnalysisUtils.ParseRatioDouble(stream.FrameRate, '/')), Height = stream.Height ?? 0, Width = stream.Width ?? 0, @@ -92,7 +94,8 @@ private AudioStream ParseAudioStream(FFProbeStream stream) CodecTagString = stream.CodecTagString, Channels = stream.Channels ?? default, ChannelLayout = stream.ChannelLayout, - Duration = MediaAnalysisUtils.ParseDuration(stream), + Duration = MediaAnalysisUtils.ParseDuration(stream.Duration), + StartTime = MediaAnalysisUtils.ParseDuration(stream.StartTime), SampleRateHz = !string.IsNullOrEmpty(stream.SampleRate) ? MediaAnalysisUtils.ParseIntInvariant(stream.SampleRate) : default, Profile = stream.Profile, Language = stream.GetLanguage(), @@ -110,7 +113,8 @@ private SubtitleStream ParseSubtitleStream(FFProbeStream stream) BitRate = !string.IsNullOrEmpty(stream.BitRate) ? MediaAnalysisUtils.ParseLongInvariant(stream.BitRate) : default, CodecName = stream.CodecName, CodecLongName = stream.CodecLongName, - Duration = MediaAnalysisUtils.ParseDuration(stream), + Duration = MediaAnalysisUtils.ParseDuration(stream.Duration), + StartTime = MediaAnalysisUtils.ParseDuration(stream.StartTime), Language = stream.GetLanguage(), Disposition = MediaAnalysisUtils.FormatDisposition(stream.Disposition), Tags = stream.Tags.ToCaseInsensitive(), diff --git a/FFMpegCore/FFProbe/MediaFormat.cs b/FFMpegCore/FFProbe/MediaFormat.cs index 1e124fe..c588165 100644 --- a/FFMpegCore/FFProbe/MediaFormat.cs +++ b/FFMpegCore/FFProbe/MediaFormat.cs @@ -3,6 +3,7 @@ public class MediaFormat { public TimeSpan Duration { get; set; } + public TimeSpan StartTime { get; set; } public string FormatName { get; set; } = null!; public string FormatLongName { get; set; } = null!; public int StreamCount { get; set; } diff --git a/FFMpegCore/FFProbe/MediaStream.cs b/FFMpegCore/FFProbe/MediaStream.cs index 332cbfb..008390e 100644 --- a/FFMpegCore/FFProbe/MediaStream.cs +++ b/FFMpegCore/FFProbe/MediaStream.cs @@ -10,6 +10,7 @@ public abstract class MediaStream public string CodecTagString { get; set; } = null!; public string CodecTag { get; set; } = null!; public long BitRate { get; set; } + public TimeSpan StartTime { get; set; } public TimeSpan Duration { get; set; } public string? Language { get; set; } public Dictionary? Disposition { get; set; }