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

 更新时间:2023年01月12日 14:35:59   作者:Csharp小记  
乱码视频效果可能很多人都在抖音看到过,即把一个短视频,转成数字、字母等乱码组成的形式进行播放。本文将用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();
        }

实现效果

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

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

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

相关文章

  • C#实现计算两个坐标点直接距离的方法小结

    C#实现计算两个坐标点直接距离的方法小结

    这篇文章主要为大家详细介绍了C#中几种常见场景下两个坐标点直接距离的计算方法,文中的示例代码讲解详细,有需要的可以参考一下
    2024-04-04
  • C#处理文本文件TXT实例详解

    C#处理文本文件TXT实例详解

    这篇文章主要介绍了C#处理文本文件TXT的方法,以实例形式详细分析了txt文本文件的读取、修改及打印等功能的实现技巧,需要的朋友可以参考下
    2015-02-02
  • C#通过Builder模式造车

    C#通过Builder模式造车

    这篇文章介绍了C#通过Builder模式造车的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • C#实现根据字节数截取字符串并加上省略号的方法

    C#实现根据字节数截取字符串并加上省略号的方法

    这篇文章主要介绍了C#实现根据字节数截取字符串并加上省略号的方法,比较实用的功能,需要的朋友可以参考下
    2014-07-07
  • C#环形队列的实现方法详解

    C#环形队列的实现方法详解

    这篇文章先是简单的给大家介绍了什么是环形队列和环形队列的优点,然后通过实例代码给大家介绍C#如何实现环形队列,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedList.Mvc)

    ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedList.Mvc)

    这篇文章主要介绍了ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(原名为PagedList.Mvc),需要的朋友可以参考下
    2014-10-10
  • Unity中协程IEnumerator的使用方法介绍详解

    Unity中协程IEnumerator的使用方法介绍详解

    本文主要介绍了Unity中协程IEnumerator的使用方法介绍详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C#使用NPOI将List数据导出到Excel文档

    C#使用NPOI将List数据导出到Excel文档

    这篇文章主要为大家详细介绍了C#使用NPOI将List数据导出到Excel文档,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • c# 三种方法调用WebService接口

    c# 三种方法调用WebService接口

    这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C# 弹出窗口show()和showdialog()的两种方式

    C# 弹出窗口show()和showdialog()的两种方式

    本文主要介绍了C# 弹出窗口show()和showdialog()的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论