服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 基于C#实现乱码视频效果

基于C#实现乱码视频效果

2023-02-28 14:06Csharp小记 C#

乱码视频效果可能很多人都在抖音看到过,即把一个短视频,转成数字、字母等乱码组成的形式进行播放。本文将用C#实现一下这一效果,感兴趣的可以了解一下

文章描述

这个效果可能很多人都在抖音看到过,即把一个短视频,转成数字、字母等乱码组成的形式进行播放。

基于C#实现乱码视频效果

 

开发环境

.NET Framework版本:4.5

 

开发工具

Visual Studio 2013

 

实现代码

private void btn_convert_Click(object sender, EventArgs e)
      {
          string framePath = Application.StartupPath + "\\temp";
          if (Directory.Exists(framePath))
          {
              Directory.Delete(framePath, true);
          }
          Directory.CreateDirectory(framePath);

          //string newFramePath = Application.StartupPath + "\\newTemp";
          //if (Directory.Exists(newFramePath))
          //{
          //    Directory.Delete(newFramePath, true);
          //}
          //Directory.CreateDirectory(newFramePath);


          FFmpegUtil.Split(axWindowsMediaPlayer1.URL, framePath);


          List<char> listChar = new List<char>();
          for (char i = 'a'; i <= 'z'; i++)
          {
              listChar.Add(i);
          }
          for (char i = 'A'; i <= 'Z'; i++)
          {
              listChar.Add(i);
          }
          for (char i = '0'; i <= '9'; i++)
          {
              listChar.Add(i);
          }

          string[] imgUrls = Directory.GetFiles(framePath);
          Bitmap img = null;
          for (int u = 0; u < imgUrls.Length; u++)
          {
              img = (Bitmap)Image.FromFile(imgUrls[u]);
              double threshold = ImageUtil.GetAverageThreshold(img);
              ImageUtil.Threshold(img, threshold);

              StringBuilder builder = new StringBuilder();
              Random random = new Random();

              for (int y = 0; y < img.Height; y += 16)
              {
                  for (int x = 0; x < img.Width; x += 8)
                  {
                      if (ImageUtil.GetGrayValue(img.GetPixel(x, y)) < threshold)
                      {
                          builder.Append(listChar[random.Next(62)]);
                      }
                      else
                      {
                          builder.Append(" ");
                      }

                  }
                  builder.Append("\r\n");
              }
              File.WriteAllText(@"C:\Users\Zero\Desktop\a\b\" + u + ".txt", builder.ToString());
          }
          MessageBox.Show("转换完成");

      }

      private void btn_show_Click(object sender, EventArgs e)
      {
          new FormShow(@"C:\Users\Zero\Desktop\a\b\").Show();
      }
 private void FormShow_Load(object sender, EventArgs e)
      {
          List<string> list = Directory.GetFiles(_path, "*.txt").ToList();
          if (list.Count == 0)
          {
              return;
          }
          list.Sort((a, b) =>
          {
              string reg = "[0-9]+";
              int a_index = int.Parse(Regex.Match(a, reg).Value);
              int b_index = int.Parse(Regex.Match(b, reg).Value);
              return a_index.CompareTo(b_index);
          });
          richTextBox1.Text = File.ReadAllText(list[0]);
          Width = richTextBox1.Lines.Max(s => s).Length * 5;
          Height = richTextBox1.Lines.Length * 10;
          Location = new Point(Location.X, 10);

          new Task(async () =>
          {
              foreach (string str in list)
              {
                  if (!this.IsDisposed)
                  {
                      this.BeginInvoke(new Action(() =>
                      {
                          richTextBox1.Text = File.ReadAllText(str);
                      }));
                  }
                  await Task.Delay(260);
              }
          }).Start();
      }

 

实现效果

基于C#实现乱码视频效果

代码解析:实现原理是首先利用ffmpeg将视频分割成一帧帧的图片,然后将每张图片进行一个二值化处理,最后判断灰度值,大于阈值的情况下随便输入一个字符,否则就输入空格。这里是使用了字符串来记录了各个图片的生成情况,最后保存到一个个的记事本中去。

在展示页面中,只需要将文件夹中的记事本文档按照顺序排列并逐个读取显示即可。

到此这篇关于基于C#实现乱码视频效果的文章就介绍到这了,更多相关C#乱码视频内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://mp.weixin.qq.com/s/9i7sXVbunXE2y8omNJhs2w

延伸 · 阅读

精彩推荐
  • C#C#数据结构之顺序表(SeqList)实例详解

    C#数据结构之顺序表(SeqList)实例详解

    这篇文章主要介绍了C#数据结构之顺序表(SeqList)实现方法,结合实例形式较为详细的分析了顺序表的定义、原理与具体实现技巧,具有一定参考借鉴价值,需要...

    Jimmy.Yang10162021-11-04
  • C#C#基于Windows服务的聊天程序(1)

    C#基于Windows服务的聊天程序(1)

    这篇文章主要为大家详细介绍了C#基于Windows服务的聊天程序的第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    波谷4252022-01-17
  • C#c# 所有类型都从Object类型派生

    c# 所有类型都从Object类型派生

    所有的类型最终从object派生,每一个类型都有一组最基本的方法...

    C#教程网6222021-04-14
  • C#Unity实现图片水印生成

    Unity实现图片水印生成

    这篇文章主要为大家详细介绍了Unity实现图片水印生成,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    liu_sanad11892022-09-03
  • C#C#创建压缩文件的实现代码

    C#创建压缩文件的实现代码

    本篇文章主要介绍了C# 创建压缩文件的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev12002022-01-04
  • C#C#利用性能计数器监控网络状态

    C#利用性能计数器监控网络状态

    这篇文章主要为大家详细介绍了C#利用性能计数器监控网络状态的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    飞翔的月亮9452021-12-18
  • C#C#对Access进行增删改查的完整示例

    C#对Access进行增删改查的完整示例

    本文主要是讲C#对Access数据库的增删改查操作,想学习C#和Access数据库操作基础的可以参考借鉴,以下代码都经过实践测试可用,下面跟着小编一起来看看。...

    C#教程网7472021-12-03
  • C#WPF TextBox水印效果制作方法详解

    WPF TextBox水印效果制作方法详解

    这篇文章主要为大家详细介绍了WPF TextBox水印效果的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    assassinx8792022-01-22