赞
踩
简单的描述下写这个软件的背景吧。之前短视频平台很火的时候,相信很多人都想进去分一杯羹,俺当然也不能免俗,但是人丑家穷又没才艺,咋办呢?看到别人有只发文字啥的一些视频加点背景音乐也能看,想着,Wo Cao?,这我也行啊, I Can I Up。但是让我天天去找素材剪辑视频啥的,那肯定干不来,毕竟程序员是需要加班的,所以,这个粗糙的程序就诞生了,当然我也没怎么用,发了两篇觉得不好玩。就没再玩了。
后来通过种种途径吧,才知道短视频背后的产业相当复杂,一个视频能不能火基本不在于视频本身。
这个软件主要是基于录屏功能来实现的,不过是一键式的罢了,当然实现录屏我们用了第三方的插件:AForge。项目需要的DLL如下图:
实现功能:
- 利用录屏功能录制语句的生成过程,并保存成视频格式
开发环境:
开发工具: Visual Studio 2013
.NET Framework版本:4.5
实现代码:
- public class RecordingUtil
- {
- VideoFileWriter vfWriter = new VideoFileWriter();
- ScreenCaptureStream scStream = null;
-
- readonly Rectangle Rect;
- public RecordingUtil(Rectangle rect, int interval = 40)
- {
- Rect = rect;
- scStream = new ScreenCaptureStream(rect, interval);
- scStream.NewFrame += (s, e1) =>
- {
- vfWriter.WriteVideoFrame(e1.Frame);
- };
- }
-
- public void Start(string savePath, int Rate = 4000 * 1024)
- {
- vfWriter.Open(savePath, Rect.Width, Rect.Height, 25, VideoCodec.MPEG4, 4000 * 1024);
- scStream.Start();
- }
-
- public void Stop()
- {
- if (scStream != null && scStream.IsRunning)
- {
- scStream.Stop();
- }
- if (vfWriter.IsOpen)
- {
- vfWriter.Close();
- }
- }
-
- }

- private void btnCreate_Click(object sender, EventArgs e)
- {
-
- checkNull();
- btnCreate.Text = "正在生成";
- btnCreate.Enabled = false;
- SaveFileDialog sfd = new SaveFileDialog();
- sfd.Filter = "视频文件|*.MP4";
- if (sfd.ShowDialog() == DialogResult.OK)
- {
- Point point = new Point(this.Location.X + 5, this.Location.Y + 25);
- Size size = new Size(splitContainer1.Panel1.Width % 2 == 1 ? splitContainer1.Panel1.Width - 1 : splitContainer1.Panel1.Width, splitContainer1.Panel1.Height % 2 == 1 ? splitContainer1.Panel1.Height - 1 : splitContainer1.Panel1.Height);
-
- Rectangle rect = new Rectangle(point, size);
- RecordingUtil Recording = new RecordingUtil(rect);
- Recording.Start(sfd.FileName);
- createText(txtWord.Text);
- Recording.Stop();
- }
- btnCreate.Text = "生 成";
- btnCreate.Enabled = true;
-
- }
-
- private void btnPreview_Click(object sender, EventArgs e)
- {
-
- checkNull();
- btnPreview.Text = "正在预览";
- btnPreview.Enabled = false;
- createText(txtWord.Text);
- btnPreview.Text = "预 览";
- btnPreview.Enabled = true;
- }
-
- private void checkNull()
- {
- if (string.IsNullOrWhiteSpace(txtWord.Text))
- {
- toolTip1.Hide(txtWord);
- toolTip1.Show("不可为空!", txtWord, 5, -60, 2000);
- return;
- }
- }
-
- private void createText(string text)
- {
- Graphics g = splitContainer1.Panel1.CreateGraphics();
- g.Clear(splitContainer1.Panel1.BackColor);
- Font font = new Font("华文行楷", 25);
- // Brush whiteBrush = new SolidBrush(Color.FromArgb(0, 192, 0));
- Brush whiteBrush = new SolidBrush(Color.Black);
- int x = 0, y = 0;
- string[] arr = txtWord.Text.Split('\n');
- for (int i = 0; i < arr.Length; i++)
- {
- x = 40 * i + 15;
- for (int j = 0; j < arr[i].Length; j++)
- {
- y = 40 * j + 15;
- g.DrawString(arr[i][j].ToString(), font, whiteBrush, x, y);
- Delay(300);
- }
- }
- }
-
- private void Delay(double mm)
- {
- DateTime now = DateTime.Now;
- while (DateTime.Now.AddMilliseconds(-mm) <= now)
- {
- Application.DoEvents();
- }
- }

实现效果:
由简入繁,拿来即用
更多精彩,请搜索公 Z 号:Csharp 小记
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。