C# WPF 获取视频的第一帧的两种方式

C# WPF 获取视频的第一帧的两种方式

方式一:调用ffmpeg

在WPF中调用FFmpeg获取视频封面,你可以使用FFmpeg的命令行接口。以下是一个简单的例子,展示了如何在C#代码中调用FFmpeg来提取视频封面(首帧)并将其显示在WPF应用程序中。

首先,确保你已经安装了FFmpeg。可以从官网下载并添加到系统的环境变量中,这样就可以在命令行中直接调用ffmpeg命令。

接下来,在你的WPF项目中,你可以使用Process类来执行FFmpeg命令。以下是一个简单的WPF窗口,它包含一个Image控件来显示提取出的封面。

/// <summary>
/// 导出封面图
/// </summary>
/// <param name="ffmpegFileName">FFmpeg.exe路径</param>
/// <param name="videoFileName">视频文件路径</param>
/// <returns>封面图</returns>
public static async Task<BitmapImage> GetVideoFace(string videoFileName)
{
    var ffmpeg = Directory.GetCurrentDirectory() + "\\ffmpeg.exe";
    //startInfo.Arguments = " -i " + srcName + " -y -f image2 -ss " + cutTimeFrame + " -t 0.001 -s " + widthAndHeight + " " + objName;

    string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(videoFileName);
    string baseDirectory = Directory.GetCurrentDirectory();
    if (!Directory.Exists(baseDirectory)) Directory.CreateDirectory(baseDirectory);
    string thumbFileName = Path.Combine(baseDirectory, fileNameWithoutExtension + ".jpg");
    ProcessStartInfo processStartInfo = new ProcessStartInfo(ffmpeg);
    processStartInfo.UseShellExecute = false;
    processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    processStartInfo.CreateNoWindow = true;
    processStartInfo.ErrorDialog = false;
    processStartInfo.RedirectStandardError = true;
    processStartInfo.Arguments = string.Format("-i \"{0}\" -y -f image2 -ss 1 \"{1}\"", new object[]
    {
        videoFileName,
        thumbFileName
    });// 第1帧
    Process.Start(processStartInfo).WaitForExit(100); ;  //Process.Start(processStartInfo).WaitForExit(500);
    BitmapImage bitmap = await SetImage(thumbFileName);

    return bitmap;
}

方式二:基于OpenCVSharp对视频进行帧提取

要使用OpenCvSharp在WPF中获取视频封面,你需要首先安装OpenCvSharp包,然后使用VideoCapture类来读取视频,并使用Mat类来获取帧。以下是一个简单的示例代码,展示了如何获取视频的第一帧作为封面:

/// <summary>
/// 取视频帧
/// </summary>
/// <param name="path">视频地址</param>
/// <returns></returns>
public static Task<BitmapImage> GetPicFromVideo(string path)
{
    return Task.Run(() =>
    {
        BitmapImage bitmapImage = new BitmapImage();
        using (var cap = new VideoCapture())
        {
            using (Mat image = new Mat())
            {
                if (cap.Open(path))//输入视频进行捕获
                {
                    bool state = true;
                    while (state)
                    {
                        cap.Read(image);//输出捕获帧
                        if (!image.Empty())
                        {
                            state = false;
                            using (Bitmap bitmap = image.ToBitmap())
                            {
                                //bitmapImage = ConvertBitmapToBitmapImage(bitmap);
                                using (MemoryStream memoryStream = new MemoryStream())
                                {
                                    // 将Bitmap保存到MemoryStream中
                                    bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                                    // 从MemoryStream创建BitmapImage
                                    //BitmapImage bitmapImage = new BitmapImage();
                                    bitmapImage.BeginInit();
                                    bitmapImage.StreamSource = memoryStream;
                                    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
                                    bitmapImage.EndInit();
                                    bitmapImage.Freeze();
                                    bitmap.Dispose();
                                    return bitmapImage;
                                }
                            }
                        }
                    }
                }
            }
        }
        return bitmapImage;
    });            
}

完整工程文件

C# WPF获取视频封面的两种方式

WPF C# 视频播放器 VideoPlayer2025是一款基于WPF开发的多功能媒体播放器,支持主流音视频格式播放。核心功能包括播放控制(速度调节/音量管理)、视频画面适配(三种显示模式/快照功能)和播放列表管理(多方式添加/自动续播)。具备深色/浅色主题切换、窗口半透明、控制栏自动隐藏等交互设计,支持文件关联与命令行调用。实时显示播放进度与时间,并保存播放状态记忆,提供流畅的用户体验。 阅读详情

相关推荐

C# WPF编程-XAML

C# WPF编程-XAML

若有博文对您有帮助,欢迎点赞关注,收藏评论。 1469

获取视频第一帧

C#

微雨醉桃花的博客 794

C# WPF获取视频封面的完整实现方法

在现代多媒体应用程序中,视频封面提取是提升用户体验的重要环节,常见于视频播放器、内容管理系统及流媒体平台。WPF(Windows Presentation Foundation)作为微软推出的强大UI框架,具备高度灵活的图形渲染能力和数据绑定机制,为开发者提供了良好的多媒体处理支持。本章将围绕视频封面获取的核心业务需求展开,剖析其在实际开发中的技术价值,并介绍实现路径的整体思路。

weixin_42451850的博客 1173

如何取视频第一帧作为封面图片上传

步骤思路如下: 1.在页面上放一个隐藏不可见的video标签,暂不指定src属性。但是注意,需要设置autoplay属性,否则截取到的视频图片很可能是一张空白图 2.获取视频文件的url,赋值给video标签,同时为了保险起见,最好是再创建一个source标签,将url也赋值给source标签的src属性 3.监听video标签的canplay事件,注意,在canplay事件里,第一件事就是暂停视频播放 4.创建canvas标签,使用canvas的drawImage方法画图 代码如下: <!-- 注意

qq_40905766的博客 1434

使用WPF C#将图像序列转换为视频的教程

WPF(Windows Presentation Foundation)是微软公司推出的一种用于构建Windows客户端应用程序的用户界面框架。自2006年随.NET Framework 3.0发布以来,WPF为开发者提供了一个全面的系统,用于设计、开发和部署丰富的应用程序界面。WPF的主要优点之一是将界面逻辑与业务逻辑分离,实现更清晰的代码结构和更易于管理的项目。WPF引入了XAML(可扩展应用程序标记语言),这是一种基于XML的标记语言,允许开发者以声明方式定义用户界面。

weixin_30021053的博客 985

C#平台上实现从视频文件提取指定帧

不错的direct操作demo,希望对大家有帮助。。。这个demo主要使用到的是微软的direct

c# FFMPEG 视频生成封面图

/// <summary> /// 导出封面图 /// </summary> /// <param name="ffmpegFileName">FFmpeg.exe路径</param> /// <param name="videoFileName">视频文件路径</param> /// <returns>封面图</returns&g...

一千万 1410

C#获取视频某一帧的缩略图的方法

主要介绍了C#获取视频某一帧的缩略图的方法,涉及执行CMD命令及针对视频文件操作的技巧,具有一定的实用价值,需要的朋友可以参考下

C# 截取视频第一帧的图片

1.需要借助外部插件 2.视频来源 外部插件:(http://ffmpeg.org/download.html)

静墨客的博客 5342

arduino uno spi驱动12864

arduino uno spi驱动12864

yvee的博客 2060

AniME框架深度体验:用AI自动生成《修真小说》动画全流程记录

本文详细记录了使用开源多智能体框架AniME,结合其核心动画生成模型AniSora V3,将一段修真小说文本自动转化为风格统一动画视频的全流程实战。文章深入解析了从环境搭建、导演智能体任务分解,到多智能体协作生成分镜、角色、动画及最终合成的每一步操作与挑战,为AI驱动的长视频创作提供了宝贵的实践经验与流程优化思路。

ol789012345的博客 625

C#和WPF入门教程

C# wpf快速入门

weixin_45589116的博客 3万+

LoRa物联网实战:用新大陆模块打造智能LED呼吸灯(附完整代码解析)

本文详细介绍了如何利用新大陆LoRa模块实现工业级智能LED呼吸灯的设计与开发。通过256级PWM调制的呼吸灯效果,结合LoRa无线控制技术,实现设备状态的可视化反馈和多设备同步控制。文章包含完整的硬件选型、电路设计、算法优化和代码实现,特别适合物联网开发者和硬件工程师参考。

github5actions的博客 86

C# WPF MediaElement 停在第一帧

使用WPF中的mediaelement控件开播放视频很容易,直接设置它的Source然后Play就可以了,最近有一个需求是加载视频后,先停在第一帧,一段时间后再根据需求开始播放视频,我开始的想法是加载视频后开始播放,然后马上暂停。 MediaElement _video = new MediaElement(); _video.Source = n

4831

基于POI-TL实现动态Word模板数据填充(含图表):从需求到落地的完整开发实践

本文聚焦企业级报告生成场景中 “在线编辑模板 + 动态数据填充” 的核心需求,详细阐述基于 POI-TL、OnlyOffice 与 MinIO 的全栈实现方案。通过代码示例拆解模板加载、文字填充、图表匹配渲染(含通过关系 ID 关联图表与段落的关键逻辑)、报告存储全步骤。最终通过技术组合实现业务人员可视化编辑模板、后端高效填充数据的目标,为同类动态 Word 生成需求提供可复用的实践参考。

imHanweihu的博客 1866

【Chisel】2.4 时序逻辑

2.4 时序逻辑@[TOC](2.4 时序逻辑)前言寄存器(`Reg`)实例Chisel的状态函数实例2 RegNext实例3 RegInit移位器附录 显式的时钟信号和复位信号 前言 没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,重要的事情说三遍。 这一节我们将要学习Chisel中的时序逻辑。在最后我们会实现一个移位器。 这里你需要知道的是,前面的这几节实际上都是对Chisel的基础语法的学习,它并不会给你带来很大的“惊喜”。Chisel真正的作用是把电路

快乐学习小猪猪的博客 844

C# wpf 通过HwndHost渲染视频

文章目录前言一、如何实现二、使用方式三、示例总结 前言 日常开发中,特别是音视频开发,需要在界面上渲染视频,比如制作一个播放器、或者视频编辑工具、以及视频会议客户端。通常拿到的是像素格式数据,此时需要渲染到wpf窗口上就需要一定的方法,本文介绍一种通过hwnd渲染的方法,控件既能提供hwnd又能嵌入wpf窗口里。 提示:以下是本篇文章正文内容,下面案例可供参考 一、如何实现 通过继承HwndHost并实现抽象方法即可作为一个带句柄的wpf控件在xaml中使用,代码如下: class NativeHost

codeofcc的博客 4924

(5)ModalAI VOXL2

Ardupilot官网关于《Non-GPS navigation》的翻译 —《(5) ModalAI VOXL2》。

无人机开发(开源Ardupilot) 1万+

C# wpf 使用ffplay实现视频播放器

有了前面几章的视频渲染方法,再结合笔者已有的一个定制化ffplay播放器《基于ffplay改造成自定义多开播放器》,我们可以很容易的在wpf中实现一个播放器,这个播放器可以支持本地播放、摄像头播放、网络点播、rtmp和rtsp拉流。

codeofcc的博客 1万+

【26美赛C题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

本文为2026年美国大学生数学建模竞赛(MCM/ICM)C题的解题思路与资源分享。文章提出系统学习数学建模的重要性,强调竞赛考察的是综合建模能力而非单纯计算。针对C题常见的复杂系统评估类问题,作者提供了一套完整的建模框架,包括问题拆解、指标体系构建、数据建模、决策模型等六个阶段。订阅者可获得Python/Matlab双版本代码、论文结构解析、AI辅助建模方法等资源。内容适合准备参加各类数学建模竞赛的学生,特别是希望通过AI技术提升建模效率的参赛者。

一键难忘的博客 1683

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# wpf 使用WriteableBitmap渲染视频

文章目录前言一、如何实现?1.创建WriteableBitmap2.关联Image3写入数据三、示例1.示例代码2.效果预览四、像素格式的讨论五、性能对比总结 前言 通过《C# wpf 使用d3d渲染yuv视频数据》我们实现了在Image控件中显示视频,解决了控件绘制不兼容问题。但如果有时候不想依赖D3D时,还有一种方案实现视频的渲染,使用wpf的WriteableBitmap,WriteableBitmap的祖先接口有ImageSource,即可以作为Image的Source显示画面。我们只需往Writ

codeofcc的博客 6847

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C# wpf 使用d3d渲染yuv视频数据

文章目录前言一、如何实现1.继承D3DImage2.关联D3D93.写入数据二、完整代码三、使用方法三、效果预览总结 前言 在《C# wpf 通过HwndHost渲染视频》中介绍了一种在wpf渲染视频的方法,但是有一个缺点,和wpf的控件不太契合,无法在播放框放控件,也无法改变形状,导致一些界面需求较难实现。为了解决这一问题,找到了一种可以和wpf绘制兼容的视频渲染方式,使用d3d渲染。 一、如何实现 我们首先选择用Image控件来显示视频,Image控件有个Source属性,类型是ImageSourc

codeofcc的博客 8502

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WPF 控件(九)WPF控件上下显示的优先级的两种方法:Xaml方式、C#后台代码动态改变的方式

一、简介 我的目的,动态改变控件上下显示的优先级,比如点击按钮,视频监控画面显示: 再次点击,监控画面不显示: 二、解决方法 1、方法1:Xaml方式(这种方法不能动态) <Frame x:Name="Frame" Height="1092" Width="1920" Source="Views/StudyPage.xaml" NavigationUIVisibil...

xpj8888的博客 4307

C# 获取视频文件缩略图的方法

想用WPF实现获取视频文件缩略图的功能,显示到ListView中,但是搜索一下发现,大家都是采用FFmpeg的方式来截取的。我感觉非常不好。首先,FFmpeg非常的大,集成到软件中非常不方便。再者是个命令行的工具,执行后生成一个图片,然后再次读取,也挺烦躁,所以想是否有其它更好更简便的方法呢? Windows 资源管理器本身不靠任何第三方的组件都可以获取视频文件的缩略图,能否调用系统的功能呢?最后研究发现,通过系统的API可以实现。 需要NuGet引用一个库WindowsAPICodePack-Shel

Coding My Way 3615

C# wpf 实现底部嵌入HwndHost

前面三章内容是笔者基于本章研发过程中的附带产物,但是意外的发现第三章可嵌入wpf控件后,本章的意义就变得不那么大了。本章讲述如何从底部嵌入hwnd窗口,以此来做到嵌入窗口不覆盖wpf控件的效果,这种实现思路参考了flutter的一个插件flutter_native_view,其内部实现就用了这种方式。对于wpf实现会复杂一些,因为提供自绘没有BlendMode之类的东西,无法直接消除底部画面,能够使用的方式是Clip,这种方式限制比较多。不过最终还是实现了功能。

codeofcc的博客 2082
下一篇: 移动咪咕刷当贝纯净桌面
zyx2900
博客等级 码龄17年 187粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值