文章目录
- 前言
- 一、实现思路
-
- 1.你需要把视频转换成一帧一帧的图片。
- 2.把图片转换成字符串文件。
- 3.按照一定的时间差遍历打印字符串文件。
- 4.另起一个线程进行音乐的同步播放。
- 二、具体步骤
-
- 1.视频转图片
- 2.图片转字符串文件
- 3.循环遍历字符串文件
- 4.通过异步线程添加音乐播放
- 三、总结
前言
最近华强买瓜在B站大火,于是乎在闲暇之余,通过百度和各种学习,终于将这个视频通过Java形式展现出来了~
具体效果是这样的~
可以参考我发布在B站的视频进行预览~
华强买瓜【程序员复刻版】
一、实现思路
其实实现这个视频转文字输出的功能并不难,就是需要分成好几个环节去实现。
1.你需要把视频转换成一帧一帧的图片。
2.把图片转换成字符串文件。
3.按照一定的时间差遍历打印字符串文件。
4.另起一个线程进行音乐的同步播放。
二、具体步骤
首先准备好华强买瓜的原视频:
链接:https://pan.baidu.com/s/1HRAAzprVArxd692kUsKoPQ
提取码:p88i
1.视频转图片
通过AoaoPhoto Video to Picture Converter 将视频转换为图片。
软件下载地址:
视频转换工具
1)首先选择上面的load(视频导入目录)和下面的output folder(图片导出目录)
2)选择分辨率为1280*720,无效果,每秒十张图片,图片格式为PNG。
3)点击convert(转换)
操作如下图所示:

3.循环遍历字符串文件
接下来就到了代码的部分了~
4.通过异步线程添加音乐播放
1)音频转换:
音乐可以通过绘声绘影将MP4转换为音频。
转换教程:绘声绘影转换视频为音频
如果懒得转换,直接使用下面资源:
链接:https://pan.baidu.com/s/1cbFR4l9TOb7wJGJxvc5Bpw
提取码:77dd
2)音乐播放的相关代码:
3)异步线程:
思路其实就是把播放音乐的方法写在线程的run方法中,然后在打印直接就启动线程。
由于我这边直接将内容都写在一起了,并没有很好的规划代码结构。直接将完整源码贴在下面。
public class Hua extends Thread{ public static void main(String[] args) throws Exception { new Hua().start(); long stime = System.currentTimeMillis();// File file = new File(Hua.class.getClassLoader().getResource("input").getPath()); File file = new File("E:pictureoutputOutputStrs"); File[] files = file.listFiles(); for (int i = 0; i files.length; i++) { BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(files[i]))); String line =""; String str = null; while ((str = in.readLine()) != null) { line += str+"n"; } System.out.println(line); Thread.sleep(5); line = ""; new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); in.close(); } long etime = System.currentTimeMillis(); System.out.println("播放时长:"+(etime-stime)/1000); } @Override public void run() { try { playMusic(); } catch (Exception e) { e.printStackTrace(); } } public static void playMusic() throws Exception, IOException{ //1 获取你要播放的音乐文件// File files = new File(Hua.class.getClassLoader().getResource("music").getPath());// File file = files.listFiles()[0]; File file = new File("E:picture华强买瓜.wav"); //2、定义一个AudioInputStream用于接收输入的音频数据 AudioInputStream am; //3、使用AudioSystem来获取音频的音频输入流(处理(抛出)异常) am = AudioSystem.getAudioInputStream(file); //4、使用AudioFormat来获取AudioInputStream的格式 AudioFormat af = am.getFormat(); //5、一个源数据行 SourceDataLine sd ; //6、获取受数据行支持的音频格式DataLine.info //DataLine.Info dl = new DataLine.Info(SourceDataLine.class, af); //7、获取与上面类型相匹配的行 写到源数据行里 二选一 sd = AudioSy
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!