1

我在 UWP 应用程序中使用 MediaPlayerElement。我希望将显示的值从 TimeElapsedElement 和 TimeRemainingElement 转换为帧而不是秒。

所以目前我收到的值是:hh:mm:ss:ff(ff 秒的分数)

我想要的值是:FFFFF(到目前为止经过的总帧数)或标准时间码值,例如 hh:mm:ss:FF(FF 是当前秒内经过的帧)

似乎我无法访问和修改 TimeElapsed 和 TimeRemaining 元素,但想知道这些值是否适合某种转换,以获得媒体播放的帧速率并将值转换为帧。

或者,我想知道是否可以使用 MediaPlayer.PlaybackSession.Position 创建我自己的以帧而不是秒为单位的变量,并改为显示该值。我想已经发生了一些转换,它占用了加载媒体的帧率。

想知道你会推荐什么方法,如果你能指出任何资源的方向,以便在 c# 中进行时间到帧的转换?感谢您的任何帮助,您可以提供!

4

1 回答 1

1

目前MediaPlayerElement不提供关于经过了多少帧的信息,时间是一个更通用的表达方式。

如果您需要获取当前通过的帧数,则需要进行一些计算:

Frame rate * Play time

如何获得帧率

List<string> videoProperties = new List<string>();
videoProperties.Add("System.Video.FrameRate");
IDictionary<string, object> retrieveProperties = await file.Properties.RetrievePropertiesAsync(videoProperties);
double frameRate = ((uint)retrieveProperties["System.Video.FrameRate"])/1000.0;

如何获取过去的帧

var sec = MyPlayer.MediaPlayer.PlaybackSession.Position.TotalSeconds;
var frameCounts = sec * frameRate;

在大多数情况下它是适用的,但这只能作为参考值。因为有些视频的帧率是不固定的。

谢谢。

于 2020-05-25T02:30:48.507 回答