[教程]字符动画制作

实现效果

制作步骤

一、用Pr把视频导出为帧图片和mp3

1.打开Pr,按ctrl+i导入需要制成字符动画的原视频
导入.png
2.按ctrl+m导出为jpg图片,记得存进一个文件夹里,因为会导出大量图片,例如一个三分多钟六十帧的badApple就有一万三千多帧。
导出.png
3.按ctrl+m导出为mp3,后期程序播放音频会用到
等待导出完成。

二、用ascgen2把帧图制成字符文本

1.选择帧图所在文件夹,导入所有图片(安装包在最下面有)
批量制作字符文本1.png
批量制作字符文本2.png
批量制作字符文本3.png
2.修改字符文本的一些属性,或者默认也可
批量制作字符文本4.png
3.修改分辨率和导出路径,点击导出
批量制作字符文本5.png
等待导出完成

三、编写程序,读取并打印文本

程序其实很简单,无非是读取文件再输出,不过有一些需要注意的,比如隐藏光标,修改控制台窗口大小,用clock()控制每秒帧数。要想提升速度,可以先读取所有文件存入数组,然后再输出数组。
下面是用C++写的源码,用的是C风格的读写,用其他语言也可,逻辑一样。

完整源码

#include<iostream>
#include<windows.h>
#include<ctime>
#include<string>
#include<cstdio>
#include<mmsystem.h>
#pragma comment(lib, "Winmm.lib")
#define MAXCOL 150
#define MAXROW 66
#define ZERO SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), {0,0})

// 150: 150x66
//100:    100x44
using namespace std;

char map[14000][200][200];
void init(){
    //隐藏光标
    CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); 
    SetConsoleTitle("字符badApple");             //控制台标题 
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    //SMALL_RECT rc = {0,0, MAXCOL, MAXROW};
    system("mode con cols=150 lines=67");  // 修改窗口大小
    SetConsoleWindowInfo(hOut,true ,&rc); 
}

string getName(int num){
    string fileSrcName = "badAppleTxt_150_60fps/ASCII-badApple60fps00000.txt";
    int tmp = num;
    int idx = fileSrcName.find('.')-1;
    
    while(num!=0){
        fileSrcName[idx--] = num%10+'0';
        num/=10;
    }
    return fileSrcName;
}
int main(){
    FILE *fp;
    char chs[200];
    int beginIdx = 4000;
                
    string fileName;
    int sum,x,y;
    
    for(sum = 0;sum < 14000;sum++){
        fileName.clear();
        fileName = getName(sum);
        if((fp = fopen(fileName.c_str(),"r"))!=NULL){        //打开一帧 
            x = 0;y = 0;
            while(!feof(fp)){                //只要该帧画面没输出完,就继续循环 
                fgets(chs,MAXCOL+10,fp);
                chs[MAXCOL] = '\0';
                strcpy(map[sum][x],chs);
                x++;
            }
            fclose(fp);
        }
        else {
            break;
        };
    }
    //输出
    cout << "请输入任意键开始" << endl;
    getchar();
    init();
    //PlaySound("badApple.wav",NULL,SND_ASYNC);
    mciSendString("play badApple.mp3", NULL, 0, NULL);            //播放音乐 
    system("cls");
    double cd = 1000/60.0;        //每秒60帧 
    clock_t beginClock = clock();
    double totalCd = 0.0;
    for(int tmp = 0;tmp < sum;tmp++){
        while(1){
            if(clock()>=beginClock+(int)totalCd){
                totalCd+=cd;
                for( x = 0;x < MAXROW;x++){
                    puts(map[tmp][x]);
                }
                break;
            }
        }
        ZERO;
    }
    
    
    return 0;
}

下载链接

BadApple.rar
ascgen2.exe

本文作者:六月丶

本文链接:https://hctra.cn/index.php/archives/390/

版权声明:如无特别声明,本文即为六月'blog原创,仅代表个人观点,如要转载请务必注明文章出处。
最后修改:2019 年 11 月 11 日 12 : 20 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论

2 条评论

  1. zhx

    小哥,怎么插入bilibili视频的?

    1. 六月丶
      @zhx

      https://dxoca.cn/front/257.html 这篇博客有教程