实例介绍
【实例简介】C# 视频编辑demo(WPF .net6.0)
程序为WPF .Net6.0,全部源码。封装了ffmpeg、ffplay、ffprobe.exe,播放嵌入到了WPF窗体中。编辑、生成均通过管道读写,byte操作,不生成临时文件。
程序旨在说明读取、编辑操作的代码,界面没设计,逻辑限制也没写。功能也只有读取,写入图像和文字,但是基础的读写有了,其他的扩展功能也很方便了啊。
这里图省事,将整个视频装入,所以测试时候找个短视频进行处理,5、6分钟以内长度的就可以,用太长的内存装不下。读取视频帧方式很多,这里采用读取每秒的一帧进行选段,然后再将选择的段全部帧读取出来。
选取帧可以使用时间间隔、或使用命令行分段读取,在实际中,这样选偏差比较大,用精确选取指令也还是对不上,所以就用了笨办法,速度较慢,以读取显示60帧为每个线程,开多个线程同时读取,帧总数/帧率=每秒帧数,记录帧序号,提取每秒第一帧作为标尺,详细帧则取选择范围的帧进行,这样就对上了。
播放是将选中的范围帧进行播放,使用ffplay.exe嵌入到WPF窗体中播放。这里注意一下,WPF的窗口不能设置为AllowsTransparency="True",否则不能正常显示。
代码很短,就是ffmpeg比较大100多M。
一些代码中内存、进程关系等代码如有错误自行修正。
首先点击“打开mp4文件”,装入视频,再拖动选择范围框,选择编辑的范围,
再点击“装入选择的帧”,在点击“编辑选择的视频”
在打开的窗口中,菜单里可选择图像或文字,放置到编辑框中,设置组件的属性,点击“应用”。
最后点击“写入到视频”,这里忘了写进度提示了,写入时就等着,写入完毕后,弹出完毕窗口。
这里注意:
1、生成后在当前目录中生成一个output.mp4,如果已存在该文件,则生时成会提示错误,生成完毕后,自行改个文件名。
2、程序因为图省事,将视频全部装入内存,编辑使用时,找个短点的视频,4、5分钟的就可以,太大了内存装不下。
3、编辑时放置组件,组件属性的颜色设置为空,即为透明。
4、装入、选择、调入、编辑的次序别搞乱,因为程序写的匆忙没有校验,别出故障了。
视频生成的效果,这里提供原视频和编辑生成的视频2个视频,可以下载比对效果。
链接:https://pan.baidu.com/s/1MjM8K8iu-uWgfMrnLTOdWA
提取码:255q
【实例截图】
.
├── C# 视频编辑demo(WPF .net6.0).rar
└── E_1
├── E_1
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── AssemblyInfo.cs
│ ├── Communal
│ │ ├── Align.cs
│ │ ├── Color_Pad.cs
│ │ ├── Effect.cs
│ │ ├── Fontset.cs
│ │ ├── Image_.cs
│ │ ├── TextBox_.cs
│ │ ├── Value.cs
│ │ └── ValueBox.cs
│ ├── E_1.csproj
│ ├── E_1.csproj.user
│ ├── Enums.cs
│ ├── Fonts
│ │ └── FontMenu.cs
│ ├── Function.cs
│ ├── Gobal.cs
│ ├── Images
│ │ ├── a_center.png
│ │ ├── a_fill.png
│ │ ├── a_left.png
│ │ ├── a_right.png
│ │ ├── accept.png
│ │ ├── before.png
│ │ ├── botmost.png
│ │ ├── checkmark.png
│ │ ├── clear.png
│ │ ├── color.png
│ │ ├── control_Image.png
│ │ ├── control_input.png
│ │ ├── copy.png
│ │ ├── default.png
│ │ ├── delete.png
│ │ ├── down.png
│ │ ├── effect.png
│ │ ├── face.png
│ │ ├── font16.png
│ │ ├── mouse.png
│ │ ├── next.png
│ │ ├── open.png
│ │ ├── past.png
│ │ ├── save.png
│ │ ├── sfont.png
│ │ ├── spear.png
│ │ ├── spear1.png
│ │ ├── topmose.png
│ │ └── video48.png
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── Progress_Window.xaml
│ ├── Progress_Window.xaml.cs
│ ├── Style
│ │ ├── ColorHelper.cs
│ │ ├── CursorHelper.cs
│ │ ├── Input_Box.cs
│ │ ├── ScrollTemplate.cs
│ │ ├── ScrollViewer.xaml
│ │ ├── TextBox.xaml
│ │ └── Tool_Button.cs
│ ├── Video_Edit.xaml
│ ├── Video_Edit.xaml.cs
│ ├── Video_Info.cs
│ ├── Video_Play.cs
│ ├── bin
│ │ └── Debug
│ │ └── net6.0-windows
│ │ ├── App
│ │ │ ├── BenMoYouYuan-2.ttf
│ │ │ ├── ChaoZiSheFengYunJian-2.ttf
│ │ │ ├── Lolita.ttf
│ │ │ ├── RuiZiWenShuaiKeAiJian-TTF-2.ttf
│ │ │ ├── ZCOOLtongtong-2.ttf
│ │ │ ├── ffmpeg.exe
│ │ │ ├── ffplay.exe
│ │ │ └── ffprobe.exe
│ │ ├── E_1.deps.json
│ │ ├── E_1.dll
│ │ ├── E_1.exe
│ │ ├── E_1.pdb
│ │ ├── E_1.runtimeconfig.json
│ │ ├── Microsoft.Win32.SystemEvents.dll
│ │ ├── System.Drawing.Common.dll
│ │ └── runtimes
│ │ └── win
│ │ └── lib
│ │ └── net6.0
│ │ ├── Microsoft.Win32.SystemEvents.dll
│ │ └── System.Drawing.Common.dll
│ └── obj
│ └── Debug
│ └── net6.0-windows
└── E_1.sln
17 directories, 80 files
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论