Bad Apple!播放器 1-前置知识

前言

说起来,编程的概念站主初中就听说了。那时候是很多同学从事信息奥林匹克竞赛,就站主当时的理解,似乎只是一种训练使用计算机的手段,完全可以归为数学的范畴。大家也不会去可以实现什么特定的功能,要做的只是编写一个读入和输出文本的函数。这当然太狭隘了,因为原因在于我忽视了效率这样的重要概念以及程序像积木一样的可组合性。事实上,当编程的内容不是冷冰冰的数字或是算法(这些当然很重要),而是可以和生活爱好联系在一起时,这是非常有成就感的一件事。

BadApple 是一首非常著名的音乐作品,最初出自日本同人社团「Alstroemeria Records」的专辑《Lovelight》,后作为游戏《东方Project》系列(尤其是《东方幻想乡》)的背景音乐而广为人知。最经典的版本是2009年由“nomico”演唱、影绘师“やまねこ”制作的动画MV,画面以黑白剪影风格呈现,角色来自《东方Project》。这段视频因流畅的动画、强烈的节奏感和艺术性,仍然成为一个时代网络亚文化的标志之一。

BadApple 被移植到各种奇怪设备上播放,比如示波器、计算器、LED矩阵、游戏机(甚至《我的世界》或《Excel》里还原)。只要提到“在XX设备上运行Bad Apple”,通常意味着对硬件极限的挑战。甚至有一个暴论:有色差的地方就有 BadApple。

站主的第一个编程项目也是从这个方面开始的。由于技术力薄弱,只能从电脑终端进行实现。这当然不是什么重大的突破,也不能为精通编程的老友提供启发,但是通过用写这个自己的熟悉项目的说明文档记录分享站主的点滴,对于日后写技术文档也是有帮助的。就让我从这个项目出发,开启我的技术文档之旅吧。

技术栈

“栈”可以理解为“层”,在英文中,它的含义是理解为一堆盘子垒起来,只有取下了最上面的盘子才能够移动下面的盘子。当然,这篇文章里的栈其实更注重它分层的特点,就像一座房子,只有层层堆叠才能成就最后的宏伟景观。我所用的技术栈如下:

1. 核心语言

  • Python 3.12.6 (这是我的版本,我认为3开头的都差别不大):编程语言可以理解为介于人脑和计算机之间的桥梁,python这个大名鼎鼎的语言自不必多说,以其简单易懂的特性成为我的入门

2. 视频处理

  • OpenCV (cv2)OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库。它的本体由 C++ 编写,cv2 是它的 pyhon 接口模块。这里我当然不用学会他的全部功能,我主要用到视频帧提取 (cv2.VideoCapture)和图像灰度化与采样(RGB类型)

3. 音频处理

  • FFmpeg (通过 subprocess 调用) :FFmpeg 是一个开源的、跨平台的多媒体处理工具库,广泛用于视频、音频的录制、转换、流传输和播放等任务。在这里,我们用它从视频中提取音频
  • PygamePygame 是一个专为 Python 设计的跨平台游戏开发库,提供多媒体功能(图形、音频、输入控制等)。相比于我在物理实验用到的 librosa ,它的优点是更加轻量化。我用它来进行音频和画面匹配
由mermaid绘制的说明图

4. 终端渲染

  • CursesCurses 是一个用于终端(Terminal)文本界面图形化渲染的库,它允许开发者创建基于字符的交互式界面(如 ASCII 动画、菜单、游戏等)。我觉得它的名字非常好(咒语)。我用它来构建终端图形化界面

5. 辅助工具

  • tqdm :一个进读条工具,有进度的地方总能使人心安呢
  • pprint :格式化输出,能够直接看到每一帧的图像

6. 系统交互

  • os :无需多言
  • subprocess : 简单地调用外部进程
  • time :这个用来控制时间,让每一帧视频与对应的音频匹配

实现思路

一下是这个项目的说明图

c:\xxx
│
├── data/                   # 存放媒体文件
│   ├── 1.mp4           # 原始视频文件
│   └── bgm.mp3       # (处理后的)音频文件
├── main.py               # 主程序
├── convert.py           # 转换模块
├── Dockerfile            #为docker部署提供方便,后面另说                  
└── requirements.txt    # 依赖文件

主要的内容是 main.py 和 convert.py , main 的目的是读取视频,把视频中的每一帧抽出来转换为字符图保存在一个文本文件里,convert 就是具体的转换过程了。

这部分内容放到后面再讲吧。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇