zoukankan      html  css  js  c++  java
  • ffmpeg转换字符动画

     1 using FFmpeg.NET;
     2 using System;
     3 using System.DrawingCore;
     4 using System.Text;
     5 using System.Threading;
     6 
     7 namespace VideoToChar
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             //Console.BackgroundColor = ConsoleColor.White;
    14             //Console.ForegroundColor = ConsoleColor.Black;
    15             Console.SetBufferSize(Console.WindowWidth, Console.WindowHeight);
    16             //Console.SetBufferSize(1800, 800);
    17 
    18 
    19             var inputFile = new MediaFile(@"d:ffmpeg1.mp4");
    20             var outputFile = new MediaFile(@"d:ffmpeg1.jpg");
    21 
    22             var ffmpeg = new Engine(@"d:ffmpegffmpeg.exe");
    23 
    24             var fls = System.IO.Directory.GetFiles(@"d:ffmpegimg");
    25             if (fls.Length < 1)
    26             {
    27                 try
    28                 {
    29                     double ss = 0.0;
    30                     while (ss < 10)
    31                     {
    32                         // 保存位于视频第 s 秒的帧。
    33                         var options = new ConversionOptions { Seek = TimeSpan.FromSeconds(ss) };
    34 
    35                         var url = $@"d:ffmpegimg{ss}.jpg";
    36                         var img = new MediaFile(url);
    37 
    38                         ffmpeg.GetThumbnailAsync(inputFile, img, options).Wait();
    39 
    40                         //ConvertToChar(new Bitmap(url), 3, 6);
    41 
    42                         ss += (1.0 / 24);
    43                     }
    44                 }
    45                 catch (Exception)
    46                 {
    47                     Console.ReadKey();
    48                 }
    49             }
    50 
    51 
    52             foreach (var item in System.IO.Directory.GetFiles(@"d:ffmpegimg"))
    53             {
    54                 ConvertToChar(new Bitmap(item), 2, 3);
    55                 Thread.Sleep(1000 / 24);
    56             }
    57 
    58             Console.ReadKey();
    59         }
    60 
    61         /// <summary>
    62         /// 将图片转换为字符画
    63         /// </summary>
    64         /// <param name="bitmap">Bitmap类型的对象</param>
    65         /// <param name="WAddNum">宽度缩小倍数(如果输入3,则以1/3倍的宽度显示)</param>
    66         /// <param name="HAddNum">高度缩小倍数(如果输入3,则以1/3倍的高度显示)</param>
    67         public static void ConvertToChar(Bitmap bitmap, int WAddNum, int HAddNum)
    68         {
    69             StringBuilder sb = new StringBuilder();
    70             string replaceChar = "@*#$%XB0H?OC7>+v=~^:_-'`. ";
    71             for (int i = 0; i < bitmap.Height; i += HAddNum)
    72             {
    73                 for (int j = 0; j < bitmap.Width; j += WAddNum)
    74                 {
    75                     //获取当前点的Color对象
    76                     Color c = bitmap.GetPixel(j, i);
    77                     //计算转化过灰度图之后的rgb值(套用已有的计算公式就行)
    78                     int rgb = (int)(c.R * .3 + c.G * .59 + c.B * .11);
    79                     //计算出replaceChar中要替换字符的index
    80                     //所以根据当前灰度所占总rgb的比例(rgb值最大为255,为了防止超出索引界限所以/256.0)
    81                     //(肯定是小于1的小数)乘以总共要替换字符的字符数,获取当前灰度程度在字符串中的复杂程度
    82                     int index = (int)(rgb / 256.0 * replaceChar.Length);
    83                     //追加进入sb
    84                     sb.Append(replaceChar[index]);
    85                 }
    86                 //添加换行
    87                 sb.Append("
    ");
    88             }
    89             Console.Clear();
    90             Console.Write(sb.ToString());
    91         }
    92 
    93     }
    94 }
    View Code

  • 相关阅读:
    java的(PO,VO,TO,BO,DAO,POJO)解释
    java中的几种对象(PO,VO,DAO,BO,POJO)
    mybatis如何根据mapper接口生成其实现类
    MyBatis接口的简单实现原理
    Fast-settling synchronous-PWM-DAC filter has almost no ripple
    CMOS DACs act as digitally controlled voltage dividers
    Programmable current source requires no power supply
    Add margining capability to a dc/dc converter
    Use an LM317 as 0 to 3V adjustable regulator
    Simple microcontroller-temperature measurement uses only a diode and a capacitor
  • 原文地址:https://www.cnblogs.com/mmclog/p/14737902.html
Copyright © 2011-2022 走看看