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

如何在C# WinUI3中创建带视频帧的视频编辑器时间轴

WinUI3 视频编辑器时间轴显示视频帧实现方案
  • 提取视频帧
    借助FFmpeg的.NET封装库(如Xabe.FFmpeg、FFmpeg.AutoGen)实现视频帧截取。按固定时间间隔(比如200ms)从视频中提取缩略帧,将解码后的帧转换为WinUI支持的BitmapImage或WriteableBitmap。示例代码片段:

    // 用Xabe.FFmpeg截取单帧
    var video = await VideoInfo.LoadAsync("your-video-path.mp4");
    var thumbnailPath = Path.Combine(Path.GetTempPath(), $"frame_{timestamp}.png");
    await FFmpeg.SnapshotAsync(video.InputFilePath, thumbnailPath, TimeSpan.FromMilliseconds(timestamp), new Size(100, 56));
    
    // 加载到BitmapImage
    var bitmap = new BitmapImage();
    using (var stream = File.OpenRead(thumbnailPath))
    {
        await bitmap.SetSourceAsync(stream.AsRandomAccessStream());
    }
    
  • 时间轴UI实现
    用横向布局的ListView承载所有缩略帧:

    1. 设置ItemsPanel为横向StackPanel,搭配ScrollViewer实现横向滚动。
    2. 每个列表项使用Image控件绑定对应的帧资源。
    3. 利用ListView的虚拟化特性,避免一次性加载所有帧导致内存过载。
  • 性能优化要点

    • 按需加载:只加载当前滚动视口内的帧,滚动时动态加载未显示的帧并释放超出视口的帧资源。
    • 缓存复用:将已提取的帧缓存到内存或本地临时文件,避免重复解码视频。
    • 控制帧尺寸:根据时间轴宽度设置合适的缩略帧大小(如100px宽,按视频比例计算高度),减少内存占用。
  • 播放同步交互
    监听视频播放进度,计算当前进度对应的帧索引,通过UI绑定或代码控制时间轴的播放头位置,高亮当前帧。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:03:16